[watevrCTF-2019]PickleStore
题目名字的描述就是pickle,感觉就是pickle反序列化,F12cookie是
1 | session=gAN9cQAoWAUAAABtb25leXEBTfQBWAcAAABoaXN0b3J5cQJdcQNYEAAAAGFudGlfdGFtcGVyX2htYWNxBFggAAAAYWExYmE0ZGU1NTA0OGNmMjBlMGE3YTYzYjdmOGViNjJxBXUu |
pickle:
pickle.dumps( obj )
序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。
pickle.loads()
反序列化对象。将数据解析为一个Python对象
我们可以大概明确两点,这段信息是被序列化出来的,序列化后的信息被base64加密过再放到cookie里。
我们可以试着反推一下我们最原始的cookie信息,理想的情况下他至少应该保存着我们有500块钱的信息。
1 | import pickle |
运行结果如下,果真显示了信息。
1 | {'money': 500, 'history': [], 'anti_tamper_hmac': 'aa1ba4de55048cf20e0a7a63b7f8eb62'} |
这段json串”anti_tamper_hmac”字段明显的表明了,使用了加密手段。hmac加密,了解的不是很深刻。
本来想着要去爆破什么的,不过md5级别的爆破还是算了吧。
然后东哥说,这个东西可以直接getshell,也别去碰撞了。
getshell构造
由于要拿shell,所以要先用小号去basic里启动一个靶机。
我此时用的ip是随到的。
构造nc的序列化
1 | import base64 |
拿到flag