【漏洞赏金渗透课程】Api接口渗透测试、Fuzz技巧分享
作者:FancyPig | 发布时间: | 更新时间:
相关阅读
视频讲解
本期视频将大家了解如何对api接口进行渗透测试,通过模糊测试可以找到更多的端点,然后通过burp可以手动进行测试,最终完成入侵!
寻找Web资产
首先我们需要通过Nmap来寻找web服务,-F代表扫描Top100端口
nmap -A -F 10.10.11.161 -V

当然,如果你想要降低扫描速度可以使用-T1或者-T2
然后找到了web服务

API模糊测试
我们先尝试直接访问80端口

然后使用FFUF对接口路径进行模糊测试
ffuf -u http://10.10.11.161/FUZZ -w /usr/share/wordlists/dirb/common.txt

可以看到结果里有/api路径

然后我们访问网页/api,可以看到里面有/v1端点

当然如果什么都没有,您可以继续使用FFUF模糊测试
ffuf -u http://10.10.11.161/api/FUZZ -w /usr/share/wordlists/dirb/common.txt

我们继续通过网页进行访问,发现返回值里有"user"、"admin"

我们尝试看看能不能继续进行访问


这里可以看到/user显示Not Found,我们可以继续进行模糊测试
ffuf -u http://10.10.11.161/api/user/FUZZ -w /usr/share/wordlists/dirb/common.txt

结果里这些数字,应该就是用户的id

为了验证这一点,我们手动访问/api/v1/user/1,可以看到管理员账户的信息

其实在这里,如果是漏洞赏金的话,我们就已经可以上报信息泄露类的漏洞了,但是,我们继续,看看能不能有进一步的发现,这里有个小技巧,就是对结果的大小,我们可以使用-mr去匹配,比方说Size大小包含4的

ffuf -u http://10.10.11.161/api/user/FUZZ -w /usr/share/wordlists/dirb/common.txt -mr 4
当然,除了Size为4的,你还可以匹配到包含4的,比方说104

接下来我们需要对注册、登录的关键接口进行手动测试


我们可以打开burpsuite并开启拦截(intercept)

并将拦截下来的包传到repeater里,这样我们可以手动修改参数

在repeater界面上,我们点击发送就可以随时看到返回的结果
下面是什么参数都没有修改的,和我们在浏览器里直接访问的没有区别!

通常注册和登录都使用的是POST请求,我们将请求进行修改,并点击发送
我们可以看到响应里提示,body里没有必填的字段

我们尝试在body里构造一个json格式的,比方说我想注册一个用户名为phdsec的
{
"user":"phdsec"
}
我们进行修改,并发送请求
可以看到这时报错是value is not a valid dict

稍微有经验一点,你能一眼看出是Content-Type里给的格式错了,粗暴的方式是你可以直接把这段去掉试试

可以看到现在不报之前的错误了,这里提示的是缺少密码字段(password field)
并且这里提示我们注册需要的是email,也就是邮件账户

综上我们对输入的内容进行修改
{
"email":"phdsec@me.com",
"password":"pass1234"
}
可以看到再次发送后,返回值是201 Created代表我们的用户已经被成功创建

既然账户都可以注册了,但我们尝试下,看看能否登录
这里可以看到提示的报错是 422 无法处理的实体

这时我们需要思考,是不是登录的时候可能不是使用的json格式,而是最传统的方式
username=phdsec@me.com&password=pass1234
这里进行尝试,发现已经登录成功,并且给我们返回了access_token,看到bearer关键词,就可以判断这里是一个JWT的令牌,如果我们在请求头中携带,则可以完成身份的验证
authorization: bearer <Token>

我们之前结果中发现有docs路径

我们可以尝试使用上面说的方式进行身份验证,继续请求

继续在跳转到下个页面添加同样的请求体

最终进入相应的系统

发现我们已经进入了接口文档的页面,至此渗透测试结束!

当然,这里身份验证的方式提到了JWT令牌(json web token),与之类似的还有很多种,我们会在后续的文章里涉及!