bvlik/web-vuln-lab

GitHub: bvlik/web-vuln-lab

一个包含漏洞版、攻击者服务器和安全加固版的Web安全教学实验室,演示从钓鱼到数据窃取的完整攻击链并对比修复效果。

Stars: 0 | Forks: 0

# 🧪 web-vuln-lab **一个实用的 Web 攻击实验室:利用漏洞,观察数据被盗过程,然后见证其被修复。** 三个小型的 Node.js 应用,演示了针对故意设置的易受攻击目标的完整攻击链 —— **钓鱼 → 存储型 XSS → 会话 窃取 → SQL 注入 → 数据窃取** —— 其中包含一个用于收集被盗 cookie 的攻击者服务器, 以及一个所有漏洞利用都会失败的、经过安全加固的同源应用。 [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) ![Node.js](https://img.shields.io/badge/Node.js-Express-0A1929?style=for-the-badge&logo=node.js&logoColor=12ABDB) ![SQLite](https://img.shields.io/badge/SQLite-db-0A1929?style=for-the-badge&logo=sqlite&logoColor=12ABDB) ![OWASP](https://img.shields.io/badge/OWASP-XSS%20%7C%20SQLi-0A1929?style=for-the-badge&logo=owasp&logoColor=12ABDB) ![Use](https://img.shields.io/badge/For-Education%20%2F%20CTF-red?style=for-the-badge)
## 为什么 阅读关于 XSS 和 SQLi 的资料是一回事;而看着管理员的会话 cookie 落入攻击者的服务器, 并借此导出数据库则是另一回事。这个实验室让整个攻击链变得直观可见—— 更重要的是,它**并排提供了修复后的版本**,这样你就可以*运行*并体会易受攻击代码与 安全代码之间的差异,而不仅仅是阅读文字。 ## 三个应用 | 应用 | 端口 | 角色 | |-----|------|------| | 🎯 [`vulnerable-app`](vulnerable-app) | `3000` | 目标:存储型 XSS、SQL 注入、不安全的会话 (`httpOnly:false`)、SQLite 中的模拟敏感数据 | | 🛰️ [`attacker-server`](attacker-server) | `4000` | 攻击者控制的 endpoint,用于接收被窃取的 cookie 并将窃取的会话可视化 | | 🛡️ [`secure-app`](secure-app) | `5000` | 加固版双胞胎:输出编码、参数化查询、安全会话、Helmet、输入验证 | ## 攻击链 ``` Phishing email ──▶ Admin clicks ──▶ Stored XSS fires │ document.cookie ▼ attacker-server (:4000) ◀── stolen admin session │ reuse cookie ──▶ admin panel (:3000) │ SQL injection ▼ dump users (fake SSNs, credentials) ``` 针对 `secure-app` (:5000) 重放相同的步骤都会失败——这正是它的目的。 ## 运行说明 需要 Node.js 18+。打开三个终端: ``` # Terminal 1 — 目标 cd vulnerable-app && npm install && npm start # http://localhost:3000 # Terminal 2 — 攻击者 cd attacker-server && npm install && npm start # http://localhost:4000 # Terminal 3 — 加固版本 cd secure-app && npm install && npm start # http://localhost:5000 ``` 测试账户(两个应用均适用):`admin` / `admin123` 和 `user1` / `motdepasse`。 SQLite 数据库会在启动时自动重新创建。 ## 操作演示 1. **XSS** — 以 `admin` 身份登录,发布评论 `` → 脚本被执行。 2. **Cookie 窃取** — 发布窃取 cookie 的 payload;admin 会话会出现在 `http://localhost:4000`。 3. **会话重用** — 重放被盗的 `connect.sid` 以进入管理面板。 4. **SQL 注入** — 在管理搜索中,使用 `' UNION SELECT ... FROM users--` 导出记录。 5. **安全版本** — 在 `:5000` 上重复所有操作;所有漏洞利用都会被中和。 完整的 payload 和 `sqlmap` 配方请见 **[`docs/exploitation-guide.md`](docs/exploitation-guide.md)**。 ## 漏洞版与安全版对比 | 漏洞 | `vulnerable-app` | `secure-app` | |---------------|:----------------:|:------------:| | 存储型 XSS | ❌ 被执行 | ✅ HTML 输出编码 | | SQL 注入 | ❌ 可被利用 | ✅ 参数化查询 | | 会话窃取 | ❌ `httpOnly:false` | ✅ `httpOnly` + `sameSite` | | CSRF | ❌ 无防护 | ✅ 已防护 | | 安全响应头 | ❌ 缺失 | ✅ Helmet (CSP 等) | | 输入验证 | ❌ 薄弱 | ✅ 严格 | ## 相关工作 同属于该安全作品集的一部分: - [jwt-inspector](https://github.com/bvlik/jwt-inspector) — 解码、审计和攻击 JSON Web Tokens - [payload-encoder](https://github.com/bvlik/payload-encoder) — WAF/过滤器绕过的 payload 变体 - [home-detection-lab](https://github.com/bvlik/home-detection-lab) — 蓝队检测实验室 (Sigma + ATT&CK)

bvlik 构建 —— 用于学习的 Web 进攻与防御安全。

标签:Express, GNU通用公共许可证, MITM代理, Node.js, SQLite, Web安全, 安全靶场, 教育/CTF, 数据泄露, 漏洞复现, 自定义脚本, 蓝队分析