在 hack 中学习,不要去学习 hack。
对于想了解 API 安全的同学,最直接的方式就是拿到一个靶场进行实战。正好,crAPI 项目就是 OWASP 推出的 API 安全项目,可以帮助大家了解常见的 API 安全漏洞。
本文将对 crAPI 靶场的相关漏洞以及打靶思路进行简单的介绍,希望对大家有所帮助。
首先,附上 crAPI 项目的 Giithub 地址:https://github.com/OWASP/crAPI
。还有 OWASP API Security Project 可以参考:https://owasp.org/www-project-api-security/
安装靶场的话,可以使用多种方式,本文直接使用 docker 搭建(需要先安装 docker 以及 docker-compose) ,docker 启动命令如下:
docker-compose -f docker-compose.yml --compatibility up -d
安装完成,就可以开始研究漏洞了,大家打靶的时候可以参考官方给的提示:https://github.com/OWASP/crAPI/blob/develop/docs/challenges.md
,下面就针对 crAPI 漏洞以及打靶思路进行介绍。
失效的对象级别授权
1、首先找到泄露其它用户的车辆 id 的接口
在社区论坛处,可以获取所有评论者的详细信息
2、车辆定位功能处,可以看到车辆位置信息信息
3、更改车辆 id ,发现可以访问其它车辆的信息
1、发送维修报告请求
抓包分析,发现请求之后,会返回一个报告访问的地址
2、修改 report_id 可以查看其它用户提交的维修报告
失效的用户身份验证
1、找到可以查看其它用户的 email 的接口
2、登录处可以重置密码
抓包分析
多重放几次,发现重放多次会有限制
3、此时将 v3 改为 v1或者 v2 试试,发现 v2 可以无限重放
使用 v2 提供的接口,可以爆破四位数的 otp
4、爆破成功,即重置他人密码成功
过多的数据暴露
1、敏感信息泄露接口
/community/api/v2/community/posts/recent
1、找到修改上传的视频名称的接口
/identity/api/v2/user/videos/30
可以看到视频内部相关的属性。
资源缺乏和速率限制
1、 找到 contact mechanic 功能
2、尝试修改参数接口请求中的参数
将 repeat_request_if_failed 改为 true,将 number_of_repeats 改为较大的数字,重放,发现 DoS 攻击
失效的功能级别授权
1、将 put 请求方式改为其它的,比如 delete
发现存在 DELETE 请求方式,但是该接口需要 admin 权限
2、尝试将接口中的 user 改为 admin
利用 REST api 的可预测特性找到一个管理接口来删除视频
3、尝试将 videos 后参数改为其它用户的视频id
发现可以删除其他用户的视频。
批量分配 / 大量赋值 / 自动绑定漏洞
将客户端提供的数据(例如 JSON )绑定到数据模型,而没有基于 allowlist 进行适当的属性过滤,通常会导致 Mass Assignment 。猜测对象属性、探索其他 API 端点、阅读文档或在请求有效负载中提供额外的对象属性,都允许攻击者修改他们不应该修改的对象属性。
1、增加订单功能接口
2、更改请求方式为 GET,并增加订单参数
3、将 GET 请求方式改为 PUT
发现可以请求成功,继续修改参数,发现可以修改数量和状态
4、尝试修改 status 属性的值
5、将 status 修改为 retured
其中'delivered'表示已收到货品,'return pending' 表示退货, 'returned' 表示已经退货,修改订单状态,直接将status 改为 returned 状态,发现此时自己的余额增加了,相当于免费购买了一件商品
1、修改订单中的数量为100,status改为 delivered
2、再修改 status 为 returned
3、此时发现金额已经发生变化,增加了 $1000
1、在修改视频名称的时候,尝试增加其它的参数
发现可以修改 conversion_params的属性值
1、找到联系机械工的接口
将 mechanic_api 的值改为http://baidu.com
,发现服务器会发起请求,并返回结果
2、也可以使用 dnslog 验证
3、查看 dnslog 结果
1、找到验证优惠券的接口,使用 nosql 注入的语句尝试
尝试使用{"$ne":"xxxxxxxxxxxx"
(备注:$ne
表示不等于)
2、得到一个优惠券:TRAC075
由于本文使用的是 docker 搭建的,查看靶场的版本不是最新的,所以这个注入漏洞没有复现。在最新的源码中可以看到是存在 sql 注入的,此关就不做说明了。
最新版本源码存在 sql注入的代码:
未经身份验证的访问
1、查看机械工报告的接口,不需要进行身份验证就可以直接访问
官方文档提到:“crAPI中还有两个秘密挑战,它们非常复杂,目前我们不分享它们的细节,只知道它们真的很酷。” 更多的漏洞,大家可以自行探索。
除了以上漏洞,其它漏洞大家也可以多去挖掘,这边附上几个漏洞,供大家参考
1、获取商品列表接口
2、尝试将 GET 请求方法改为 POST
发现需要传值,构造相应的参数之后,即可请求成功
成功之后,就上传了一个商品
1、查询余额
2、购买商品接口处,修改购买的数量,改为负数
3、发现金额增加了
1、使用 JWT_Tool 对 jwt 进行爆破
得到密钥为 crapi
2、修改账号信息,使用爆破得到的密钥签名
3、使用伪造的 token 进行访问,发现可以成功
本文分享了 crAPI 靶场的相关漏洞以及解题思路,里面覆盖了大部分的 OWASP API top 10 的安全漏洞。其实,打靶的过程也是学习的过程,相信对 API 安全漏洞的研究会有一些帮助。