bvlik/web-vuln-lab
GitHub: bvlik/web-vuln-lab
一个包含漏洞版、攻击者服务器和安全加固版的Web安全教学实验室,演示从钓鱼到数据窃取的完整攻击链并对比修复效果。
Stars: 0 | Forks: 0
# 🧪 web-vuln-lab
**一个实用的 Web 攻击实验室:利用漏洞,观察数据被盗过程,然后见证其被修复。**
三个小型的 Node.js 应用,演示了针对故意设置的易受攻击目标的完整攻击链 —— **钓鱼 → 存储型 XSS → 会话
窃取 → SQL 注入 → 数据窃取** —— 其中包含一个用于收集被盗 cookie 的攻击者服务器,
以及一个所有漏洞利用都会失败的、经过安全加固的同源应用。
[](LICENSE)




## 为什么
阅读关于 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, 数据泄露, 漏洞复现, 自定义脚本, 蓝队分析