jejo205713/credential-stuffing-simulator
GitHub: jejo205713/credential-stuffing-simulator
一个基于Flask的凭据填充攻击教育模拟器,在沙盒环境中演示攻击机制与防御控制效果。
Stars: 1 | Forks: 0
# 🛡️ 凭据填充模拟器
## ⚠️ 免责声明
**本工具仅用于教育和学术目的。**
它完全在硬编码的内存模拟数据库上运行,不连接任何真实系统、网络或服务。未经明确书面授权,请勿将此工具或其概念用于任何真实系统。作者不对滥用行为承担责任。
## 👨💻 作者
**Jejo J**
网络安全工程学士
哥印拜陀 Sri Krishna College of Technology
*大学作业 —— 网络安全概念与工具*
## 📌 项目简介
凭据填充是当今最普遍的攻击载体之一。攻击者从数据泄露转储中获取用户名:密码对,并跨其他服务自动测试它们,利用许多用户重复使用密码的事实。
该模拟器在**安全、沙盒化的环境**中复制该攻击循环,以便学生能够:
- 了解凭据填充在机制上如何运作
- 看到弱密码/密码重复使用的后果
- 观察防御控制措施(速率限制、账户锁定)的实际效果
- 实时可视化攻击结果
## 🛠️ 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | Python 3 + Flask |
| 前端 | HTML5, CSS3, 原生 JavaScript |
| 数据存储 | 内存(无数据库) |
| 字体 | IBM Plex Mono + IBM Plex Sans |
## 📁 项目结构
```
credential-stuffing-simulator/
├── app.py ← Flask backend (routes, auth logic, lockout)
├── requirements.txt ← Python dependencies
├── setup.sh ← Auto setup script (Linux/macOS)
├── setup.bat ← Auto setup script (Windows)
├── run.sh ← Run script (Linux/macOS)
├── run.bat ← Run script (Windows)
├── templates/
│ └── index.html ← Main UI page
└── static/
├── style.css ← Grayscale minimal design
└── script.js ← Simulation logic, progress bar, results
```
## 🔐 功能特性
### 模拟用户数据库(内存中)
该应用包含 8 个硬编码的测试账户:
| 用户名 | 密码 |
|---|---|
| user1 | 123456 |
| admin | admin123 |
| jejo | securepass |
| alice | password1 |
| bob | qwerty99 |
| charlie | letmein |
| diana | sunshine |
| root | toor |
### 模拟安全控制
| 控制措施 | 实现方式 |
|---|---|
| **速率限制** | 每秒最多 5 次尝试(强制延迟 200ms) |
| **账户锁定** | 连续失败 3 次后锁定账户 |
| **锁定账户持久性** | 如果账户被锁定,正确密码也会被拒绝 |
| **重置机制** | 通过 `/reset` 端点完全重置状态 |
### 攻击模拟
- 接受换行符分隔的 `username:password` 对列表
- 按顺序遍历每个凭据,并强制执行延迟
- 与模拟用户数据库进行匹配
- 返回每次尝试的结果:`success`(成功)、`failed`(失败)或 `locked`(锁定)
### 结果仪表板
- 模拟期间实时动画进度条
- 带有状态指示器的每次尝试日志
- 攻击摘要卡:总数 / 已入侵 / 失败 / 锁定 / 成功率
## 🖥️ 画廊
### 主屏幕

### 凭据输入

### 攻击模拟结果

## 🚀 安装与设置
### 前置条件
- Python 3.8 或更高版本
- pip(随 Python 附带)
- 终端(bash / zsh / cmd / PowerShell)
### Linux / macOS
**步骤 1 —— 克隆仓库**
```
git clone https://github.com/YOUR_USERNAME/credential-stuffing-simulator.git
cd credential-stuffing-simulator
```
**步骤 2 —— 运行设置脚本**
```
bash setup.sh
```
这将:
- 检查您的 Python 版本
- 创建虚拟环境(`venv/`)
- 从 `requirements.txt` 安装所有依赖项
**步骤 3 —— 启动应用**
```
bash run.sh
```
**步骤 4 —— 在浏览器中打开**
```
http://127.0.0.1:5000
```
### Windows
**步骤 1 —— 克隆仓库**
```
git clone https://github.com/YOUR_USERNAME/credential-stuffing-simulator.git
cd credential-stuffing-simulator
```
**步骤 2 —— 运行设置脚本**
```
setup.bat
```
**步骤 3 —— 启动应用**
```
run.bat
```
**步骤 4 —— 在浏览器中打开**
```
http://127.0.0.1:5000
```
### 手动设置(替代方案)
```
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python app.py
```
## 🔁 API 参考
### `POST /simulate`
运行凭据填充模拟。
**请求体**
```
{
"credentials": "user1:123456\nadmin:wrongpass\njejo:securepass"
}
```
**响应**
```
{
"results": [
{ "username": "user1", "password": "123456", "status": "success", "message": "Login Successful — COMPROMISED" },
{ "username": "admin", "password": "wrongpass", "status": "failed", "message": "Invalid Credentials" },
{ "username": "jejo", "password": "securepass", "status": "success", "message": "Login Successful — COMPROMISED" }
],
"summary": {
"total": 3,
"successful": 2,
"failed": 1,
"locked": 0,
"success_rate": 66.67
}
}
```
**状态值**
| 状态 | 含义 |
|---|---|
| `success` | 凭据匹配 —— 账户已被入侵 |
| `failed` | 凭据不匹配 |
| `locked` | 由于失败次数过多,账户已被锁定 |
### `POST /reset`
重置所有账户锁定状态。
**响应**
```
{ "message": "All account states reset." }
```
## 🧪 示例凭据列表(用于测试)
将此内容粘贴到模拟器的文本区域以查看所有三种结果:
```
user1:wrongpass
admin:admin123
jejo:badpass
alice:password1
bob:badpass
bob:badpass
bob:qwerty99
charlie:letmein
diana:wrongpass
root:toor
unknown:nopass
```
预期结果:
- `admin`, `alice`, `charlie`, `root` → **已被入侵**
- `bob` → **已锁定**(3 次失败尝试后,正确密码被拒绝)
- 其他 → **失败**
## 🎨 UI 设计
界面遵循严格的**灰度 / 粗犷主义等宽字体**美学:
- 仅白色背景
- 仅黑色文本和边框
- 所有数据和代码元素使用 IBM Plex Mono
- 正文文本使用 IBM Plex Sans
- 无颜色,无渐变
- 带有细黑边框的整洁卡片式布局
## 🧠 演示的关键网络安全概念
| 概念 | 演示方式 |
|---|---|
| 凭据填充 | 核心模拟循环 |
| 密码重复使用风险 | 将泄露的凭据与模拟数据库匹配 |
| 速率限制 | 服务端强制 200ms 延迟 |
| 账户锁定 | 3 次尝试锁定策略 |
| 纵深防御 | 速率限制与锁定结合使用 |
| 攻击可见性 | 带有状态的每次尝试日志记录 |
## 📚 参考资料
- [OWASP — 凭据填充](https://owasp.org/www-community/attacks/Credential_stuffing)
- [OWASP — 测试账户锁定](https://owasp.org/www-project-web-security-testing-guide/)
- [NIST SP 800-63B — 数字身份指南](https://pages.nist.gov/800-63-3/sp800-63b.html)
- [Have I Been Pwned — 关于凭据填充](https://haveibeenpwned.com/FAQs)
## 📄 许可证
本项目作为学术作业提交,仅用于教育目的。
© 2025 Jejo J — Sri Krishna College of Technology
标签:B.E.项目, Flask, PoC, Python, Web安全, 凭证填充, 后端开发, 安全演示, 密码安全, 攻击模拟, 教育工具, 数据可视化, 无后门, 暴力破解, 概念验证, 沙箱环境, 漏洞分析, 网络安全, 蓝队分析, 账户锁定, 路径探测, 逆向工具, 隐私保护, 驱动签名利用