目录

环境搭建

漏洞复现

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

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

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

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

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

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

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

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

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

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


环境搭建

借助 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,那么就会返回真正的优惠券代码啦。

完。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐