本文作者:@wilson
来源:90WiKi
发表时间: 2015-5-13 08:24:43
1.前言
Python搭建web服务器,开始慢慢变多,上周音符大屌搭建一个小型ctf给我们玩,里面就有不错的python_web题目。
于是乎学习一下python_web安全,总结一下,方便以后自己翻一下
2.基础
Python语法基础
Python 的web:django,web.py等等~
Web.py:
http://webpy.org/tutorial3.zh-cn
Djiango:
基本全是mvc框架的,这些是研究python安全最基础的知识
3.python_web 出现的漏洞
3.1.sql注入
框架没有注入么?不好说,要看程序员了。。。。
这里就有一个注入,可以直接注入
3.2.xss
这也是很有可能出现的~
这里就直接发射型xss了
3.3任意文件读取
Filename参数没过滤好,就会任意文件读取。
直接
http://127.0.0.1/index/readfile? ... /../../etc/password
另一种任意文件读取情况:
将http://www.baidu.com
改为file://etc/passwd
造成任意文件读取
3.4 命令执行
与OS命令注入攻击相关的模块:
eval、os.system()、os.popen*、subprocess.popen、os.spawn*、commands.*、popen2.*、pickle
3.4.1.常见
直接将传输的数据放到这些函数中执行了,造成命令注入漏洞
输入ip|whoami 后面whoami也带入执行了
喜欢写爬虫的黑阔们要小心了,有人喜欢将爬到url放入一个list里面,然后给sqlmap.py来检测注入。例如这样
万一别人来一个
<a href="http://evil.com|rm -rf / &"> list
里面就有一个元素是http://evil.com|rm -rf
最后执行
os.system("python sqlmap.py -u http://evil.com|rm -rf / &")
然后你哭晕在厕所
3.4.2.Pickle反序列化造成了命令执行
漏洞原理:http://drops.wooyun.org/papers/66
再文章里面我们知道
pickle.loads() 是可能造造成命令执行的
若loads的内容可控:
import pickle
cPickle.loads("csubprocess\nPopen\np1\n((S'CMD'\np2\ntp3\ntp4\nRp5\n.")
这里就可以执行命令了
Web.py出现这样问题
值得注意是web.py框架中的session.py 中的decode方法是有这个漏洞的,也就是说要是调用decode就会出现漏洞~~!
你可以这样去改造脚本得到str,去执行你要的命令
4.实例
这里拿音符给的代码讲一下实例:
不方便把代码给大家,直接将有漏洞代码写出来吧
4.1 注入
Admin的check方法,Username 没有过滤,直接可以注入:
发现2可以显示 直接select flag from flag 注意要有括号!
4.2 文件读取
App.py定义的uploads方法 任意文件读取漏洞
过滤了../ ,但是我们可以这样改造一下:
注意在浏览器里面这样访问时不可以的- -||
4.3命令执行
还是因为session.py 中的decode方法有漏洞,
再音符这个ctf中,base函数的authcode方法 调用decode函数造成代码执行:
Cookie中的authcode 会进入decode 这个有漏洞函数。
用我之前给的脚本生成一下basd64 的str加到这个authcode中就触发这个命令执行
执行whoami命令
over