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`(锁定) ### 结果仪表板 - 模拟期间实时动画进度条 - 带有状态指示器的每次尝试日志 - 攻击摘要卡:总数 / 已入侵 / 失败 / 锁定 / 成功率 ## 🖥️ 画廊 ### 主屏幕 ![主屏幕](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5d8a544b34122145.png) ### 凭据输入 ![凭据输入](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/00f4ab4a26122147.png) ### 攻击模拟结果 ![攻击模拟结果](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/00baa729da122151.png) ## 🚀 安装与设置 ### 前置条件 - 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安全, 凭证填充, 后端开发, 安全演示, 密码安全, 攻击模拟, 教育工具, 数据可视化, 无后门, 暴力破解, 概念验证, 沙箱环境, 漏洞分析, 网络安全, 蓝队分析, 账户锁定, 路径探测, 逆向工具, 隐私保护, 驱动签名利用