易受攻击的API (基于OpenAPI 3)

VAmPI 是一个用 Flask 构建的易受攻击的 API,它包含了 OWASP API 十大漏洞中的漏洞。创建它的初衷是为了有一个易受攻击的 API,用于评估检测 API 安全问题的工具的效率。它包含一个开关,可以在测试时启用或禁用漏洞。这有助于更好地覆盖误报/漏报的情况。VAmPI 也可用于学习或教学目的。你可以在 erev0s.com 找到有关这些漏洞的更多详细信息。
VAmPI 的操作流程如下:未注册用户可以看到 API 中包含的虚拟用户的基本信息。用户可以注册,然后登录,使用登录时收到的令牌发布书籍。发布的书籍接受的数据包括书名和该书的一个秘密。每本书对每个用户都是唯一的,只有书的拥有者才应被允许查看秘密。
下表显示了包含的操作的简要说明:
| 操作 | 路径 | 详情 |
|---|---|---|
| GET | /createdb | 创建并用虚拟数据填充数据库 |
| GET | / | VAmPI 首页 |
| GET | /me | 显示当前登录的用户 |
| GET | /users/v1 | 显示所有用户及其基本信息 |
| GET | /users/v1/_debug | 显示所有用户的全部详细信息 |
| POST | /users/v1/register | 注册新用户 |
| POST | /users/v1/login | 登录 VAmPI |
| GET | /users/v1/{username} | 根据用户名显示用户 |
| DELETE | /users/v1/{username} | 根据用户名删除用户(仅管理员) |
| PUT | /users/v1/{username}/email | 更新单个用户的电子邮件 |
| PUT | /users/v1/{username}/password | 更新用户密码 |
| GET | /books/v1 | 检索所有书籍 |
| POST | /books/v1 | 添加新书籍 |
| GET | /books/v1/{book} | 根据书名检索书籍及其秘密 |
更多详情,你可以运行 VAmPI 并访问 http://127.0.0.1:5000/ui/,或者使用像 swagger editor 这样的服务,提供位于 openapi_specs 目录中的 OpenAPI 规范。
这是一个 Flask 应用程序,因此要运行它,你可以安装所有依赖,然后运行 app.py。
要安装所有依赖,只需运行 pip3 install -r requirements.txt,然后运行 python3 app.py。
或者,如果你愿意,也可以通过 Docker 或 docker compose 运行它。
docker run -p 5000:5000 erev0s/vampi:latest
[注意:如果你在较新版本的 MacOS 上运行 Docker,请使用 -p 5001:5000 以避免与 AirPlay 接收器服务冲突。或者,你也可以在“系统偏好设置”->“共享”设置中禁用 AirPlay 接收器服务。]
docker-compose 包含两个实例,一个在端口 5001 上运行安全配置,另一个在端口 5002 上运行不安全配置:
docker-compose up -d
访问运行 API 所在路径下的 /ui,将出现一个 Swagger UI 以帮助你快速上手!
http://127.0.0.1:5000/ui/
如果你想更改登录后创建的令牌的超时时间,或者想将环境设置为不易受攻击,则可以根据运行应用程序的方式使用几种方法。
python3 app.py 正常运行,则需要编辑 app.py 中定义的 alive 和 vuln 变量。alive 变量以秒为单位,因此如果你设置为 100,则令牌在 100 秒后过期。vuln 变量类似于布尔值,如果你将其设置为 1,则应用程序易受攻击;如果设置为 0,则应用程序不易受攻击。docker run 命令,或者编辑 Dockerfile 并重新构建。
Docker 运行示例:docker run -d -e vulnerable=0 -e tokentimetolive=300 -p 5000:5000 erev0s/vampi:latest
vulnerable=1,然后轻松地在两者之间切换。在 Dockerfile 中,你会看到两个环境变量被设置: 和 。在运行 docker build 命令之前,请随意更改它们。
/createdb 发出请求,以填充数据库。ENV vulnerable=1ENV tokentimetolive=60