打开页面看到ikun 没想到国赛也是小黑子
看到关键字爆破和提示ikun们冲呀,一定要买到lv6
我们看到很多lv,唯独没有看到lv6
点击下一页
可以看到页面发生了变化第二页上面就是page=2,那么我们的思路就是利用python写个脚本自己去跑
python中requests模块是爬虫我们可以利用这个脚本去爬出lv6的所在页数
脚本运行完成lv6在181页,我们打开181页去看看
发现lv6我们点击购买
显示要登录用户我们注册一个
从这里我们可以发现钱是不够的,我们的思路就要想到一个支付逻辑漏洞
这里应该是前端验证,所以我们修改页面前端的数据信息就可以达到支付逻辑漏洞效果
这里又出现了新的问题,显示要admin用户才能访问,我们的思路就要考虑到我们现在是普通用户访问,admin是管理员用户,我们就要立马想到垂直越权,抓包分析一下
发现是jwt验证,我们可以用jwt来伪造admin用户,注意这一段jwt是有密钥加密的我们需要利用工具去破解
尝试使用c-jwt-cracker工具爆破JWT秘钥,成功得到秘钥。
---下载地址:https://github.com/brendan-rius/c-jwt-cracker
---构建docker使用c-jwt-cracker需要我们在我们linux里安装好openssl头文件。在linux的配置命令是:apt-get install libssl-dev
下载好c-jwt-cracker,还需要在工具所在目录执行make命令,目的是让文件makefile运行起来。编译完后会生成一个jwtcrack文件
---进行破解,密匙为:1Kun
在进入jwt去修改jwt为admin用户
得到admin的jwt,利用抓包工具修改jwt发送得到
这里没啥提示,我们查看源代码
发现了一些线索还有一个压缩包的地址我们尝试下载
解压文件后得到python文件,我们利用pycharm打开对源代码进行代码审计
1.内置危险函数
exec
execfile
eval
2.标准库危险模块
os
subprocess
commands
3.危险第三方库
Template(user_input) : 模板注入(SSTI)所产生的代码执行
subprocess32
4.反序列化
marshal
PyYAML
pickle和cpickle
shelve
PIL
unzip
我们审计代码看到存在pickle这个模块
可以确定为是python反序列化漏洞
查看源代码:
---post接受传参become,然后将接受到的字符串进行反序列化为对象
---我们可以通过构造字符串,为对象的属性和方法进行赋值,构造payload
在表单里面也发现了become传参
构造payload,传输一个对象执行命令执行的方法(这里是python2的代码)
---先构造一个payload对象,里面的reduce方法是python的扩展类型,当对象被反序列化时就会调用__reduce__函数,进行执行命令执行函数,打开/flag.txt的文本
---pickle.dumps()将对象转化为字符串的格式,然后进行序列化为字符串
---urllib.quote是将字符串进行url编码(由于在源代码里面进行了url解码,所以这里需要进行事先的编码)
---payload(obiect):即payload类继承了object对象(python3里面是默认继承的,Object类是一切类的父类)
放到python2环境去执行
由于表单传参的位置是隐藏的需要我们修改
修改元素,将hidden去掉,发现post的弹窗出现,可以进行post传参
出现post输入框
输入c__builtin__%0Aeval%0Ap0%0A%28S%22open%28%27/flag.txt%27%2C%27r%27%29.read%28%29%22%0Ap1%0Atp2%0ARp3%0A.
得到flag