Python_web_安全

本文作者:@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

这也是很有可能出现的~

image

这里就直接发射型xss了

3.3任意文件读取

Filename参数没过滤好,就会任意文件读取。

image

直接

http://127.0.0.1/index/readfile? ... /../../etc/password

另一种任意文件读取情况:

image

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.常见

直接将传输的数据放到这些函数中执行了,造成命令注入漏洞

image

输入ip|whoami 后面whoami也带入执行了

喜欢写爬虫的黑阔们要小心了,有人喜欢将爬到url放入一个list里面,然后给sqlmap.py来检测注入。例如这样

image

万一别人来一个
<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就会出现漏洞~~!

image

你可以这样去改造脚本得到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

2015年的帖子,那时候就在用web.py,用了很长时间,可惜了web.py作者

记得修改为 Django

哈哈,这个错误不应该,我来改下

嗯,2015年的老帖子,当时原作者应该也是大意了:smiley:

1 个赞