j0rd1s3rr4n0/FinSecure_Bank
GitHub: j0rd1s3rr4n0/FinSecure_Bank
一个用于教学和演示 SSRF 漏洞的交互式实验环境,模拟存在安全缺陷的银行应用,帮助学习者理解攻击路径与防御策略。
Stars: 3 | Forks: 2
SSRF 演示实验室
用于理解和利用 Server-Side Request Forgery (SSRF) 漏洞的交互式实验室
模拟一个内部架构存在严重缺陷的现代银行应用程序。
⚙️ 功能 • 📦 环境要求 • 🚀 运行 • 🎯 SSRF 攻击 • 📡 Endpoints • 🛡️ 缓解措施 • 🗂️ 项目结构 • 📄 许可证
## ⚙️ 功能 - ✅ 通过**有效 DNI** 注册用户(使用真实算法计算字母)。 - ✅ 注册期间强制上传 PDF(验证文件不能为空)。 - ✅ 系统启动时生成** 250,000 名具有随机余额的用户**。 - ✅ 用户 Dashboard,包含转账和资金移动表单。 - ✅ 灵感来源于真实金融科技的美学设计,通过 CDN 使用 **TailwindCSS**。 - ✅ 带有 SVG、用户评价、优势和号召性用语的自定义封面。 - ✅ 包含有用链接的页脚和具有视觉吸引力的页眉。 - ✅ 采用欧洲格式化的余额:`1.234,56 €`。 ## 📦 环境要求 - Python 3.7 或更高版本 - 使用以下命令安装依赖项: ``` pip install -r requirements.txt ``` ## 🚀 运行 使用以下命令启动完整环境: ``` python run.py ``` 这将启动: | 服务 | 端口 | 描述 | |-------------------|-----------------|------------------------------------| | `app_internal.py` | `127.0.0.1:443` | 内部银行后端 | | `app_public.py` | `0.0.0.0:80` | 攻击者可访问的 Web 界面 | 你也可以单独运行它们: ``` python app_internal.py python app_public.py ``` 启动后,访问 👉 `http://localhost` ## 🎯 SSRF 攻击 1. 使用有效的 DNI(例如 `12345678Z`)注册并上传任意 PDF。 2. 访问 *dashboard* 并找到 **"Verificar URL externa"** 部分。 3. 输入内部 URL,例如: http://127.0.0.1:443/transfer?from=ES111...&to=ES222...&amount=500 4. 服务器将在未进行验证的情况下发起内部请求,并从目标账户转出资金。 5. 返回 *dashboard* 查看你暴增的余额 🤑。 ## 📡 Endpoints ### 🌐 app_public.py (端口 80) | 路径 | 描述 | |--------------------|-----------------------------------------------------------------| | `/` | 金融科技风格的信息封面 | | `/register` | 带有 DNI 和 PDF 验证的注册 | | `/login` | 使用 DNI 和密码登录 | | `/dashboard` | 账户视图 + 转账表单 | | `/verify_external` | **SSRF 漏洞**: 在无验证的情况下执行 `requests.get(url)` | ### 🔒 app_internal.py (端口 443) | 路径 | 描述 | |-----------------|-----------------------------------------------------------------| | `/users` | 显示所有用户及其 IBAN | | `/funds` | 返回各用户的余额 | | `/transfer` | 通过 GET 请求在 IBAN 之间转账 | | `/transfer_all` | 将所有资金转入指定的 IBAN(仅用于测试) | ## 🛡️ 缓解措施 该项目在设计上存在漏洞。然而,在实际的应用程序中: * ✅ 在使用前**验证 URL**(`.startswith('https://trusted.com')`) * ✅ 避免服务器向任意外部地址发起请求 * ✅ 使用白名单或带有出口规则的内部代理 * ✅ 尽可能只要条件允许,在客户端执行这些检查 * ✅ 实施网络层防火墙以阻止环回(loopback)流量 ## 🗂️ 项目结构 ``` ssrf-demo/ ├── app_internal.py # API interna simulada ├── app_public.py # Interfaz vulnerable expuesta ├── run.py # Inicia ambos servidores ├── bank.db # Base de datos SQLite ├── requirements.txt ├── static/ # Estilos, imágenes, etc. ├── templates/ # HTML con Jinja2 ├── assets/ │ └── logo.png # Logo del proyecto ├── exploit/ │ └── exploit.py # Script de explotación (ver README dentro) └── README.md ``` ## 🧪 自动化利用 脚本 [`exploit/exploit.py`](exploit/exploit.py) 可以自动化 SSRF 攻击。请查阅其 [专属 README](exploit/README.md) 了解更多详细信息和逐步执行说明。 ## 📄 许可证 本项目仅供**教育**用途。它并非为生产环境设计,也不得用于恶意目的。[MIT 许可证](LICENSE.MD)SSRF 演示实验室 — 学习。破坏。防御。
标签:CISA项目, OPA, Python, Web安全, 安全, 无后门, 漏洞复现, 蓝队分析, 超时处理, 逆向工具, 金融, 靶场