一个故意包含漏洞的 Web 应用程序,用于练习 Web、API 和 LLM 的应用安全测试、安全代码审查以及在 CI/CD 管道中实施安全措施。
⚠️ 警告:此应用程序有意包含漏洞,仅应在隔离环境中用于教育目的。

本项目是一个内置多种安全漏洞的简单银行应用程序。它旨在帮助安全工程师、开发人员、实习生、QA 分析师和 DevSecOps 从业者了解:
USD、GBP、NGN、JPY、EUR、QAR、BTC、ETH)
身份验证与授权
数据安全
交易漏洞
文件操作
会话管理
客户端与服务端缺陷
虚拟卡漏洞
账单支付漏洞
商户支付 API 漏洞
AI 客户支持漏洞
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
docker-compose up -d --build
应用程序将在 http://localhost:5000 上可用。
Docker 部署包含一些运行保障机制,使应用程序无需手动 SSH 干预即可恢复:
web 和 db 使用 restart: unless-stopped,因此如果进程退出,Docker 会自动重启它们。db 提供健康检查,web 在启动前会等待 Postgres 就绪。web 以 debug=True 运行 Flask 开发服务器(有意为之——保留针对 Werkzeug 调试器的训练场景)。web 暴露 GET /healthz,以便容器可以报告应用和数据库是否实际可用。这既保持了故意易受攻击的应用程序行为不变,又使容器生命周期更具弹性。
无需启动真实容器即可验证本地运行时配置:
python3 -m unittest discover -s tests -v
这会检查 /healthz 端点的行为,并验证 start.sh 会等待数据库就绪后再启动 Flask 应用。
如果当前 Python 环境中未安装 Flask 应用依赖项,则会跳过 /healthz 路由测试,但启动脚本冒烟测试仍会运行。
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
docker build -t vuln-bank .
docker run -p 5000:5000 vuln-bank
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
# On Windows
python -m venv venv
venv\Scripts\activate
# On Linux/Mac
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# On Windows
mkdir static\uploads
# On Linux/Mac
mkdir -p static/uploads
修改 .env 文件:
运行应用程序:
# On Windows
python app.py
# On Linux/Mac
python3 app.py
出于教育目的,.env 文件被有意包含在此仓库中,以方便快速设置。在真实应用程序中,你绝不应将 .env 文件提交到版本控制。
当前环境变量:
DB_NAME=vulnerable_bank
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=db # Change to 'localhost' for local installation
DB_PORT=5432
该应用程序使用 PostgreSQL。首次运行应用程序时,数据库将自动初始化,并创建:
http://localhost:5000http://localhost:5000/api/docshttp://localhost:5000/graphql如果出现 "python not found":
py 代替 pythonuploads 文件夹的权限问题:
创建目录时权限被拒绝:
sudo mkdir -p static/uploads
sudo chown -R $USER:$USER static/uploads
端口 5000 已被占用:
# Kill process using port 5000
sudo lsof -i:5000
sudo kill <PID>
连接被拒绝:
.env 文件中的凭据身份验证失败:
确保 .env 中的 DB_PASSWORD 与你的 Postgres 用户密码一致。
或者使用以下命令重置 postgres 用户:
ALTER ROLE postgres WITH PASSWORD 'your_password';
安装错误:
如果遇到任何 PostgreSQL 错误,可通过 Chocolatey 安装并将密码设置为 postgres:
choco install postgresql --version=17.4.0 -y
# Use the generated password, or immediately reset it:
& 'C:\Program Files\PostgreSQL\17\bin\psql.exe' -U postgres -c "ALTER ROLE postgres WITH PASSWORD 'postgres';"
数据库不存在:
手动创建:
CREATE DATABASE vulnerable_bank;
或者运行:
createdb -U postgres -h localhost vulnerable_bank
/upload_profile_picture_url 并传入内部或可控的 URL
http://127.0.0.1:5000/internal/secrethttp://127.0.0.1:5000/internal/config.jsonhttp://127.0.0.1:5000/latest/meta-data/(以及 .../iam/security-credentials/ 等子路径)https://webhook.site/<your-id> 并观察传入的请求curl -s -X POST http://localhost:5000/upload_profile_picture_url \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-d '{"image_url":"http://127.0.0.1:5000/internal/secret"}'
# -> Copy the returned file_path and GET http://localhost:5000/<file_path>
/graphql 运行模式自省(schema introspection)accountNumber)测试 SQL 注入/api/virtual-cards/<card_id>/fund 中的 exchange_rate,在 USD 转换期间超额充值卡片公共商户 API 允许故意易受攻击的演示应用(如电商实验室)接受来自 Vulnbank 虚拟卡的付款。
以普通 Vulnbank 用户身份注册或登录。
创建一张虚拟卡,并从用户的主余额充值。
通过 http://localhost:5000/merchant/register 或 API 注册商户集成:
curl -s -X POST http://localhost:5000/api/v1/merchants/register \
-H "Content-Type: application/json" \
-d '{"name":"Demo Ecommerce","email":"[email protected]","password":"password123"}'
使用商户 API 密钥从电商应用向用户的 Vulnbank 卡发起扣款:
curl -s -X POST http://localhost:5000/api/v1/payments/charge \
-H "X-Merchant-Api-Key: <MERCHANT_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"amount": 49.99,
"currency": "USD",
"card_number": "4111111111111111",
"cvv": "123",
"expiry_date": "12/28",
"merchant_order_id": "ORDER-1001",
"description": "Demo ecommerce checkout"
}'
在 http://localhost:5000/merchant/dashboard 查看商户仪表板,或使用 API 密钥或弱商户 JWT 获取支付详情:
curl -s http://localhost:5000/api/v1/payments/<payment_id> \
-H "Authorization: Bearer <MERCHANT_JWT>"
/api/v1/payments/merchant_id/<merchant_id> 请求其他商户的支付历史/api/v1/payments 与 /api/v1/payments/merchant_id/<merchant_id>访问 AI 聊天: 在仪表板右下角寻找蓝色聊天气泡
注意: 聊天组件有两种模式:
AI 技术: 使用 DeepSeek API 呈现真实 LLM 漏洞,若未配置 API 密钥则回退到模拟模式。
提示注入攻击
通过 AI 进行信息泄露
通过 AI 绕过授权
AI 系统利用
上下文注入与模式测试
现实世界中的提示注入技术
欢迎贡献!你可以:
这里有一篇关于此靶场和我的发现的详细演练:
👇 阅读 DghostNinja 的博客
(https://dghostninja.github.io/posts/Vulnerable-Bank-API/)
👇 CyberPreacher 的详细演练
(https://medium.com/@cyberpreacher_/hacking-vulnerable-bank-api-extensive-d2a0d3bb209e)
仅限道德黑客行为。遵守授权范围。咖啡已喝。☕
此应用程序包含出于教育目的而故意设置的安全漏洞。请勿:
本项目采用 MIT 许可证授权 - 详情请参阅 LICENSE 文件。
用 ❤️ 为安全教育而制作
GraphQL 漏洞
/graphql 继承了基于 JWT 的弱身份验证