目标
获取 Web 应用中的管理员权限,读取隐藏的 FLAG:
第一阶段:信息收集(Reconnaissance)
1. 发现敏感路径
访问目标网站:
访问到http://10.10.1.171:18081/ 发现几乎没有可操作页面

尝试常见敏感文件:
直接访问http://10.10.1.171:18081/robots.txt
发现robots.txt存在
响应内容是User-agent: * Disallow: /app.py

于是便寻找到了突破口 /app.py 被禁止爬取,说明它可能存在!(
robots.txt是网站根目录下的一个纯文本文件,它的作用一般是告诉搜索引擎爬虫(如 Googlebot、Bingbot 等)哪些页面可以抓取,哪些不可以抓取。)安全提示:
绝对不要在robots.txt中写入真实敏感路径!
因为黑客会专门看这个文件来找漏洞。
2. 获取源码
直接访问泄露的源码:http://10.10.1.171:18081/app.py 成功返回完整的应用代码。
这其实是典型的 “源码泄露”漏洞,常由错误的 Web 服务器配置导致(如未禁止 .py 文件访问)。
第二阶段:漏洞分析(Vulnerability Analysis)
从app.py中识别出以下致命问题:
漏洞 1:硬编码加密密钥
SECRET_KEY = b'SafeBox_Secret_K' # 16 bytes
密钥直接写死在代码中。我可以完全掌握加密/解密能力。
漏洞 2:自研认证机制(Roll Your Own Crypto)
使用 AES-ECB 加密用户数据作为 Cookie(auth_token)。
AES-ECB模式不安全(相同明文 → 相同密文),但此处因密钥已知,模式就无关紧要。
漏洞 3:客户端声明权限
Python编辑 1user_data = json.loads(user_data_json) 2if user_data.get('role') == 'admin': 3 return render_template('admin.html', flag="flag{...}")
权限完全由客户端的 Cookie 决定,服务端没有进行session校验。所有只要能构造出包含 "role": "admin"的合法加密数据就可以提权。
攻击思路:用已知密钥加密一段{"role":"admin"}的 JSON,生成伪造 Cookie,替换浏览器中的auth_token。
第三阶段:环境与工具准备
系统环境
攻击机: Ubuntu / Windows(带 Python)
目标机:http://10.10.1.171:18081
必需工具/模块
| 工具 | 用途 | 安装方式 |
|---|---|---|
| Python 3.6+ | 运行脚本 | 系统自带或 apt install python3 |
| pycryptodome | AES 加解密 | pip install pycryptodome(在虚拟环境中) |
| 浏览器(Chrome/Firefox) | 手动替换 Cookie | 自带 |
| 开发者工具(DevTools) | 查看/编辑 Cookie | F12 打开 |
在新版 Debian/Ubuntu 中,必须使用 虚拟环境 避免 externally-managed-environment 错误。
但实际上由于只是自身靶场,所以并没有使用虚拟环境,安装pycryptodome时直接加上--break-system-packages即可强制安装。
第四阶段:编写利用脚本(Exploit)
文件名:cookie.py

运行脚本:
Bash运行 python3 cookie.py
输出:
Forged Admin auth_token: RR8GZ+QBFe/2HK9Zdgrf/njsXYKO741F3Ka5SSLxNH4vPzel9nARLW2i6WuWKFgCqUnZkNIlIkIBrsPOsKtc0BT2jgl18C312dcoVV8nmCo=
此 Token 是 Base64 编码的 AES-ECB 密文,服务端可正确解密。
第五阶段:利用(Exploitation)
步骤 1:访问目标登录页
浏览器打开:
Text编辑 1http://10.10.1.171:18081/login
用guest/guest,登录一次,建立 Cookie 上下文。
步骤 2:打开开发者工具
按
F12→ 切换到 Application展开 Cookies → http://10.10.1.171:18081

步骤 3:替换 Cookie
找到 auth_token
双击其 Value,粘贴生成的伪造 Token:

第六阶段:漏洞成因与防御建议
根本原因
| 问题 | 后果 |
|---|---|
| 源码泄露(/app.py 可访问) | 密钥暴露 |
| 硬编码密钥 | 无法轮换,一旦泄露即沦陷 |
| 客户端存储权限 | 信任不可信输入 |
| 自研加密方案 | 引入非必要风险 |
攻击全景
Text编辑
1[信息收集]
2 ↓
3访问 robots.txt → 发现 /app.py
4 ↓
5[源码泄露]
6 ↓
7下载 app.py → 获取 SECRET_KEY = b'SafeBox_Secret_K'
8 ↓
9[漏洞分析]
10 ↓
11识别:硬编码密钥 + 客户端权限控制
12 ↓
13[利用准备]
14 ↓
15安装 pycryptodome(虚拟环境)→ 编写 forge_admin_cookie.py
16 ↓
17[生成伪造 Token]
18 ↓
19运行脚本 → 得到 Base64 Token
20 ↓
21[权限提升]
22 ↓
23浏览器替换 auth_token Cookie
24 ↓
25[获取 FLAG]
26 ↓
27访问 /dashboard → 显示 flag{…}

Comments | NOTHING