【API渗透】crAPI 靶场的环境搭建与漏洞复现详解
目录
挑战9:让crAPI发送一个HTTP调用到“ www.baidu.com”并返回HTTP响应
环境搭建
借助 crAPI 靶场来讲解API相关渗透技能。
按照如下步骤安装:
在Kali创建目录,并下载相关文件
curl -o docker-compose.yml
https://raw.githubusercontent.com/OWASP/crAPI/main/deploy/docker/docker
compose.yml

拉取相关镜像
docker-compose pull

将docker-compose.yml中未被注释的监听的地址127.0.0.1改成你虚拟机的IP地址
运行对应的环境
docker-compose pu -d
正常启动之后,访问: http://虚拟机ip:8888 就能看到登录界面

自己注册账号登录即可。
新用户进来之后,需要去邮箱服务绑定一下车辆信息:

访问:http://虚拟机ip:8025/




漏洞复现
网站一共十个漏洞挑战。
挑战1:找到泄露其它用户敏感信息的API接口
在论坛页面存在过多的数据暴露
我们可以打开Burpsuit,然后在历史记录里抓包看包。
这里刷新Community,然后抓包!

看到一个这样的包 :
/community/api/v2/community/posts/recent?limit=30&offset=0

挑战2:找到泄露视频内部属性的API接口
点击网站个人中心(My Profile)进入上传视频的接口

随便上传一个视频:

修改视频名字:

抓包:可以看到详细的视屏内部编码信息

挑战3:访问其它用户车辆的详细信息
之前挑战1的时候就抓到了很多用户信息及用户的车辆信息
回去仔细看看,并作记录:

记录一下用户的车辆ID:
Robot:4bae9968-ec7f-4de3-a3a0-ba1b2ab5e5e5
Pogba:cd515c12-0fc1-48ae-8b61-9230b70a845b
因为要越权查看其他用户的车辆信息,这个时候就需要去找一个查看车辆信息的接口:
点来点去,发现在Refresh location位置有东西:

抓包看看:

发现URL后面的字符串和之前搜集到的车辆ID格式类似:
改改试试看?改成 4bae9968-ec7f-4de3-a3a0-ba1b2ab5e5e5

挑战4:访问其它用户的机械报告
这个也是典型的越权。就是查看其他用户的汽车报告。
在系统中只有一个地方有相关的信息,就是联系维修师傅。

随便填点东西,然后Burpsuit抓这个包:


很明显:
http://192.168.88.131:8888/workshop/api/mechanic/mechanic_report?report_id=6
有一个参数report_id,我们思考是否可以通过修改report_id来查看其他用户的报告呢?

挑战5:重置其它用户的密码
在登录页面有一个忘记密码的功能:


通过前面信息搜集,可以获取所有用户的邮箱:
Robot:robot001@example.com Pogba:pogba006@example.com Adam:adam007@example.com
我们尝试去修改: robot001@example.com这个邮箱账户的密码:


这个OTP 是一次性密码,发送到对应邮箱,其实就是邮箱验证码。
只要得到了OTP就能重置密码
抓包试试:
tips(在抓包Robot用户邮箱的OTP信息之前,可以先登录自己的邮箱,看看返回的OTP是什么样子的,格式如何,方便后续爆破!这里发现OTP是4位数字)

发送到repeter里去试试更改otp手动爆破看看有没有次数限制:

发现不行!
查看页面源码JS

有V2版本,V3版本
限制次数提交的版本是V3版本,那么有没有可能V2版本就没有限制提交呢?且V2的版本还在呢?没有下线? 试一试:

发送到intruder攻击器里进行爆破尝试,前面已知OTP是4位数字:

tips:数字范围改成“顺序”,选随机的话会报错,截图没有纠正!OK,爆破成功!7739

可以愉快的去改robot用户的登录密码啦!
挑战6:删除另一个用户的视频
我们找到前面更新视频的地方:

修改方法,把PUT修改为DELETE:

路径路面有个很特别的标识:
将user修改位admin, 将视频id替换一下。

挑战7:免费获得一件物品
先购买一个轮胎,在BUY的同时抓包:

尝试将包请求头修改为PUT方法,且将数量改为多个,如果能成功,就成了:
这是原请求头:

点击发送,返回响应头如下:

现在改一下请求头信息:

成功了:

订单页面也出现了花10$购买的20个轮胎购物信息

挑战8:将您的结余增加1000元或以上
同上,我们先看订单细节功能点里面的抓包信息:

发现返回的响应头里面有个status字段:

想办法构造一下请求头:把GET改成PUT,添加随意值的status字段。

重新构造:

返回页面看看金额增加了2000$!成功。

挑战9:让crAPI发送一个HTTP调用到“ www.baidu.com”并返回HTTP响应
找到联系维修工程师接口:


挑战10:想办法在不知道优惠券代码的情况下获得免费优惠券
优惠券一般都会缓存在NoSQL中。 NoSQL是一种非关系型数据库,和redis一样,是键值结构。
找到验证优惠券的接口:

随便写一个抓包试试:

如果知道NoSQL 的查询语句,和SQL的注入方式一致,让查询语句带入SQL里面去执行:

上面的$ne是NoSQL非关系型数据库的一种注入方式,意思是!=,不等于的意思,整句话意思就是优惠券不等于XXX,那么就会返回真正的优惠券代码啦。
完。
更多推荐

所有评论(0)