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

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-compose) ,docker
启动命令如下:

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

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

![1667745815_6367c817222cf692a3b4d.png!small?1667745815681](https://img-
blog.csdnimg.cn/img_convert/e0f79da68fe9655f6fba311a506eb21b.jpeg)

0x01 Broken Object Level Authorization

失效的对象级别授权

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

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

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

![1667745847_6367c8379693a4eacde12.png!small?1667745848073](https://img-
blog.csdnimg.cn/img_convert/b8af05d9229b09bcb9f2b1cc224b5861.jpeg)

![1667745864_6367c8482497ca3663a0f.png!small?1667745864758](https://img-
blog.csdnimg.cn/img_convert/3917bbff012c90a7d1bfdd79f23d544e.jpeg)

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

![1667745906_6367c8726c3011222a9d8.png!small?1667745907068](https://img-
blog.csdnimg.cn/img_convert/3ba646d56376c7fa0f60231323eb52a3.jpeg)

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

![1667745922_6367c882caeda99c2f652.png!small?1667745923432](https://img-
blog.csdnimg.cn/img_convert/ea0b0a1ea63dad46b6fa39fb79f9ad8e.jpeg)

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

1、发送维修报告请求

![1667745940_6367c8946d9c930c11b94.png!small?1667745940927](https://img-
blog.csdnimg.cn/img_convert/25ad72df9d2fba8e7968bf2a2dc1d001.jpeg)

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

![1667745958_6367c8a642031ac3a75a2.png!small?1667745960065](https://img-
blog.csdnimg.cn/img_convert/520579305b02dd85cb5f027a979832c8.jpeg)

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

![1667745973_6367c8b5b719a31822de8.png!small?1667745974373](https://img-
blog.csdnimg.cn/img_convert/9aa049ea141c3881b53b57d524b07d45.jpeg)

0x02 Broken User Authentication

失效的用户身份验证

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

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

![1667746002_6367c8d24a08850be236f.png!small?1667746003330](https://img-
blog.csdnimg.cn/img_convert/ee4fe736914737696ca98840b4a47984.jpeg)

2、登录处可以重置密码

![1667746024_6367c8e8092329bd51c74.png!small?1667746024509](https://img-
blog.csdnimg.cn/img_convert/379288e26a03c9e0a65363d9d8bc22fa.jpeg)

抓包分析![1667746041_6367c8f9d52b272d10d26.png!small?1667746042577](https://img-
blog.csdnimg.cn/img_convert/c09b899663bcb7edb87053ac33d06294.jpeg)

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

![1667746066_6367c912aa9448960a33a.png!small?1667746067344](https://img-
blog.csdnimg.cn/img_convert/78109b2f7bbfd630eef406c7f37f9823.jpeg)

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

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

![1667746086_6367c9269b08e5a7a39bb.png!small?1667746087229](https://img-
blog.csdnimg.cn/img_convert/5211164d85eb4ee54ec4ab5dd20b63e5.jpeg)

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

![1667746104_6367c9380705e3e016a94.png!small?1667746104645](https://img-
blog.csdnimg.cn/img_convert/98a4352e02355f8f8696a0ca869f18c7.jpeg)

0x03 Excessive Data Exposure

过多的数据暴露

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

1、敏感信息泄露接口

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

![1667746127_6367c94f06800b7024ebc.png!small?1667746128031](https://img-
blog.csdnimg.cn/img_convert/9ccf9c740295d3fff7b6fd49f91a71a5.jpeg)

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

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

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

![1667746146_6367c96220f39a4c6851c.png!small?1667746147518](https://img-
blog.csdnimg.cn/img_convert/332e8e0ccc4f15f55872640db56094bc.jpeg)

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

0x04 Lack of Resources & Rate Limiting

资源缺乏和速率限制

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

1、 找到 contact mechanic 功能

![1667746173_6367c97d1ee150331c334.png!small?1667746173609](https://img-
blog.csdnimg.cn/img_convert/bb5f87a25afcc92521ae191efb565610.jpeg)

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

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

![1667746200_6367c99841588d7aacaed.png!small?1667746200886](https://img-
blog.csdnimg.cn/img_convert/6433223fcf43b4b8f9617f2e768612e2.jpeg)

、0x05 Broken Function Level Authorization

失效的功能级别授权

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

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

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

![1667746221_6367c9ad98e121c91410d.png!small?1667746222270](https://img-
blog.csdnimg.cn/img_convert/3ca83c77536e7552b4bd0271dd6ad060.jpeg)

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

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

![1667746236_6367c9bccbee7745a7060.png!small?1667746237940](https://img-
blog.csdnimg.cn/img_convert/10d427d876753db0a12f7659d6b36d42.jpeg)

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

![1667746254_6367c9ce59d8f8bb7d4c3.png!small?1667746255495](https://img-
blog.csdnimg.cn/img_convert/57dd6967cde996084dd7fd27e901a991.jpeg)

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

0x06 Mass Assignment

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

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

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

1、增加订单功能接口

![1667746274_6367c9e280785b902db8b.png!small?1667746275611](https://img-
blog.csdnimg.cn/img_convert/32c7489b70fc74734c060c81de73940d.jpeg)

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

![1667746295_6367c9f7ed9f3e85ee704.png!small?1667746296574](https://img-
blog.csdnimg.cn/img_convert/3a93dc4b0b0ce5fec4e587d0f92419bb.jpeg)

3、将 GET 请求方式改为 PUT

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

![1667746316_6367ca0c7eee4defac776.png!small?1667746317484](https://img-
blog.csdnimg.cn/img_convert/7de08ea4ec3f8c532716811b943cbfcb.jpeg)

4、尝试修改 status 属性的值

![1667746338_6367ca2237a5cee84c395.png!small?1667746339110](https://img-
blog.csdnimg.cn/img_convert/760b9d04319b7438bac79bdcde698461.jpeg)

5、将 status 修改为 retured

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

![1667746354_6367ca32ac9d4dce41f81.png!small?1667746355373](https://img-
blog.csdnimg.cn/img_convert/bf3cb7f874913b5b14bf01ad0b3f0f96.jpeg)

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

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

![1667746375_6367ca47a6da35a1a8ccc.png!small?1667746376921](https://img-
blog.csdnimg.cn/img_convert/a0d3486bf9e3e73e710818dd95224e35.jpeg)

2、再修改 status 为 returned

![1667746396_6367ca5c4b64eee587aae.png!small?1667746396954](https://img-
blog.csdnimg.cn/img_convert/9b7f06e400db488e91e669c0d9337fe9.jpeg)

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

![1667746416_6367ca704278fc5f1362c.png!small?1667746416747](https://img-
blog.csdnimg.cn/img_convert/6e1b715991cc2a70e70bf3cf7caf32aa.jpeg)

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

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

发现可以修改 conversion_params 的属性值

![1667746431_6367ca7f818e2cee40221.png!small?1667746432205](https://img-
blog.csdnimg.cn/img_convert/fe02306d91ce89196ade01a28870a292.jpeg)

0x07 SSRF

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

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

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

![1667746453_6367ca9582d6fcdbe9293.png!small?1667746454403](https://img-
blog.csdnimg.cn/img_convert/6705a2ab69c509e019c06d57588d9ac4.jpeg)

2、也可以使用 dnslog 验证

![1667746471_6367caa7857bd2c83a7d9.png!small?1667746472779](https://img-
blog.csdnimg.cn/img_convert/7becfbfe68a7db4179b6fa9c83ce5123.jpeg)

3、查看 dnslog 结果

![1667746516_6367cad460c3d9dfba619.png!small?1667746517228](https://img-
blog.csdnimg.cn/img_convert/e35bc35ca0b3359769180dd3b0f99ace.jpeg)

0x08 NoSQl Injection

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

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

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

![1667746535_6367cae72f63157b454ca.png!small?1667746535809](https://img-
blog.csdnimg.cn/img_convert/8dc5f62bbda08cde5001cd452d419476.jpeg)

2、得到一个优惠券:TRAC075

0x09 SQL Injection

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

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

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

![1667746556_6367cafc711b614c625b6.png!small?1667746557006](https://img-
blog.csdnimg.cn/img_convert/17654d45ffc10dd5a262da73e801ba68.jpeg)

0x0A Unauthenticated Access

未经身份验证的访问

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

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

![1667746575_6367cb0f55ebb0407de0b.png!small?1667746576001](https://img-
blog.csdnimg.cn/img_convert/fb2c274eef472e94638695be6f456ed3.jpeg)

0x0B two secret challenges

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

0x0C 其它漏洞

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

增加一个商品

1、获取商品列表接口

![1667746597_6367cb25a288b556a1d50.png!small?1667746598313](https://img-
blog.csdnimg.cn/img_convert/1bd415f575dfb39b2b8277ba805c4efd.jpeg)

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

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

![1667746617_6367cb39776b2c296d53a.png!small?1667746618509](https://img-
blog.csdnimg.cn/img_convert/1ce1ac7ac12ab5176a93ec3833d17697.jpeg)

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

支付漏洞

1、查询余额

![1667746631_6367cb47d9253d800c967.png!small?1667746632325](https://img-
blog.csdnimg.cn/img_convert/df84b767c62ea03899316a8371ec1248.jpeg)

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

![1667746647_6367cb57867ffb7bda61a.png!small?1667746648188](https://img-
blog.csdnimg.cn/img_convert/c9d5fd76272a74f32410a0d3fc632791.jpeg)

3、发现金额增加了

![1667746660_6367cb648932027e30168.png!small?1667746661049](https://img-
blog.csdnimg.cn/img_convert/3b38ab6082b42751d0881a1ce51ff35d.jpeg)

JWT 密钥爆破

1、使用 JWT_Tool 对 jwt 进行爆破

得到密钥为 crapi

![1667746679_6367cb77b471d66aed1a8.png!small?1667746680455](https://img-
blog.csdnimg.cn/img_convert/69d470d07316fad3a20e11951cdadded.jpeg)

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

![1667746694_6367cb86577423971f28f.png!small?1667746694955](https://img-
blog.csdnimg.cn/img_convert/8548f58b6d545f3afab84046eb49a1e6.jpeg)

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

![1667746709_6367cb95c32dc9a388725.png!small?1667746710408](https://img-
blog.csdnimg.cn/img_convert/c682f3a648bd5473fee5d6829afe66a8.jpeg)

0x0D 结语

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

资料分享

最后,给大家分享一波网络安全学习资料:

我们作为一个小白想转行网络安全岗位,或者是有一定基础想进一步深化学习,却发现不知从何下手。其实如何选择网络安全学习方向,如何进行实战与理论的结合并不难,找准正确方式很重要。

接下来我将从成长路线开始一步步带大家揭开网安的神秘面纱。

1.成长路线图

共可以分为:

一、基础阶段

二、渗透阶段

三、安全管理

四、提升阶段

在这里插入图片描述

同时每个成长路线对应的板块都有配套的视频提供:
在这里插入图片描述

网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述
所有资料共87.9G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方CSDN官方合作二维码免费领取(如遇扫码问题,可以在评论区留言领取哦)~

![](https://img-
blog.csdnimg.cn/img_convert/39f65bf42a6d8d350d2ac16c9a97925f.png)

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值