参考文章
靶场安装
#安装docker的前提下
git clone https://github.com/roottusk/vapi.git
cd vapi/
修改.yml文件
vAPI默认绑定主机80(HTTP)、3306(MySQL)、8001(PHPMyAdmin)端口
docker-compose up -d
Postman配置
vAPI 编写了专门的测试 Collection
https://raw.githubusercontent.com/roottusk/vapi/master/postman/vAPI.postman_collection.json
设置Host
选中{{host}},更改为vAPI靶场IP,选中,设置为变量->设置为一个新的变量
最终效果
通关过程
API1
简单的 API 权限校验缺失导致的越权漏洞
接口
Create User
创建用户–>传入用户名、姓名、课程、密码
返回一个id
Get User
获取用户信息–>将返回的id设置为api1_id ,需要在 Headers 中设置 Authorization-Token,格式为base64_encode(username:password)。
Update User
修改用户信息–>同样需要在 Headers 中设置 Authorization-Token,然后设置修改内容
修改课程名称
漏洞利用点
在获取了对象数据时,只要传入任一有效的 Authorization-Token,即可获取所有用户信息
查看源代码
$validuser = API1Users::where('username',$user->getUsername())->where('password',$user->getPassword())->count();
#只判断用户名和密码是否匹配,没有判断用户和id是否匹配
可以利用这个漏洞,访问Update User任意修改用户信息
漏洞修复
对数据库中存储的用户id进行校验
API2
Broken Authentication
身份验证验证手段缺失导致的暴力破解。
接口
User Login
使用email和password登陆
根据文档提示
Get Details
获取用户信息
漏洞利用点
使用BP进行暴力破解
拷贝到BP的Intruder模块
设置payload1
设置payload2
取消两个 payload 的 URL-Encode(两个都要取消,不取消的话是爆破不出来的)
使用爆破到的数据进行登陆,拿到token
放入 Authorization-Token 中使用获取用户信息接口拿到 flag
漏洞修复
- 添加登陆验证码
- 限制账号、IP登陆次数
API3
过度信息暴露,在开发过程中,经验不足的程序员可能会将数据查询结果不做任何过滤,或包含在 JSON 的 Data 中返回给前端处理,或包含在 JSON 的 Data 中进行返回,导致敏感信息泄漏。
接口
Create User
漏洞利用点
对Resources/apk进行抓包
Flag 就在返回结果中。
抓包失败–>挖个坑–>待补充
漏洞修复
不懂但大为震撼
API4
缺少对资源和速率的限制。
接口
Mobile Login
手机登录,通过手机号登录,输入手机号,提示已将4位数的OTP发送到手机。
OTP:One Time Password,又称一次性口令、一次性密码、动态密码、单次有效密码。
Verify OTP
对传入的4位数字的OTP进行验证
Get Details
验证通过,获取用户信息
漏洞利用点
后台没有对访问速率与错误次数进行限制,可暴力破解4位OTP
将代码复制到BP的Intruder模块
设置Payload
漏洞修复
-
限制OTP错误次数;
-
增强OTP复杂度。
API5
功能权限认证缺陷。
接口
Create User
创建用户
Get User
获取用户信息
漏洞利用点
分离出的管理员用来查看所有用户数据的 /users 接口没有进行管理员权限校验,只需要创建普通用户,然后使用普通用户即可查看所有用户数据。
漏洞修复
完善权限校验机制
API6
过度数据赋值
接口
Create User
创建用户
Get User
获取用户信息
漏洞利用点
创建新用户,直接传入credit字段为100
使用新用户获取个人信息
漏洞修复
不懂但大为震撼
API7
没有配置CORS导致的CSRF漏洞
接口
Create User
创建用户
User Login
用户登录
Get Key
获取key->获取用户信息
User Logout
漏洞利用点
登录后,直接在 Get Key 接口添加任意 Origin 即可拿到 flag。
漏洞修复
- 配置 CORS
- 添加 CSRF_TOKEN
API8
注入
接口
User Login
没有用户创建了,直接用户登录
Get Secret
登陆后获取用户信息
漏洞利用点
尝试使用SQL注入万能密码登陆
获取key
拿到flag
漏洞修复
- 对用户输入进行预处理
- 对特殊字符 # ’ – 进行过滤
API9
接口
Login
用户登录需要username以及4位pin码
漏洞利用点
尝试暴力破解pin码
存在防爆破机制,当尝试次数过多则会返回500
将 URL 中的 v2 改成 v1,爆破老版本 API,没有爆破机制,成功爆破 pin 为 1655,得到flag。
漏洞修复
- 停用老版本 API;
- 将老版本 API 放入内网。
API10
接口
Get Flag
漏洞利用点
漏洞修复
对API做日志管理和访问监控