Krisha-Antala/Advanced-CTF-Platform
GitHub: Krisha-Antala/Advanced-CTF-Platform
一个基于Flask和SQLite构建的轻量级CTF学习平台,提供交互式网络安全挑战和实时竞赛功能,帮助初学者在安全可控的环境中实践攻防技能。
Stars: 0 | Forks: 0
# 🚩 CTF 平台
一个功能齐全的 **夺旗赛 (CTF) 学习平台**,提供交互式网络安全挑战,基于 Flask 构建,并采用了炫酷的 **赛博朋克/黑客美学** 风格设计。




## 📋 目录
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, 会话管理, 信息安全, 反机器人, 后端开发, 学习平台, 安全教育, 实时计分, 密码学, 开源, 手动系统调用, 数据可视化, 数据库设计, 无后门, 漏洞情报, 漏洞演练, 用户认证, 缓冲区溢出, 网络安全, 蓝队分析, 调试辅助, 赛博朋克, 跨站脚本攻击, 逆向工具, 隐私保护, 靶场, 黑客