crAPI靶场搭建及通关教程
靶场搭建
我是搭建在服务器上的,当然,如果你有虚拟机也可以搭建在虚拟机上,但是最好用一个新的Ubuntu环境,不然就会出现各种各样的问题,导致搞了好几个小时环境问题还没搞明白,下面演示在服务器上搭建相关的靶场环境(服务器记得放行8888端口和8025端口)
首先确保自己的服务器有docker环境 |
当出现下面的页面的时候,就代表靶场启动成功
我们在自己的浏览器上输入xx.xx.xx.xx(服务器公网IP):8888/login
访问,得到下面的界面
如果启动的时候出现错误,检查端口有没有放行,端口有没有被占用,或者重启docker服务
注册账号
注册账号,非常简单,我们根据提示来就行,然后我们登录我们的邮件服务器,即8025端口,进行邮件接收
我们点击查看邮件,将返回给我们的数据填到对应的地方
然后我们就可以得到我们的车,接着就可以开始闯关了
挑战1:访问其它用户车辆的详细信息
首先我们进入Community界面,这里面有其他用户发表的POST,任意点击一个条目,我们试着去抓包
相关的敏感信息已经出来了,我们记下字段"vehicleid":"4bae9968-ec7f-4de3-a3a0-ba1b2ab5e5e5"
,方便我们后续进行水平越权
我们回到dashboard界面,重新刷新位置信息并抓包,如下所示
我们可以将对应的字段换成我们想要查找的车辆,进而可以方便我们查找其他车辆的位置信息
水平越权成功
挑战2:访问其它用户的机械报告
首先我们要找到我们自己的机械报告在哪
我们点击这里,显示页面如下,我们随便填入一些并进行抓包
抓包返回结果如下所示
我们把这个url复制下来,替换我们request包的请求地址,并把请求方式改成GET,然后再发包,我们通过修改report_id
的值可以越权访问别人的报告
挑战3:重置其它用户的密码
我们首先退出我们的登录界面。如下所示
我们点击忘记密码,发现发给我们的邮件验证码只有四位,所以我们可以考虑爆破这四位验证码
我们暂时使用我们这个账号进行爆破,如果我们这个账号可以爆破出来,那么其他的任意账户同样可以爆破出来,我们先随便输入一个验证码,并把密码输入进去
然后开始抓包,将抓到的包送入Intruder模块,在验证码处加上$$$$符号,然后设置payload
点击start attack
,开始爆破
我们发现,当重放次数过多之后,服务器会拒绝访问,这个时候我们将v3改成v2就可以解决问题
经过长时间的爆破,我们可以拿到验证码2033
挑战4:找到泄露其它用户敏感信息的API接口
点击Community进行抓包,重新发包,如下所示
获得所有发表评论的用户的信息,格式为json,造成敏感信息泄露
挑战5:找到泄露视频内部属性的API接口
我们找到视频页面,随机上传一个视频,如下所示
我们修改视频名字,如下所示
随机输入名字并进行抓包,放包,如下所示
所以/identity/api/v2/user/videos/6
这个api接口就是我们想要的,我们可以试着修改后面的数值,看看是否会给我们泄露其他视频的属性,发现是不会显示其他用户视频信息的,可能是在Authorization做了限制
挑战6:使用 “contact mechanic” 功能完成第7层DoS
点击Contact Mechanic
,随便填写一些内容,像挑战2一样
点击提交并进行抓包,送入repeater模块,我们将repeat_request_if_failed
改为true,并将number_of_repeats
改为较大的数字,如下所示
点击发送,得到如下界面,成功
挑战7:删除另一个用户的视频
和挑战5的步骤一样,找到修改video名称的界面并进行抓包,并送到重放界面,先用OPTIONS进行探测支持哪些协议
支持DELETE,我们使用DELETE协议删除视频,将id改成其他用户的ID
发现没有权限,我们尝试将user改成admin,如下所示
成功删除任意用户视频
挑战8:免费获得一件物品
我们首先进入shop页面,如下所示
我们点击购买,然后抓包,我们发送到repeater上,然后点击发送
我们发现我们的余额确实减少了10块钱,我们将协议方式改为GET,并在orders后面加上id号,然后再发送
我们可以看到对应订单的详情,我们复制相应的status,并将协议改为PUT,然后将status改为returned状态,然后发送
我们发现我们余额增加,实现免费购买一件物品
挑战9:将您的结余增加1000元或以上
同上,修改订单状态为delivered
,表示我们的订单已经发送,并把数量改成100
然后我们再把状态改为退款状态returned
,并重新发送
我们查看自己的余额,发现余额刷新了,证明成功
挑战10:更新内部视频属性
同挑战5,我们找到抓取修改视频名称的包,我们先点击发送包,如下所示
我们发现conversion_params
属性,我们尝试修改这个值,然后重发
发现对应属性成功被修改
挑战11:让crAPI发送一个HTTP调用到“www.baidu.com”并返回
同挑战6的数据包抓取方式,这里就不再赘述,这里我们使用dnslog.cn进行记录我们的dns解析记录,我们首先随机获取一个子域名,如下所示
我们将数据包下的mechanic_api
改成我们的子域名,然后发数据包
我们去dnslog.cn上刷新,出现下面界面,代表成功带出DNSlog
挑战12:想办法在不知道优惠券代码的情况下获得免费优惠券
这里我们采用nosql进行注入,首先我们找到优惠券界面,随意输入优惠券代码并进行抓包
我们输入{“$ne”:”xxxxxxxxxxx”}进行nosql注入,得到如下结果
说明已经成功获取优惠券
挑战13.找到一种通过修改数据库来兑换已经领取的优惠券的方法
白盒测试找源码吧,这个接口只能在源码中找到,测是测不出来的,相关接口是/workshop/api/shop/apply_coupon
我们首先在coupon界面抓包,修改url地址为对应接口地址,并把coupon_code
修改为万能密码,并增加数量参数amount
这里我失败了,正常的情况下应该是下面的情况
我也不知道是什么情况😇😇😇
挑战14:查找不为用户执行身份验证检查的接口
订单接口无身份验证可以随意访问数据/workshop/api/shop/orders/1
挑战15:找到伪造有效 JWT令牌的方法
首先获取jwt的公钥,我们访问.well-known/jwks.json
接口文件可以获得相关的公钥
将keys复制到jwt editor中进行编辑,我们new 一个rsa key,然后点击Copy Public Key as Pem
去Decoder选项卡对这个进行encode
再次回到Burp 主选项卡栏中 的 JWT Editor Keys选项卡,点击New SymmetricKey后Generate,将 k 属性的生成值替换为PEM Base64编码
然后在burp的请求中可以发现 json webtoken选项卡,在选择卡左下角处也可以看到对 json web token 的攻击选项
我们再次抓取dashboard的包,看看我们能否通过修改jwt进行越权访问别人的账户
我们先前已经注册一个abc@qq.com了,现在我们来试试能不能越权
成功越权,jwt使用成功
其他漏洞
增加一个商品
首先获取商品接口,我们还是通过抓包来实现,我们将请求方法改成POST,在请求体中添加商品的具体信息
{"name":"周俊霖","price":"100000.00","image_url":"images/seat.svg"} |
点击发送,如下所示
成功新增一个商品
支付漏洞
首先我们的初始余额是1060美元
我们现在购买一个商品,然后抓包,我们将数量改成负数,发现并没有对数字进行限制,我们可以发现余额惊奇的变多了
出现这个漏洞的原因是后端在进行计算时没有对传进来的数据进行二次校验,导致出现支付漏洞
总结
靶场加深了我对API安全的认识,有些漏洞在现实生产环境中仍然很普遍,同时,通过打靶场,加深了我对一个网站如何进行测试的理解,虽然有些漏洞比较偏,也比较难想,但是经过多多实践,还是可以熟能生巧的
这个靶场带给我的最大的惊喜还是jwt,它告诉了我关于jwt还可以使用bp进行破解,当然这个手法还需要后续的学习与理解,以前我都是直接通过脚本进行破解,没有直接用bp来的舒服,又多了一种新的姿势🤔🤔🤔