- APIKit
- APISandbox
- APISandbox靶场通关
- 安装
- OWASPApiTop10
- 4ASystem
APIKit
APIKit是基于BurpSuite提供的JavaAPI开发的插件。
APIKit可以主动/被动扫描发现应用泄露的API文档,并将API文档解析成BurpSuite中的数据包用于API安全测试。
实际使用效果如图:
APIKit v1.0支持的API技术的指纹有:
-
GraphQL
-
OpenAPI-Swagger
-
SpringbootActuator
-
SOAP-WSDL
-
REST-WADL
安装
打开BurpSuite页面,点击Extender然后选择Extensions,添加APIKit.jar。
然后APIKit会对进入到BurpSuite的流量进行被动扫描。解析完成后可以在APIKit面板查看结果,同样Burpsuite的DashBoard也会有issue提示。
APISandbox
-
APISandbox是一个包含多个场景的API漏洞靶场。
-
4ASystem: 4A认证系统下的API平行越权
-
APIVuln: 生产消费流水线中的API缓存投毒
-
GraphqlNotebook: 一个使用GraphQL的留言板以及经典API漏洞
-
InfoSystem: WSDL泄露API越权进后台Getshell
-
OASystem: SpringBoot微服务架构下的API Gateway配置问题
-
OWASPApiTop10: 使用go作为后端实现解释OWASP API Top 10的漏洞
安装
# 下载项目
wget https://github.com/API-Security/APISandbox/archive/refs/heads/main.zip -O APISandbox-main.zip
unzip APISandbox-main.zip
cd APISandbox-~~main
# 进入某一个漏洞/环境的目录
cd OWASPApiTop10
# 自动化编译环境
docker-compose build
# 启动整个环境
docker-compose up -d
APISandbox靶场通关
安装
下载靶场
自动化编译环境
启动环境
看一下容器所在的端口
访问对应的端口即可访问靶场
OWASPApiTop10
使用脚本进行扫描
可以看到所有端口
/v2/register接口任意用户注册
其实这里也存在用户名枚举
用户名存在的时候会提示
{"code":1000,"msg":"Username has already been used!"}
/v1/getenv接口未授权
/v2/user/getuserinfo/2 水平越权
首先需要使用/v2/login接口获取一个普通用户的cookie
修改url中的数字即可越权获取其他用户的信息
/v2/user/getuserprofiles 垂直越权
getuserprofiles接口垂直越权可获取所有用户的信息
/v2/login 暴力破解
该接口没有验证码,可以进行暴力破解
4ASystem
安装
安装完毕之后会有四个容器,我们先访问web1。
弱口令登陆Web1应用
登录接口存在弱口令admin/admin888
web1应用横向越权
web1登录之后发现没啥东西
扫描目录发现www.zip存在源码s.php
发现两个接口
$loginapi = "http://192.168.10.10:8080/api/v1/sys_authenticate";
$resetapi = "http://192.168.10.10:8080/api/v1/sys_passwdreset";
ChangePass函数用来修改web应用的密码。
function ChangePass($url1, $url, $username, $oldpassword, $newpassword){
$cookie = Login($url1, $username, $oldpassword);
//$cookie = "MTYyNzU1NTA5NHxOd3dBTkRaS1VWaFNVMGhZVjFFMFdFZFFTMFZCVWpkTlVrVllOa2hYTlZBM05qVkpTa2MzTWpOT1ZETkNOakpKUWxoU1JrRkRVa0U9fLekjnGbigV2zA4BL9IPyp7Q6lzJ53hzvmB2TnIyBsXp";
//echo $cookie;
$data = array(
'username' => $username,
'newpasswd' => $newpassword,
'application' => 'web1'
);
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); // Post提交的数据包x
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制 防止死循环
curl_setopt($curl, CURLOPT_HEADER, 1); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Cookie: GOSESSID=$cookie;"));//设置请求头
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$res = curl_exec($curl); // 执行操作
if(curl_errno($curl)) {
header(500);//捕捉异常
}
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
curl_close($curl);
$header = substr($res, 0, $header_size);
$body = substr($res, $header_size);
if(preg_match('/200/',$body)){
return "success";
}elseif (preg_match('/400/',$body)){
return "reset Fail";
}else{
return null;
}
}
函数调用
echo ChangePass($loginapi,$resetapi, $username, $oldpassword, $newpassword);
$loginapi = "http://192.168.10.10:8080/api/v1/sys_authenticate";
$resetapi = "http://192.168.10.10:8080/api/v1/sys_passwdreset";
也就是最终通过resetapi进行密码修改,构造一下请求数据包。
首先使用loginapi获取api的凭证
有了凭证访问resetapi即可越权修改web1、web2的应用密码。
这里我不知道为啥访问接口404。
原文始发于微信公众号(土拨鼠的安全屋):API漏洞挖掘指北-APISandbox靶场通关.1
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论