记一道有意思的国赛题
[CISCN2019 华北赛区 Day1 Web2]ikun
Python脚本的编写
先随便注册一个账号,返回/shop路由,观察到以下的提示:
在商店中找了半天也没法找到lv6的账号。
打开网页源代码,发现每个不同等级的账号的都有这样的“标识”:
这是一个利用点,我们可以编写如下的python脚本:
1 | import requests |
代码比较简单这里不再赘述,这个脚本跑得比较慢,最后出来结果是i=181
,然后来到181页,果然看到了6级号:
使用burp抓包改优惠值
用burpsuite抓结算的包:
重点关注到左下角那个discount=0.8
,把它修改到0.00000001,打到巨便宜的价格,然后直接购买,之后发现返回了一个新的路由:
直接跟进。
JWT的伪造
进入后如图所示:
二话不说抓个包看看怎么个事:
一眼丁真,鉴定为需要JWT伪造,但是伪造的前提是我们要知晓JWT的秘钥,这里用到了一个工具:jwt-cracker。
用法:
把压缩后的文件拖入我的kali-linux虚拟机中,在当前的文件夹下调出控制台,输入:./jwtcrack jwt值
一会儿就爆出来了它的秘钥:
拿着这个秘钥去jwt.io网站伪造成admin用户:
pickle反序列化
接着拿着这个jwt重新访问:
网页源代码中发现不得了的东西,直接下载下来:
审计下源码,重点关注到admin.py中:
1 |
|
这边有一个反序列化函数,而become的值是可以控制的。
所以可以利用如下的EXP,生成payload:
1 | import pickle |
payload通过POST方式传入即可看到回显。
最终payload:
1 | c__builtin__%0Aeval%0Ap0%0A%28V__import__%28%27os%27%29.popen%28%27cat%20/flag.txt%27%29.read%28%29%0Ap1%0Atp2%0ARp3%0A. |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xiaofucの博客!