0x00 前言
靶场简介
在 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 漏洞以及打靶思路进行介绍。
0x01 Broken Object Level Authorization
失效的对象级别授权
挑战1:访问其它用户车辆的详细信息
1、首先找到泄露其它用户的车辆 id 的接口
在社区论坛处,可以获取所有评论者的详细信息
2、车辆定位功能处,可以看到车辆位置信息信息
3、更改车辆 id ,发现可以访问其它车辆的信息
挑战2:访问其它用户的机械报告
1、发送维修报告请求
抓包分析,发现请求之后,会返回一个报告访问的地址
2、修改 report_id 可以查看其它用户提交的维修报告
0x02 Broken User Authentication
失效的用户身份验证
挑战3:重置其它用户的密码
1、找到可以查看其它用户的 email 的接口
2、登录处可以重置密码
抓包分析
多重放几次,发现重放多次会有限制
3、此时将 v3 改为 v1或者 v2 试试,发现 v2 可以无限重放
使用 v2 提供的接口,可以爆破四位数的 otp
4、爆破成功,即重置他人密码成功
0x03 Excessive Data Exposure
过多的数据暴露
挑战4:找到泄露其它用户敏感信息的API接口
1、敏感信息泄露接口
/community/api/v2/community/posts/recent
挑战5:找到泄露视频内部属性的API接口
1、找到修改上传的视频名称的接口
/identity/api/v2/user/videos/30
可以看到视频内部相关的属性。
0x04 Lack of Resources & Rate Limiting
资源缺乏和速率限制
挑战6:使用 “contact mechanic” 功能完成第7层DoS
1、 找到 contact mechanic 功能
2、尝试修改参数接口请求中的参数
将 repeat_request_if_failed 改为 true,将 number_of_repeats 改为较大的数字,重放,发现 DoS 攻击
、0x05 Broken Function Level Authorization
失效的功能级别授权
挑战7:删除另一个用户的视频
1、将 put 请求方式改为其它的,比如 delete
发现存在 DELETE 请求方式,但是该接口需要 admin 权限
2、尝试将接口中的 user 改为 admin
利用 REST api 的可预测特性找到一个管理接口来删除视频
3、尝试将 videos 后参数改为其它用户的视频id
发现可以删除其他用户的视频。
0x06 Mass Assignment
批量分配 / 大量赋值 / 自动绑定漏洞
将客户端提供的数据(例如 JSON )绑定到数据模型,而没有基于 allowlist 进行适当的属性过滤,通常会导致 Mass Assignment
。猜测对象属性、探索其他 API 端点、阅读文档或在请求有效负载中提供额外的对象属性,都允许攻击者修改他们不应该修改的对象属性。
挑战8:免费获得一件物品
1、增加订单功能接口
2、更改请求方式为 GET,并增加订单参数
3、将 GET 请求方式改为 PUT
发现可以请求成功,继续修改参数,发现可以修改数量和状态
4、尝试修改 status 属性的值
5、将 status 修改为 retured
其中’delivered’表示已收到货品,‘return pending’ 表示退货, ‘returned’ 表示已经退货,修改订单状态,直接将status
改为 returned 状态,发现此时自己的余额增加了,相当于免费购买了一件商品
挑战9:将您的结余增加1000元或以上
1、修改订单中的数量为100,status改为 delivered
2、再修改 status 为 returned
3、此时发现金额已经发生变化,增加了 $1000
挑战10:更新内部视频属性
1、在修改视频名称的时候,尝试增加其它的参数
发现可以修改 conversion_params 的属性值
0x07 SSRF
挑战11:让crAPI发送一个HTTP调用到“www.baidu.com”并返回HTTP响应
1、找到联系机械工的接口
将 mechanic_api 的值改为http://baidu.com
,发现服务器会发起请求,并返回结果
2、也可以使用 dnslog 验证
3、查看 dnslog 结果
0x08 NoSQl Injection
挑战12:想办法在不知道优惠券代码的情况下获得免费优惠券
1、找到验证优惠券的接口,使用 nosql 注入的语句尝试
尝试使用{"$ne":"xxxxxxxxxxxx"
(备注:$ne
表示不等于)
2、得到一个优惠券:TRAC075
0x09 SQL Injection
挑战13:通过修改数据库找到一种方法来兑换您已经认领的优惠券
由于本文使用的是 docker 搭建的,查看靶场的版本不是最新的,所以这个注入漏洞没有复现。在最新的源码中可以看到是存在 sql 注入的,此关就不做说明了。
最新版本源码存在 sql注入的代码:
0x0A Unauthenticated Access
未经身份验证的访问
挑战14:查找不为用户执行身份验证检查的接口
1、查看机械工报告的接口,不需要进行身份验证就可以直接访问
0x0B two secret challenges
官方文档提到:“crAPI中还有两个秘密挑战,它们非常复杂,目前我们不分享它们的细节,只知道它们真的很酷。” 更多的漏洞,大家可以自行探索。
0x0C 其它漏洞
除了以上漏洞,其它漏洞大家也可以多去挖掘,这边附上几个漏洞,供大家参考
增加一个商品
1、获取商品列表接口
2、尝试将 GET 请求方法改为 POST
发现需要传值,构造相应的参数之后,即可请求成功
成功之后,就上传了一个商品
支付漏洞
1、查询余额
2、购买商品接口处,修改购买的数量,改为负数
3、发现金额增加了
JWT 密钥爆破
1、使用 JWT_Tool 对 jwt 进行爆破
得到密钥为 crapi
2、修改账号信息,使用爆破得到的密钥签名
3、使用伪造的 token 进行访问,发现可以成功
0x0D 结语
本文分享了 crAPI 靶场的相关漏洞以及解题思路,里面覆盖了大部分的 OWASP API top 10 的安全漏洞。其实,打靶的过程也是学习的过程,相信对
API 安全漏洞的研究会有一些帮助。
资料分享
最后,给大家分享一波网络安全学习资料:
我们作为一个小白想转行网络安全岗位,或者是有一定基础想进一步深化学习,却发现不知从何下手。其实如何选择网络安全学习方向,如何进行实战与理论的结合并不难,找准正确方式很重要。
接下来我将从成长路线开始一步步带大家揭开网安的神秘面纱。
1.成长路线图
共可以分为:
一、基础阶段
二、渗透阶段
三、安全管理
四、提升阶段
同时每个成长路线对应的板块都有配套的视频提供:
网络安全面试题文章来源:https://www.toymoban.com/news/detail-806900.html
最后就是大家最关心的网络安全面试题板块
所有资料共87.9G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方CSDN官方合作二维码免费领取(如遇扫码问题,可以在评论区留言领取哦)~文章来源地址https://www.toymoban.com/news/detail-806900.html
到了这里,关于API安全Top 10 漏洞:crAPI漏洞靶场与解题思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!