本实验即综合实践项目 M3。对自己的靶场应用(M1 末)发现并利用预设漏洞,每类写概念验证(PoC) + 复现步骤。⚠️ 仅在自己派生的应用 /
127.0.0.1/ 授权环境——触及第三方系统是红线。 种子工程app.py的/orders?user=用 f-string 拼接 SQL,是故意预留的注入点。
完成本实验后,在
docs/m3/report.md自评:点亮 簇③·L2。
milestone/m2 分支 tip(M2
末应用,已加固 + 已自侦察)。按 Git 规范 从
milestone/m2 切 milestone/m3,MR 目标
= milestone/m2。/orders SQL 注入点;XSS / CSRF
锚点可按需在自己的代码里加,上传锚点用任务 C
给的标准件——自由发挥容易埋出「不存在利用链」的锚点)。指向 /orders?user= 的字符串拼接注入:写概念验证(如
'; UPDATE orders --、UNION SELECT sql,name FROM sqlite_master --),dump
全表 / 篡改 / 越权读他人订单;记录原理(「数据即程序」)+ 触发条件 +
影响。
在自己的应用里构造一个可控回显 / 存储点,写概念验证(窃取 cookie / 演示会话劫持);说明反射型 vs 存储型区别。
⚠️ 先校准利用目标:PHP 时代的「上传 webshell → 访问即 RCE」链在 Flask 栈下不存在——Flask 不解释任何上传文件,
.php/图片马落盘后只是惰性数据。「绕过类型校验成功落盘」≠「漏洞可利用」。本任务要求验证可利用性(造成真实影响),不是「绕过防御」。
标准锚点(M1/M2 若已自建上传锚点,对照补齐回源端点):
@app.post("/profile/upload")
@login_required
def upload():
f = request.files.get("file")
if not f:
return jsonify({"err": "no file"}), 400
os.makedirs("uploads", exist_ok=True)
dest = os.path.join("uploads", f.filename) # 锚点①:文件名未校验(可路径穿越)
f.save(dest)
return jsonify({"ok": True, "saved": dest}), 201
@app.get("/uploads/<path:fn>")
@login_required
def serve_upload(fn):
return send_from_directory("uploads", fn) # 锚点②:按扩展名猜 MIME,同源回源端到端验证以下至少一条(两条都做 → 深度档倾斜):
os.path.join 不过滤
..。构造 filename="../app.db" 覆盖 SQLite
库(或 filename="../pwn.txt"
写到应用根目录)。验证判据:文件落在 uploads/
之外 / app.db
内容被改写。影响:完整性/可用性崩塌;若覆盖的是模板文件,下次渲染即模板注入,可升级为
RCE。<script> 的 xss.html,经
/uploads/xss.html 以 text/html
同源返回,脚本以受害者会话身份执行(如
fetch('/orders?user=...')
后外带响应)。验证判据:攻击载荷成功执行的证据(浏览器/无头浏览器访问 +
你自己监听端收到外带数据)。注意:M1 加的 HttpOnly
只能挡住「读
cookie」,挡不住「冒充受害者发请求」——报告里讲清这一层。修复方向(写进报告,M4 落地):secure_filename() +
扩展名白名单 + 随机文件名落盘;回源强制
Content-Disposition: attachment +
X-Content-Type-Options: nosniff;上传目录移出 Web
可达路径。
构造一个跨站请求(改密 / 下单),写概念验证 + 说明 SameSite / Token 防御原理。
m3_ai_compare)用 PentestGPT 或国产安全大模型跑一遍 M3 靶场,对比「AI 辅助 vs 人工」的效率与盲区;讨论自主挖掘智能体的能力边界。不替代人工概念验证,仅作对比,命中 / 误报给数字。
学有余力时:在自己的应用里埋一个模板拼接锚点(如
/hello?name= 用
render_template_string("Hello " + name) 渲染)。用
{{ 7*7 }} 验证「模板被解释」(返回 49 即成立)→
{{ config }} 读出 secret_key(闭环呼应 M0
R4)→ 说明经 __class__.__mro__ 沙箱逃逸可达 RCE
的原理(定性说明即可,不要求武器化载荷)。这是「数据即程序」元范式在模板层的复现,属四类之外的深度档加分项。
127.0.0.1(红线)。127.0.0.1 /
自己派生的应用;报告须显式声明授权范围。触及第三方 = 安全严谨不合格 +
上报。report.md
对照簇③·L2,每项附证据路径。在 docs/m3/ 下提交(在 milestone/m3
分支上完成、push、开 MR @ 助教,目标 = milestone/m2):
docs/m3/
├── sqli-poc.* # 任务 A
├── xss-poc.* # 任务 B
├── upload-poc.* # 任务 C(路径穿越 / 同源存储 XSS,至少一链)
├── csrf-poc.* # 任务 D
└── report.md # 每类:原理 + 触发条件 + 影响 + 复现步骤 + (可选)AI 对比 + 自评
评分量规(绑定簇③·L2,满分 100;详细维度释义见 评价指南):
| 维度 | 权重 | 优秀 [90,100] | 合格 [60,90) | 不合格 [0,60) |
|---|---|---|---|---|
| 完成度 | 0.30 | ≥4 类漏洞概念验证(SQLi/XSS/上传/CSRF 全覆盖)+ 复现步骤 + 分支 milestone/m3 + MR | 主要类别(≥2 类)有概念验证 | 仅 1 类或无概念验证 |
| 深度 | 0.25 | 每类概念验证含漏洞原理 + 触发条件 + 影响评估;能编排多阶段 | 能复现单类漏洞 | 仅贴攻击载荷无分析 |
| AI 双向 | 0.10 | 用 AI(PentestGPT/国产安全模型)辅助挖掘并对比命中 / 误报 | 仅人工 | 无 AI 内容(M3 对 AI 挖掘有期望,故权重 0.10) |
| 安全严谨 | 0.25 | 仅对自己靶场;概念验证含边界声明;规避真实破坏 | 基本合规 | 触及第三方系统(红线) |
| 自评 | 0.10 | 自评(簇③·L2)与作品一致 | 有自评 | 无自评 |
| 簇 × 级 | 能力描述 | 是否点亮 | 证据 |
|---|---|---|---|
| ③·L2 | 发现并利用 ≥4 类 Web 漏洞,每类写概念验证 + 复现 | ☐ | M3 的 sqli/xss/upload/csrf 概念验证 + report |
下一单元 U4(M4 加固)将给这个被攻破的应用套上 WAF/IDS 纵深防御——这里的概念验证就是 M4 规则命中 / 误报复盘的「弹药」。