电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 577 人浏览分享

API安全Top 10 漏洞:crAPI漏洞靶场与解题思路

[复制链接]
577 0
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-composedocker 启动命令如下:

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

安装完成,就可以开始研究漏洞了,大家打靶的时候可以参考官方给的提示:https://github.com/OWASP/crA
PI/blob/develop/docs/challenges.md,下面就针对 crAPI 漏洞以及打靶思路进行介绍。

QQ截图20221109101329.png


0x01 Broken Object Level Authorization

实效的对象级别授权

挑战1:访问其它用户车辆的详细信息

1、首先找到泄露其它用户的车辆 id 的接口


在社区论坛处,可以获取所有评论者的详细信息

QQ截图20221109102243.png

QQ截图20221109102310.png

2、车辆定位功能处,可以看到车辆位置信息信息

888888.png

3、更改车辆 id ,发现可以访问其它车辆的信息

888889.png

挑战2:访问其它用户的机械报告

1、发送维修报告请求

888887.png

抓包分析,发现请求之后,会返回一个报告访问的地址

888886.png

2、修改 report_id 可以查看其它用户提交的维修报告

888885.png

0x02 Broken User Authentication

失效的用户身份验证

挑战3:重置其它用户的密码

1、找到可以查看其它用户的 email 的接口

888884.png

2、登录处可以重置密码

888883.png

抓包分析

888882.png

多重放几次,发现重放多次会有限制

888881.png

3、此时将 v3 改为 v1或者 v2 试试,发现 v2 可以无限重放

使用 v2 提供的接口,可以爆破四位数的 otp

888880.png

4、爆破成功,即重置他人密码成功

888869.png

0x03 Excessive Data Exposure

过多的数据暴露

挑战4:找到泄露其它用户敏感信息的API接口

1、敏感信息泄露接口

/community/api/v2/community/posts/recent

88868.png

挑战5:找到泄露视频内部属性的API接口

1、找到修改上传的视频名称的接口

/identity/api/v2/user/videos/30

88867.png

可以看到视频内部相关的属性。

0x04 Lack of Resources & Rate Limiting

资源缺乏和速率限制

挑战6:使用 “contact mechanic” 功能完成第7层DoS

1、 找到 contact mechanic 功能

88866.png

2、尝试修改参数接口请求中的参数

将 repeat_request_if_failed 改为 true,将 number_of_repeats 改为较大的数字,重放,发现 DoS 攻击

88865.png

0x05 Broken Function Level Authorization

失效的功能级别授权

挑战7:删除另一个用户的视频

1、将 put 请求方式改为其它的,比如 delete

发现存在 DELETE 请求方式,但是该接口需要 admin 权限

88864.png

2、尝试将接口中的 user 改为 admin

利用 REST api 的可预测特性找到一个管理接口来删除视频

88863.png

3、尝试将 videos 后参数改为其它用户的视频id

88862.png

发现可以删除其他用户的视频。

0x06 Mass Assignment

批量分配 / 大量赋值 / 自动绑定漏洞

将客户端提供的数据(例如 JSON )绑定到数据模型,而没有基于 allowlist 进行适当的属性过滤通常会导致Mass
Assignment 猜测对象属性、探索其他 API 端点、阅读文档或在请求有效负载中提供额外的对象属性 都允许攻
击者修改他们不应该修改的对象属性。

挑战8:免费获得一件物品

1、增加订单功能接口

88861.png

2、更改请求方式为 GET,并增加订单参数

88860.png

3、将 GET 请求方式改为 PUT

发现可以请求成功,继续修改参数,发现可以修改数量和状态

88859.png

4、尝试修改 status 属性的值

88858.png

5、将 status 修改为 retured

其中'delivered'表示已收到货品,'return pending' 表示退货, 'returned' 表示已经退货 修改订单状态直
接将status 改为 returned 状态,发现此时自己的余额增加了,相当于免费购买了一件商品

88853.png

挑战9:将您的结余增加1000元或以上

1、修改订单中的数量为100,status改为 delivered

QQ截图20221109111946.png

2、再修改 status 为 returned

2080.png

3、此时发现金额已经发生变化,增加了 $1000

2079.png

挑战10:更新内部视频属性

1、在修改视频名称的时候,尝试增加其它的参数

发现可以修改 conversion_params的属性值

2222.png

0x07 SSRF

挑战11:让crAPI发送一个HTTP调用到“www.baidu.com”并返回HTTP响应

1、找到联系机械工的接口

将 mechanic_api 的值改为http://baidu.com,发现服务器会发起请求,并返回结果

2221.png

2、也可以使用 dnslog 验证

2220.png

3、查看 dnslog 结果

2219.png

0x08 NoSQl Injection

挑战12:想办法在不知道优惠券代码的情况下获得免费优惠券

1、找到验证优惠券的接口,使用 nosql 注入的语句尝试

尝试使用{"$ne":"xxxxxxxxxxxx"(备注:$ne表示不等于)

2218.png

2、得到一个优惠券:TRAC075

0x09 SQL Injection

挑战13:通过修改数据库找到一种方法来兑换您已经认领的优惠券

由于本文使用的是 docker 搭建的,查看靶场的版本不是最新的,所以这个注入漏洞没有复现在最新的
源码中可以看到是存在 sql 注入的,此关就不做说明了。

最新版本源码存在 sql注入的代码:

2216.png

0x0A Unauthenticated Access

未经身份验证的访问

挑战14:查找不为用户执行身份验证检查的接口

1、查看机械工报告的接口,不需要进行身份验证就可以直接访问

111.png

0x0B two secret challenges

官方文档提到:“crAPI中还有两个秘密挑战 它们非常复杂,目前我们不分享它们的细节 只知道
它们真的很酷 更多的漏洞,大家可以自行探索。

0x0C 其它漏洞

除了以上漏洞,其它漏洞大家也可以多去挖掘,这边附上几个漏洞,供大家参考

增加一个商品

1、获取商品列表接口

100.png

2、尝试将 GET 请求方法改为 POST

发现需要传值,构造相应的参数之后,即可请求成功

99.png

成功之后,就上传了一个商品

支付漏洞

1、查询余额

98.png

2、购买商品接口处,修改购买的数量,改为负数

96.png

3、发现金额增加了

39.png

JWT 密钥爆破

1、使用 JWT_Tool 对 jwt 进行爆破

得到密钥为 crapi

26.png

2、修改账号信息,使用爆破得到的密钥签名

22.png

3、使用伪造的 token 进行访问,发现可以成功

21.png

0x0D 结语

本文分享了 crAPI 靶场的相关漏洞以及解题思路,里面覆盖了大部分的 OWASP API top 10 的安全漏洞
其实,打靶的过程也是学习的过程,相信对 API 安全漏洞的研究会有一些帮助。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.