pamath2005-dotcom/CTF_Challenge
GitHub: pamath2005-dotcom/CTF_Challenge
一款基于 OWASP Top 10 的交互式 Web 安全漏洞学习平台,通过十个渐进式关卡帮助用户掌握常见 Web 攻击原理与防御技巧。
Stars: 0 | Forks: 0
# 🔓 Broken Lock - Web 漏洞学习平台
## 📌 概述
Broken Lock 是一个交互式 Capture The Flag (CTF) 风格的 Web 应用程序,旨在基于 OWASP Top 10 演示现实世界的 Web 漏洞。
本项目严格用于教育目的,且只能在本地环境中运行。
## 🎯 特性
- **10 个漏洞关卡**:涵盖常见 Web 攻击的渐进式学习路径。
- **积分系统**:在解决挑战时跟踪您的进度。
- **黑客终端动画**:沉浸式 UI 元素,提供更好的 CTF 体验。
- **真实后端 SQL 注入演示**:亲手体验真实的数据库漏洞。
- **Session 处理**:练习并理解与会话 (Session) 相关的攻击。
- **SQLite 数据库**:轻量级的基于文件的数据库集成。
- **Node.js 后端**:健壮的服务器端架构。
- **XAMPP 兼容**:可选择使用 PHP/Apache 运行。
## 🧱 漏洞关卡
1. **信息泄露**:查找客户端暴露的隐藏数据和秘密。
2. **客户端验证绕过**:了解如何通过拦截和篡改请求来绕过 UI 限制。
3. **Cookie 篡改**:篡改会话或状态 Cookie 以获得未授权的提权访问。
4. **SQL 注入(模拟与真实)**:利用过滤不当的数据库查询提取、修改或删除信息。
5. **跨站脚本攻击 (XSS)**:在受害者的浏览器会话中注入并执行恶意脚本。
6. **不安全的直接对象引用 (IDOR)**:通过操作标识符(如 `user_id` 参数)访问受限的对象或配置文件。
7. **路径遍历**:操作文件路径以访问预期 Web 根目录之外的目录和文件。
8. **Token 篡改 / 不安全的反序列化**:修改 JSON Web Tokens (JWT) 或序列化数据以绕过身份验证并提升权限。
9. **命令注入**:在后端执行上下文中追加额外的系统命令以执行任意逻辑。
10. **服务器端请求伪造 (SSRF)**:强制服务器向内部或非预期的外部资源发出请求。
## 🛠 技术栈
**前端:**
- HTML5
- CSS3
- vanilla JavaScript
**后端:**
- Node.js
- Express.js
- SQLite(用于模拟/真实后端攻击)
**服务器:**
- Localhost (Node.js)
- XAMPP(可选,用于基于 PHP 的挑战)
## 🚀 安装与设置 (Node.js 版本)
### 前置条件
- [Node.js](https://nodejs.org/en/)(推荐 v14 或更新版本)
- Git(可选,用于克隆)
### 步骤
1. **克隆仓库(或下载 ZIP):**
git clone
cd broken-lock
2. **安装依赖:**
npm install
3. **启动应用:**
node server.js
# 或者在 package.json 中定义了 'npm start' 的话使用该命令
4. **访问应用:**
打开您喜欢的 Web 浏览器并导航到:
http://localhost:3000
*(端口可能根据您的后端配置而异)*
## 🏆 积分系统
- **积分**:在成功利用漏洞并捕获 flag 后,每关将获得积分。
- **存储**:目前存储在 `LocalStorage`(前端)中以方便使用。
- **扩展性**:该系统可以扩展为使用数据库存储,以实现持久化的多用户跟踪。
## ⚠ 免责声明 / 警告
🚨 **本应用程序故意设计为存在漏洞,仅用于教育目的。** 🚨
**切勿:**
- 将此应用程序公开托管在互联网上。
- 在生产环境中使用任何此代码。
- 将其连接到现实世界或敏感系统。
*作者不对本项目提供的信息或代码的任何滥用行为负责。*
## 📚 教育标准
- 基于 [OWASP Top 10 Web 应用程序安全风险](https://owasp.org/www-project-top-ten/)。
- 设计旨在教授防御性编程和道德黑客原则。
## 👨💻 作者
**本科最后一年 ICT 网络安全项目**
## 🎮 游戏玩法
1. **启动应用程序**:确保您的本地服务器正在运行(参见 [安装说明](#-installation--setup-nodejs-version))。
2. **浏览关卡**:从第 1 关开始并按顺序进行。每一关都展示了一个独特的 Web 漏洞。
3. **查找 Flag**:您在每一关的目标是利用漏洞揭开隐藏的“flag”或达成特定目标(如访问管理员配置文件)。
4. **提交 Flag**:将 flag 输入到提交表单中。正确的 flag 将获得积分并解锁下一关。
5. **学习**:如果您卡住了,请阅读提供的提示和解释。每一关都旨在教授一个特定的概念。
## 🧰 所需工具
为了成功完成 Broken Lock 中的挑战,建议具备以下工具:
- **一款现代 Web 浏览器**:Google Chrome、Mozilla Firefox 或 Microsoft Edge。
- **浏览器开发者工具**:内置工具,用于检查 HTML、监控网络请求以及查看存储的 Cookie/本地存储。
- **Web 代理(可选但推荐)**:如 [Burp Suite Community Edition](https://portswigger.net/burp/communitydownload) 或 [OWASP ZAP](https://www.zaproxy.org/) 等工具,用于拦截和修改 HTTP 请求。
- **SQLite 浏览器(可选)**:在探索 SQL 注入时直接检查后端数据库。
## 📁 项目结构(预期)
```
broken-lock/
├── public/ # Frontend assets (CSS, JS, Images)
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│ └── index.html # Main landing page
├── levels/ # Individual vulnerability challenges
│ ├── level1.html # Information Exposure
│ ├── level2.html # Client-side bypass
│ └── ...
├── server/ # Backend logic
│ ├── server.js # Node.js/Express application entry
│ └── database.sqlite # Local database (created at runtime)
├── package.json # Node.js dependencies
└── README.md # Project documentation
```
## 🤝 贡献
本项目开放教育性贡献!如果您有关于新关卡、错误修复或 UI 改进的想法:
1. Fork 本仓库。
2. 创建一个新分支 (`git checkout -b feature/new-level`)。
3. 提交您的更改 (`git commit -m 'Add Level 7: CSRF'`)。
4. 推送到分支 (`git push origin feature/new-level`)。
5. 打开一个 Pull Request。
## 🔍 攻略与提示
在某一关卡住了?Broken Lock 的重点在于学习!
- **四处看看**:按 `F12` 打开开发者工具。检查元素、控制台、网络和应用程序选项卡。
- **仔细阅读**:每个关卡页面上提供的描述和“提示”通常直接指向漏洞所在。
- **像攻击者一样思考**:如果您不必遵循 UI 的规则,您会如何破坏逻辑?
- *注意:本仓库故意不包含官方的逐步攻略,以鼓励动手学习。*
## 🛠️ 故障排除
- **服务器无法启动 (`EADDRINUSE`)**:另一个进程可能正在使用端口 `3000`。打开 `server.js` 更改端口,或者终止占用该端口的后台进程。
- **关卡无法运行 / 数据库错误**:确保 `server/` 目录可写,以便应用程序可以在运行时创建 `database.sqlite`。
- **Cookies/LocalStorage 未重置**:如果“重置进度”按钮失败,请使用浏览器的开发者工具(应用程序 > 存储)手动清除站点数据。
## 🙏 致谢与版权声明
- **OWASP Foundation**,提供有关 Web 安全的行业标准文档和资源。
- 灵感来源于经典的 CTF 平台,如 *DVWA*、*Juice Shop* 和 *WebGoat*。
- UI 组件和黑客美学灵感来源于经典的赛博朋克终端界面。
## 🗺️ 未来路线图
计划为未来版本的 Broken Lock 更新新的漏洞:
- **第 11 关:跨站请求伪造 (CSRF)** - 代表经过身份验证的用户利用状态更改请求。
- **第 12 关:XML 外部实体 (XXE)** - 解析恶意构造的 XML 文档以提取内部文件。
- **第 13 关:安全配置错误** - 发现暴露的管理面板、详细错误消息或默认凭据。
- **全球排行榜**:实施后端 Redis/PostgreSQL 数据库以跟踪多个用户的分数。
- **Docker 化**:提供 `docker-compose.yml` 以实现更轻松的设置和隔离执行。
## ❓ 常见问题解答
**Q: 我可以使用像 SQLMap 或 DirBuster 这样的自动化工具来攻击它吗?**
A: 可以,因为它是在您自己的机器上本地运行的,您可以测试自动化漏洞扫描器。但是,建议首先进行手动利用以获得更好的学习效果。
**Q: 为什么我的浏览器阻止了 XSS payload?**
A: 现代浏览器具有内置的 XSS 过滤器。您可能需要在应用程序内设计的特定易受攻击端点上测试您的 XSS payload,或者暂时禁用浏览器保护(不建议在日常浏览中这样做)。
**Q: 这个有 PHP 版本吗?**
A: 核心应用程序是 Node.js,但单独的分支/文件夹可能包含 XAMPP/PHP 等效项,用于特定关卡,在这些关卡中 PHP 语法使漏洞更容易演示(如 `include()` 漏洞)。请查看仓库分支。
## 🛡️ 修复与缓解措施
虽然 *Broken Lock* 侧重于攻击,但了解如何保护这些应用程序是最终目标。对于每个漏洞,该项目提供了有关如何缓解它们的学习材料:
1. **信息泄露**:切勿在生产环境中输出敏感的调试信息。限制可以查看配置文件的人员。
2. **客户端验证绕过**:始终在 **服务器端** 执行验证。客户端检查是为了用户体验,而不是安全。
3. **Cookie 篡改**:使用安全的、随机生成的 Session ID。对 Cookie 进行签名(例如 JWT)以防止篡改。
4. **SQL 注入**:使用 **预编译语句(参数化查询)**。切勿将用户输入直接连接到 SQL 字符串中。
5. **跨站脚本攻击 (XSS)**:在浏览器中渲染用户输入之前,对其进行 **净化** 和 **编码**。使用内容安全策略 (CSP)。
6. **IDOR**:实施健壮的 **访问控制检查**。仅仅因为用户知道 ID 并不意味着他们有权查看该对象。
7. **路径遍历**:针对目录遍历字符(`../`)验证并净化文件路径。更好的做法是,使用白名单标识符而不是直接文件路径。
8. **Token 篡改**:使用强大的现代算法对 Token 进行加密签名,并将 Secret Key 安全地保存在服务器上。始终对每个请求验证签名。
9. **命令注入**:尽可能避免直接调用 OS 命令。如果不可避免,请使用不会生成 shell 的内置 API,或严格净化和白名单输入。
10. **SSRF**:验证所有用户提供的 URL。对允许的目的地使用白名单,并禁止获取本地(`127.0.0.1`)、内部 IP 地址和敏感包装器(如 `file://`)。
## 📸 屏幕截图
- **主仪表板 / 终端**
``
- **SQL 注入示例关卡**
``
- **关卡完成 / Flag 捕获**
``
## 👥 行为准则
作为一个教育性仓库,我们希望所有用户和贡献者遵守道德规范。
- 专注于学习和防御性安全。
- 不要对您不拥有或未获得明确测试许可的系统使用这些技术。
- 在提出问题或协作编写代码库时请保持尊重。
## 📌 许可证
**仅限教育用途**。不用于商业用途或公开部署。
标签:Capture The Flag, CISA项目, Cookie伪造, CTF平台, GNU通用公共许可证, HTTP工具, IDOR, JWT安全, MITM代理, Node.js, OWASP Top 10, SQLite, Web安全, XSS, 信息安全培训, 反序列化漏洞, 后端开发, 后端开发, 后端开发, 命令注入, 安全教育, 实战演练, 数据可视化, 漏洞情报, 漏洞靶场, 网络安全, 蓝队分析, 越权访问, 跨站脚本攻击, 路径遍历, 防御检测, 隐私保护, 黑客模拟