服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

API安全漏洞靶场crapi漏洞复现

日期: 来源:乌雲安全收集编辑:赵光红

项目介绍

crAPI 应用程序被建模为 B2C 应用程序,允许任何用户让汽车修理工完成他们的汽车维修。用户可以在 WebApp 上创建帐户、管理他/她的汽车、搜索汽车修理工、提交任何汽车的服务请求以及从供应商处购买汽车配件。WebApp 还有一个社区部分,用户可以在其中贡献博客文章和评论。
crAPI 应用程序在设计上并未以最安全的方式实现其所有功能。换句话说,它故意暴露安全漏洞,任何使用该应用程序的安全爱好者都可以利用这些漏洞。有关漏洞的更多详细信息,请参阅challenges.md
crAPI 具有微服务架构,包括使用不同技术开发的以下服务:

web: 主 Ingress 服务

身份:用户和身份验证端点

社区:社区博客和评论端点

车间:车辆车间端点

mailhog:邮件服务

mongo:NoSQL 数据库

postgres:SQL 数据库


安装

curl -o docker-compose.yml https://raw.githubusercontent.com/OWASP/crAPI/main/deploy/docker/docker-compose.yml

docker-compose pull

docker-compose -f docker-compose.yml --compatibility up -d

常见问题排除

https://github.com/OWASP/crAPI/blob/main/docs/troubleshooting.md

由于该项目更新比较快建议使用纯净系统安装

host绑定解析域名 ,通过域名访问该站点

失效的访问控制

挑战1和挑战2都是失效的访问控制导致存在的越权问题,通过GUID或者其他端点获取其他用户的信息以及凭证,因此在我们做测试时需要一个初始访问权限,注册一个账号。[email protected]/test123@

通过前端获取大量隐藏接口信息

LAB1- 访问其他用户车辆的详细信息

挑战描述:
要解决这个挑战,您需要泄露其他用户车辆的敏感信息。 由于车辆 ID 不是序列号,而是 GUID,因此您需要找到一种方法来公开其他用户的车辆 ID。查找接收车辆 ID 并返回相关信息的 API 端点。
首先我们需要添加一个车辆信息来获取关于车辆相关的参数,8025端口是一个简单的邮箱系统,当我们注册用户后会给我们发送车辆信息


通过获取的车辆添加一个车辆

然后在 JS代码中查找相关接口

根据梳理发现关于车辆报告相关的接口有4个,一个添加订单、一个订单信息、一个发送确认订单信息
ADD_VEHICLE:"api/v2/vehicle/add_vehicle",
GET_VEHICLES:"api/v2/vehicle/vehicles",
RESEND_MAIL:"api/v2/vehicle/resend_email",
REFRESH_LOCATION:"api/v2/vehicle//location",

 搜索:REFRESH_LOCATION接口调用方法

越权查看到车辆的ID

LAB2-访问其他用户的机械报告

挑战描述:
crAPI 允许车主通过提交“联系机械师”表格来联系他们的机械师。这个挑战是关于访问其他用户提交的技工报告。
分析报告提交流程,找到一个隐藏的 API 端点,该端点公开了机械报告的详细信息,更改报告 ID 以访问其他报告
添加一个机械报告

当我们添加一个报告后发现返回了一个报告连接 http://www.crapi.com:8888/workshop/api/mechanic/mechanic_report?report_id=6 

通过访问该ID连接可以发现那个用户提交的报告

修改该ID参数即刻获取其他用户的报告信息

损坏的用户身份验证

LAB3 - 重置不同用户的密码

挑战描述:

在 crAPI 上查找另一个用户的电子邮件地址 暴力破解可能是答案。如果您面临任何保护机制,请记住利用 REST API 的可预测性来查找更多相似的 API 端点。

重置在crAPI 上获取到的用户邮箱地址:[email protected]

在邮箱服务中发现该验证码为四位验证码,可进行爆破测试

通过枚举该参数可以直接爆破成功

然后发现使用v3端点存在防爆破机制

使用v2端点则可以绕过防爆破机制实现密码重置

下图为爆破成功

过多的数据暴露

LAB4 - 找到泄露其他用户敏感信息的 API 端点

通过在评论页面的返回包中发现大量用户敏感信息

API端点:/community/api/v2/community/posts/recent

LAB5 - 找到泄漏视频内部属性的 API 端点
挑战描述:

在此挑战中,您需要找到不应向用户公开的视频资源的内部属性。此属性名称和值可以帮助您利用其他漏洞。

在个人信息中可以上传视频信息,上传视频测试

通过抓包发现上传视频为identity/api/v2/user/videos 端口,通过抓包看到视频信息以ID作为参数

结合之前获取的所有接口信息,发现使用videos端点有3个,
UPLOAD_VIDEO:"api/v2/user/videos",

CHANGE_VIDEO_NAME:"api/v2/user/videos/",

CONVERT_VIDEO:"api/v2/user/videos/convert_video",

 如果我们需要越权查看到别人的信息,通过api/v2/user/videos/端点实现越权测试

通过修改文档名发现api/v2/user/videos/端点修改其他信息

速率限制

LAB6 - 使用“接触机制”功能执行第 7 层 DoS

API通常不会对客户端/用户可以请求的资源的大小或数量施加任何限制。这不仅会影响API服务器的性能,导致拒绝服务,而且还会为暴力破解等身份验证缺陷敞开大门。漏洞可能导致DoS,造成API无响应或不可用。
Challenge 6 - Perform a layer 7 DoS using ‘contact mechanic’ featureS
第 7 层是指互联网的 7 层 OSI 模型的顶层,也称为“应用程序层”。这是数据处理的顶层,位于用户与之交互的软件应用程序的表面之下或幕后。例如,用于加载网页的 HTTP 请求和响应是第 7 层事件。在这一层面上发生的 DDoS 攻击称为第 7 层攻击或应用程序层攻击。
分布式拒绝服务(DDoS)攻击是通过大规模互联网流量淹没目标服务器或其周边基础设施,以破坏目标服务器、服务或网络正常流量的恶意行为。
DDoS 攻击利用多台受损计算机系统作为攻击流量来源以达到攻击效果。利用的机器可以包括计算机,也可以包括其他联网资源(如 IoT 设备)。
总之就是短时间通过大量的请求访问占用服务器的资源从而导致服务器不能对正常的流量做出响应。
找到api将repeat_request_if_failed改成ture,将number_of_repeats改成一个很大的数字,重放测试实现DDoS攻击。

LAB7 - 删除其他用户的视频

挑战描述:

利用 REST API 的可预测性来查找管理端点以删除视频 删除别人的视频
/identity/api/v2/user/videos/31端点

使用OPTIONS协议探测支持的http协议

使用DELETE协议删除该视频,提示需要使用管理员端点才能访问,将user改为admin即可

DELETE /identity/api/v2/admin/videos/31

批量分配

LAB8 - 免费获得一件物品

挑战描述:

crAPI 允许用户退回他们订购的商品。您只需单击“退货订单”按钮,收到二维码并在 USPS 商店出示即可。要解决这个难题,您需要找到一种方法来获得您实际上并未退回的商品的退款。利用 REST API 的可预测性来查找允许您编辑特定订单属性的影子 API 端点。
使用PUT协议进行报错发现订单的多种状态'delivered'(已交付),return pending(订单处理)'or 'returned(已退货)

通过设置退货的状态信息为returned已退货。

通过设置订单退货状态来获取商店的赔付金钱,实现免费获取商品。

LAB9 - 将余额增加 1,000 美元或更多

挑战描述:

解决“免费获得一件物品”挑战后,发挥创意,找到一种方法让您从未退回的物品获得退款,但这次尝试获得更大的退款。
通过添加数量实现将产品的金额提高

然后在使用退款的形式获取更多的余额

获取产品接口,尝试使用POST协议添加产品

通过设置负数商品来获取购买过程中的逻辑赔付功能 

由于是负值所有在购买产品时他会返回金额给我们

LAB10 - 更新内部视频属性

挑战描述:

在解决“查找泄漏视频内部属性的 API 端点”挑战后,尝试找到一个允许您更改视频内部属性的端点。更改该值可以帮助您利用另一个漏洞。
由于该API端点目前存在问题导致无法更新其他人的视频属性。
SSRF
LAB11 - 让 crAPI 向“ www.google.com”发送 HTTP 调用并返回 HTTP 响应。
在维修申请时会发送一个远端的URL请求,从而请求发送到远端服务器。

通过抓包修改mechanic_api参数实现对远端请求服务的控制,从而实现SSRF漏洞,发送带外的DNSlog请求。

NoSQL注入

LAB12 - 想办法在不知道优惠券代码的情况下获得免费优惠券。

通过提示该题为Nosql注入,NoSQL 注入由于 NoSQL 本身的特性和传统的 SQL 注入有所区别。使用传统的SQL注入,攻击者利用不安全的用户输入来修改或替换应用程序发送到数据库引擎的 SQL 查询语句(或其他SQL语句)。

换句话说,SQL 注入使攻击者可以在数据库中 SQL 执行命令。

与关系数据库不同,NoSQL 数据库不使用通用查询语言。NoSQL 查询语法是特定于产品的,查询是使用应用程序的编程语言编写的:PHP,JavaScript,Python,Java 等。这意味着成功的注入使攻击者不仅可以在数据库中执行命令,而且可以在应用程序本身中执行命令,这可能更加危险。

在兑换优惠券功能我们可以看到该功能为一个查询,对于关系型注入的话可能代码就是: or 1=1#实现查询为真的结果。但是该处为NoSQL注入,我们可以通过FUZZ SQL语句的方式获取查询语句。

通过枚举模块设置FUZZ SQL查询语句,注意该处我列举了Nosql常用payload

通过枚举发现{“$ne”:-1}参数绕过查询,成功获取到兑换码

通过输入正确的对话码,实现优惠券兑换成功

参考:https://www.jiangguo.net/c/kVz/EDy.html

SQL注入

LAB13 - 找到一种方法来兑换您已经通过修改数据库领取的优惠券

该题提示为SQL注入,找到存在SQL注入的端点,通过FUZZ SQL语句的形式,获取到SQL注入语句"1'0r1'='1"。

 

这个端点上存在SQL注入

LAB14 - 找到一个不为用户执行身份验证检查的端点。

该题为未授权访问漏洞,通过删除header头处的Authorization认证信息来获取存在未授权访问的端点,在这里我用的时burp的Authz插件检测是否存在未授权访问的端点。

该端点无需用户身份权限直接获取用户订单信息

JWT 漏洞

LAB15 - 找到一种方法来伪造有效的 JWT 令牌

挑战描述:

crAPI 中的 JWT 身份验证容易受到各种攻击。找到任何一种方法来伪造有效的 JWT 令牌并获得对平台的完全访问权限。
通过对JWT_token的解码发现该站点使用RS256算法,该题为算法混淆攻击
如果将算法RS256修改为HS256(非对称密码算法=>对称密码算法),则库的通用verify()方法会将公钥视为 HMAC 机密,公钥有时可以被攻击者获取到,所以攻击者可以修改header中算法为HS256,然后使用RSA公钥对数据进行签名。

 localhost:8888/.well-known/jwks.json 获取jwt的公钥

去到JWT editor选项卡,点击New RSA Key 复制JWK set内容 保存

 之后再右键我们新建的Key Copy Public Key as Pem

去Decoder选项卡对这个 PEM 密钥进行 Base64 编码,然后复制生成的字符串
再次回到Burp 主选项卡栏中 的JWT Editor Keys选项卡,点击New Symmetric Key Generate
将 k 属性的生成值替换为PEM Base64编码

然后在burp的请求中可以发现json web token选项卡

通过调用该选项卡实现对json web token的各种工具,例如修改header头信息

在选择卡左下角处也可以看到对json web token的攻击选项。

参考: https://github.com/OWASP/crAPI/blob/ff8ee954ddc0eb12990474e0662a21e1c0a8c63a/docs/challengeSolutions.md

https://blog.csdn.net/weixin_63231007/article/details/127748765

https://xz.aliyun.com/t/11904#toc-7


相关阅读

  • 常见API接口渗透测试流程

  • API接口渗透测试是通过用渗透测试的方法测试系统组件间接口的一种测试。接口渗透测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查
  • B站这套PPT绝了,4张上硬塞了13个大图表!

  • 点击 预约/观看 ,进入今晚专题直播课 直播主题:职场PPT设计改稿思路 直播福利:免费抽奖《PPT设计思维》工作型PPT,遇到文字多,数据还多页面,该怎么处理呢?大多数人可能会直接把
  • Windows 11 将重大更新,任务栏集成 ChatGPT 功能

  • 点击上方蓝字 ● 关注Linux公社 今天这期不谈 Linux。近年在电脑界的风头,苹果(Apple)的风头似乎盖过微软(Microsoft)了,不过近期 ChatGPT 火热,而 Microsoft 更决定将其整合到
  • 客车故障抛锚 济宁高速交警及时救援

  • 济宁新闻网讯 3月4日上午9时50分,济宁高速交警支队济微高速民警巡逻至辖区102公里处济宁东服务区济南方向时,发现一辆大巴车打开双闪停在应急车道内,民警立即上前查看情况。经

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 常见API接口渗透测试流程

  • API接口渗透测试是通过用渗透测试的方法测试系统组件间接口的一种测试。接口渗透测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查
  • API安全漏洞靶场crapi漏洞复现

  • 项目介绍crAPI 应用程序被建模为 B2C 应用程序,允许任何用户让汽车修理工完成他们的汽车维修。用户可以在 WebApp 上创建帐户、管理他/她的汽车、搜索汽车修理工、提交任何汽
  • 两会H5|一场关于山东的宇宙通信

  • 黄河入海处,黄蓝交汇、泾渭分明,好似打翻的调色盘;沂蒙山区,层峦叠嶂、崮岳如黛,绘就世所罕见的奇幻画卷……这个春天,从卫星瞰山东,这片土地更显亲切浪漫。2023年全国两会开幕之际
  • 太火爆!还有两个月,全订满了

  • 来源:钱江晚报全媒体编辑中心综合自 北京青年报、红星新闻、南方都市报、宁波晚报等今年来,旅游的热度持高不下有平台数据显示虽然距离“五一”小长假还有2个月时间有的地方
  • 有这样一个人,有这样一群人!

  • 3月5日是第60个学雷锋纪念日,60年过去了,我们仍记得他、敬佩他,我们还在学习他、成为他!他离我们并不遥远,那许许多多的他,就在我们身边!有这样一个人——他的生命永远停在了22岁他
  • 一张图,带你了解全国两会!

  • 两会时间已开启!关于全国两会,你了解多少?代表、委员是如何产生的?议案、提案等表述该如何区分?作为在全面贯彻落实党的二十大精神开局之年召开的重要会议,今年的两会又有哪些议程