Krisha-Antala/Advanced-CTF-Platform

GitHub: Krisha-Antala/Advanced-CTF-Platform

一个基于Flask和SQLite构建的轻量级CTF学习平台,提供交互式网络安全挑战和实时竞赛功能,帮助初学者在安全可控的环境中实践攻防技能。

Stars: 0 | Forks: 0

# 🚩 CTF 平台 一个功能齐全的 **夺旗赛 (CTF) 学习平台**,提供交互式网络安全挑战,基于 Flask 构建,并采用了炫酷的 **赛博朋克/黑客美学** 风格设计。 ![Python](https://img.shields.io/badge/Python-3.8+-blue) ![Flask](https://img.shields.io/badge/Flask-2.x-green) ![SQLite](https://img.shields.io/badge/Database-SQLite-yellow) ![License](https://img.shields.io/badge/License-MIT-purple) ## 📋 目录 1. [概述](#overview) 2. [功能](#features) 3. [截图](#screenshots) 4. [安装](#installation) 5. [使用](#usage) 6. [挑战](#challenges) 7. [安全功能](#security-features) 8. [主题与 UI](#theme--ui) 9. [数据库结构](#database-schema) 10. [API 路由](#api-routes) 11. [项目结构](#project-structure) 12. [配置](#configuration) 13. [贡献](#contributing) 14. [许可证](#license) ## 🔍 概述 本 CTF 平台旨在为在安全、可控的环境中**学习和实践网络安全概念**而设计。它模拟了包括以下在内的真实漏洞: - SQL 注入 - 跨站脚本攻击 (XSS) - 缓冲区溢出 - 密码学 每个挑战都具有交互性并提供逐步指导,非常适合初学者,同时对有经验的从业者也同样具有吸引力。 ## ✨ 功能 ### 核心功能 | 功能 | 描述 | |---------|-------------| | **用户注册** | 使用用户名和密码创建账户 | | **安全身份验证** | 带有密码哈希的基于会话的登录 | | **挑战控制面板** | 浏览所有可用的挑战及其标题、描述和分值 | | **提交 Flag** | 提交 flag 以解决挑战并获得积分 | | **实时记分板** | 所有用户按分数实时排名 | | **练习模式** | 重新解决已完成的挑战以进行练习 | ### 交互式挑战 | 挑战 | 类型 | 分值 | 描述 | |-----------|------|--------|-------------| | 基础注入 | SQL 注入 | 100 | 使用 SQL 注入绕过伪造的管理员登录面板 | | XSS 攻击 | 跨站脚本攻击 | 150 | 将恶意脚本注入到易受攻击的评论区 | | 缓冲区溢出 | 内存漏洞利用 | 200 | 溢出 16 字节缓冲区以破坏程序流程 | | 密码学挑战 | 密码学 | 100 | 解密动态生成的凯撒密码消息 | ### 防作弊与机器人防护 - 🤖 **蜜罐字段**:用于检测自动机器人的隐藏表单字段 - ⏱️ **解题时间跟踪**:记录每个挑战花费的时间 - 🔄 **尝试限制**:在触发 CAPTCHA 前可配置的最大尝试次数 - 🧮 **CAPTCHA 系统**:当检测到可疑活动时进行简单的数学验证 - 🎯 **动态 Flag**:密码学挑战为每个会话生成唯一的 flag ## 🖥️ 截图 该平台采用了极具视觉冲击力的**赛博朋克/科幻霓虹主题**,包含: - 深蓝/黑色背景 (#0b1021) - 电光青色主色调 (#00ffcc) - 电光蓝色辅助色 (#0077ff) - 用于错误提示的霓虹红/粉色 (#ff3366) - 动态粒子背景 - 标题上的故障文字特效 ## 📦 安装 ### 前置条件 - Python 3.8 或更高版本 - pip (Python 包管理器) ### 逐步设置 1. **克隆或下载仓库** git clone cd "CTF platform" 2. **创建虚拟环境(推荐)** python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate 3. **安装依赖** pip install -r requirements.txt 4. **初始化数据库** python db_init.py 这将创建 `Krisha.db`,包含: - Users 表(用于身份验证) - Challenges 表(预装了 4 个挑战) - Submissions 表(跟踪已解决的挑战) 5. **运行应用程序** python app.py 6. **访问平台** 打开浏览器并访问: http://localhost:5000 ## 🎮 使用说明 ### 新手入门 1. **注册**:在注册页面创建一个新账户 2. **登录**:访问你的控制面板 3. **选择挑战**:从控制面板点击任意挑战 4. **解决它**:根据每种挑战类型的屏幕说明进行操作 5. **提交 Flag**:以 `CTF{...}` 格式输入 flag 6. **查看记分板**:查看你在所有用户中的排名 ### 用户流程 ``` Login/Register → Dashboard → Select Challenge → Solve → Submit Flag → Earn Points → Scoreboard ``` ## 🔓 挑战 ### 挑战 1:基础注入 (SQL 注入) **目标**:绕过管理员登录面板 **工作原理**: - 显示一个伪造的“管理员登录门户” - 系统模拟一个易受攻击的 SQL 查询 - 用户必须构造能绕过身份验证的输入 **解决方案**: 在用户名或密码字段中输入以下内容之一: ``` ' OR '1'='1 " OR "1"="1 admin'-- ``` **你将学到**: - SQL 注入如何操纵数据库查询 - 为什么输入验证和参数化查询至关重要 ### 挑战 2:XSS 攻击 (跨站脚本攻击) **目标**:在评论区注入脚本 **工作原理**: - 显示一个评论表单 - 评论在渲染时未经过清理(使用了 Jinja 的 `| safe` 过滤器) - 注入的脚本将在浏览器中执行 **解决方案**: 发布包含以下内容的评论: ``` ``` **你将学到**: - XSS 攻击如何窃取用户数据或劫持会话 - 为什么输出编码和内容安全策略 (CSP) 很重要 ### 挑战 3:缓冲区溢出 **目标**:溢出 16 字节缓冲区以获取控制权 **工作原理**: - 存在一个 16 字节的模拟缓冲区 - 超过 16 个字符的输入会“溢出”到相邻内存中 - 介于 17-32 个字符之间的输入会覆盖“返回指针” - 超过 32 个字符的输入会导致“段错误” **解决方案**: 输入任何长度超过 16 个字符但少于 33 个字符的字符串: ``` AAAAAAAAAAAAAAAAAAAAA (21 A's) ``` **你将学到**: - 缓冲区溢出如何破坏内存 - 为什么边界检查和安全的字符串函数必不可少 ### 挑战 4:密码学挑战 (凯撒密码) **目标**:解密截获的消息 **工作原理**: - 每次会话生成一个随机的 8 字符明文 - 使用偏移量为 +3 的凯撒密码进行加密 - 显示密文;你必须对其进行解密 **解决方案**: 将每个字母向后移 3 个位置: - `D` → `A`,`E` → `B`,`F` → `C`,等等。 - 数字保持不变 - 以 `CTF{PLAINTEXT}` 格式提交 **示例**: ``` Ciphertext: GHIJKL9X Plaintext: DEFGHI9U Flag: CTF{DEFGHI9U} ``` **你将学到**: - 基本的密码分析技术 - 弱加密是如何被破解的 ## 🛡️ 安全功能 ### 蜜罐检测 ``` ``` - 对人类不可见的隐藏字段 - 机器人会自动填充它 - 服务器拒绝填充了此字段的提交 ### 解题时间跟踪 ``` if f"start_{cid}" not in session: session[f"start_{cid}"] = time.time() ``` - 计时器在挑战页面加载时启动 - 过快提交 flag 会触发警报 ### CAPTCHA 系统 ``` ⚠️ Security Check: What is 3 + 4? ``` - 在检测到可疑活动时触发 - 简单的数学问题以验证是否为真人操作 ### 基于会话的身份验证 - 带有密钥的 Flask 会话 - 密码哈希(如果在注册中实现) - 用户 ID 存储在会话中,而不是 cookies 中 ## 🎨 主题与 UI ### 调色板 | 变量 | 颜色 | 用途 | |----------|-------|-------| | `--color-bg` | #0b1021 | 页面背景 | | `--color-bg-alt` | rgba(16,23,41,0.7) | 卡片背景 | | `--color-primary` | #00ffcc | 青色强调,成功状态 | | `--color-secondary` | #0077ff | 蓝色强调 | | `--color-accent` | #ffffff | 白色文本 | | `--color-text-muted` | #a0aab5 | 灰色辅助文本 | | `--color-error` | #ff3366 | 红色错误,警告 | ### 动画 #### 粒子背景 (`particles.js`) - 基于 Canvas 的粒子系统 - 粒子靠近时通过线条连接 - 鼠标交互可推开粒子 - 响应窗口大小调整 #### 故障文字特效 (CSS) - 带有偏移量的三层文本 - 用于扫描效果的动画 `clip-rect` - 用于扭曲效果的倾斜动画 - 使用 `::before` 和 `::after` 伪元素 ### 组件 - **玻璃态卡片**:使用 `backdrop-filter: blur` 实现的磨砂玻璃效果 - **渐变按钮**:从青色到蓝色的渐变并带有发光效果 - **输入字段**:深色背景,获得焦点时带有青色光晕 - **响应式布局**:基于 Flexbox,适配移动端 ## 🗄️ 数据库结构 ### Users 表 ``` CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, score INTEGER DEFAULT 0 ); ``` ### Challenges 表 ``` CREATE TABLE challenges ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, description TEXT, flag TEXT NOT NULL, points INTEGER DEFAULT 100 ); ``` ### Submissions 表 ``` CREATE TABLE submissions ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, challenge_id INTEGER, correct INTEGER, solve_time REAL, attempts INTEGER, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` ### 预装挑战 | ID | 标题 | 分值 | Flag | |----|-------|--------|------| | 1 | 基础注入 | 100 | CTF{sql_injection_master} | | 2 | XSS 攻击 | 150 | CTF{xss_hunter} | | 3 | 缓冲区溢出 | 200 | CTF{overflow_ninja} | | 4 | 密码学挑战 | 100 | (每次会话动态生成) | ## 🔗 API 路由 | 路由 | 方法 | 描述 | 需要身份验证 | |-------|--------|-------------|---------------| | `/` | GET, POST | 登录页面 | 否 | | `/register` | GET, POST | 注册页面 | 否 | | `/dashboard` | GET | 挑战列表 | 是 | | `/challenge/` | GET, POST | 单个挑战 | 是 | | `/scoreboard` | GET | 用户排名 | 是 | | `/logout` | GET | 结束会话 | 是 | ## 📁 项目结构 ``` CTF platform/ │ ├── app.py # Main Flask application │ ├── Routes (login, register, dashboard, challenge, scoreboard, logout) │ ├── Database helpers │ ├── Challenge logic (SQLi, XSS, Buffer, Crypto) │ └── Context processor (site_name, year) │ ├── db_init.py # Database initialization │ ├── Creates tables (users, challenges, submissions) │ └── Seeds sample challenges │ ├── Krisha.db # SQLite database file │ ├── requirements.txt # Python dependencies │ ├── README.md # This documentation │ ├── static/ │ ├── style.css # Complete CSS theme │ │ ├── Color variables │ │ ├── Reset & base styles │ │ ├── Layout utilities │ │ ├── Glitch header animations │ │ ├── Glass card component │ │ ├── Form & button styles │ │ └── Utility classes │ │ │ └── particles.js # Interactive background │ ├── Particle class │ ├── Mouse tracking │ ├── Connection lines │ └── Animation loop │ └── templates/ ├── base.html # Base layout with particle canvas ├── login.html # Login form ├── register.html # Registration form ├── dashboard.html # Challenge grid ├── challenge.html # Dynamic challenge UI │ ├── SQLi form │ ├── XSS comment section │ ├── Buffer input │ ├── Crypto display │ └── Flag submission └── scoreboard.html # Rankings table ``` ## ⚙️ 配置 ### 环境变量(可选) ``` app.secret_key = "your-secret-key" # Change in production! ``` ### 自定义项 | 文件 | 自定义内容 | |------|-------------------| | `style.css:root` | 调色板变量 | | `app.py:inject_globals` | 站点名称,其他全局变量 | | `db_init.py:challenges` | 添加/修改挑战内容 | | `particles.js` | 粒子数量、颜色、行为 | ## 🤝 贡献 1. Fork 本仓库 2. 创建一个功能分支 (`git checkout -b feature/new-challenge`) 3. 提交更改 (`git commit -am 'Add new challenge'`) 4. 推送到分支 (`git push origin feature/new-challenge`) 5. 发起一个 Pull Request ### 贡献想法 - 添加更多挑战类型 (CSRF, SSRF 等) - 实现真正的密码哈希 - 添加挑战分类/标签 - 创建用于管理挑战的管理面板 - 添加带有扣分机制的提示系统 ## 📄 许可证 本项目基于 **MIT 许可证** 授权 - 详情请参见 [LICENSE](LICENSE) 文件。 ## 👨‍💻 作者 倾注 ❤️ 构建,旨在学习网络安全基础知识。 *祝你 Hack 愉快! 🎯*
标签:CTF平台, Flask, meg, MIT许可, OPA, Python, Session管理, SQLite, T1068, Web安全, Web报告查看器, XSS, 会话管理, 信息安全, 反机器人, 后端开发, 学习平台, 安全教育, 实时计分, 密码学, 开源, 手动系统调用, 数据可视化, 数据库设计, 无后门, 漏洞情报, 漏洞演练, 用户认证, 缓冲区溢出, 网络安全, 蓝队分析, 调试辅助, 赛博朋克, 跨站脚本攻击, 逆向工具, 隐私保护, 靶场, 黑客