[CISCN2019 华北赛区 Day1 Web2]ikun
初步发现
打开发现是商场购物页面
提示要买lv6,点下一页看看,还是一堆商品,感觉是要写脚本找到lv6,调试一下找到lv相关信息,写脚本找到。在page181里面
点商品,注意有两个,一个是商品详情页,一个是直接点购买
抓包发现
有price还有折扣,发现改price怎么改都不行,那么就试试只改折扣。
暴露了后台地址,访问发现只能admin
又注意到抓包有jwt。
要改则必须破解密码 利用 c-jwt-cracker
https://github.com/brendan-rius/c-jwt-cracker
./jwtcrack 加密后的结果 |
密钥1Kun
改完重新发包,点击一键成为大会员没什么用
源码审计
看源代码,发现泄露,下载完审计
发现有hint
\u8fd9\u7f51\u7ad9\u4e0d\u4ec5\u53ef\u4ee5\u4ee5\u8585\u7f8a\u6bdb\uff0c\u6211\u8fd8\u7559\u4e86\u4e2a\u540e\u95e8\uff0c\u5c31\u85cf\u5728\u006c\u0076\u0036\u91cc |
找后门
在Admin.py找到
pickle反序列化
pickle:Python对象的持久化存储
功能:将任意Python对象存储及恢复
关键函数
pickle.dump() 文件 |
具体用法
Python pickle模块:实现Python对象的持久化存储 (biancheng.net)
反序列化详解
Python pickle 反序列化详解 - FreeBuf网络安全行业门户
从零开始python反序列化攻击:pickle原理解析 & 不用reduce的RCE姿势 - 知乎 (zhihu.com)
只要在序列化中的字符串中存在R指令,__reduce__方法就会被执行,无论正常程序中是否写明了__reduce__方法
记得生成payload时使用的python版本尽量与目标上的版本一致
p = pickle.loads(urllib.unquote(become)) |
继续做题
点击一键成为大会员,抓包发现become参数,利用reduce方法构造poc,修改become值,执行命令
Python2和Python3的执行结果不同,下面Python2的成功了(不明原因)
读取目录
import pickle |
import pickle |
最后执行
class ikun(object): |
一些可执行的 |
深入学习:
pickle反序列化初探 - 先知社区 (aliyun.com)
pickle反序列化的利用技巧总结 - 知乎 (zhihu.com)
CTF-python pickle反序列化 - sijidou - 博客园 (cnblogs.com)
最近碰到的 Python pickle 反序列化小总结 - 先知社区 (aliyun.com)
python反序列化攻击 - SecPulse.COM | 安全脉搏
从零开始python反序列化攻击:pickle原理解析 & 不用reduce的RCE姿势 - 知乎 (zhihu.com)


