[CISCN2019 华北赛区 Day1 Web2]ikun
buu题目复现
页面提示,一定要买到Lv6,查找几页,找不到Lv6的存在,尝试通过脚本爆破Lv6
import requests
url = 'http://57043135-ce0e-4b77-bcac-cd45e975d6f7.node4.buuoj.cn:81/shop?page='
for i in range(1,1000):
url = 'http://57043135-ce0e-4b77-bcac-cd45e975d6f7.node4.buuoj.cn:81/shop?page=' + str(i)
result = requests.get(url).content.decode('utf-8')
if 'lv6.png' in result:
print(url+'|yes')
else:
print(url+'|no')
爆出结果在181页,访问找到Lv6
点击购买提示需要登录,没有账号可以先随手注册一个,注册成功后登录
余额只剩10元,明显不够,尝试逻辑支付漏洞绕过
在前端修改相关折扣
直接修改p标签里的数字无用,看到下面几个hidden类型的表单,通过post传参,才是解题关键
通过修改price值小于余额发现无法成功支付,提示操作失败
通过修改discount折扣值为0.00000000008,成功绕过,提示只允许admin访问
接下来是垂直越权操作,查看cookie,看到了一段JSON Web Token,复制出来,找在线网站[https://jwt.io/]解密查看
看到了我们的用户名123,既然只允许admin访问,我们就可以修改123为admin进行越权操作,密钥可以通过c-jwt-cracker爆破出密码为1Kun,填入并修改用户为admin,得到修改后的JWT值
成功进入,在源码中找到了备份文件,下载并进行代码审计
这里考到了python pickle反序列化漏洞,全局搜索关键字pickle,定位到admin.py中,通过修改become参数来构造反序列化
在python2中只有内置类才有__reduce__ 方法,即用class A(object) 声明的类,而python3 中已经默认都是内置类了
在centos中利用python2执行得结果
复制结果到页面中找到对应的表单框(去掉标签的hidden类型),提交即可
|