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 漏洞以及打靶思路进行介绍。

0x01 Broken Object Level Authorization
失效的对象级别授权
挑战1:访问其它用户车辆的详细信息
1、首先找到泄露其它用户的车辆 id 的接口
在社区论坛处,可以获取所有评论者的详细信息


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

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

挑战2:访问其它用户的机械报告
1、发送维修报告请求

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

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

0x02 Broken User Authentication
失效的用户身份验证
挑战3:重置其它用户的密码
1、找到可以查看其它用户的 email 的接口

2、登录处可以重置密码

抓包分析
多重放几次,发现重放多次会有限制

3、此时将 v3 改为 v1或者 v2 试试,发现 v2 可以无限重放
使用 v2 提供的接口,可以爆破四位数的 otp

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

0x03 Excessive Data Exposure
过多的数据暴露
挑战4:找到泄露其它用户敏感信息的API接口
1、敏感信息泄露接口
/community/api/v2/community/posts/recent

挑战5:找到泄露视频内部属性的API接口
1、找到修改上传的视频名称的接口
/identity/api/v2/user/videos/30

可以看到视频内部相关的属性。
0x04 Lack of Resources & Rate Limiting
资源缺乏和速率限制
挑战6:使用 “contact mechanic” 功能完成第7层DoS
1、 找到 contact mechanic 功能

2、尝试修改参数接口请求中的参数
将 repeat_request_if_failed 改为 true,将 number_of_repeats 改为较大的数字,重放,发现 DoS 攻击

、0x05 Broken Function Level Authorization
失效的功能级别授权
挑战7:删除另一个用户的视频
1、将 put 请求方式改为其它的,比如 delete
发现存在 DELETE 请求方式,但是该接口需要 admin 权限

2、尝试将接口中的 user 改为 admin
利用 REST api 的可预测特性找到一个管理接口来删除视频

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

发现可以删除其他用户的视频。
0x06 Mass Assignment
批量分配 / 大量赋值 / 自动绑定漏洞
将客户端提供的数据(例如 JSON )绑定到数据模型,而没有基于 allowlist 进行适当的属性过滤,通常会导致 Mass Assignment
。猜测对象属性、探索其他 API 端点、阅读文档或在请求有效负载中提供额外的对象属性,都允许攻击者修改他们不应该修改的对象属性。
挑战8:免费获得一件物品
1、增加订单功能接口

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

3、将 GET 请求方式改为 PUT
发现可以请求成功,继续修改参数,发现可以修改数量和状态

4、尝试修改 status 属性的值

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

挑战9:将您的结余增加1000元或以上
1、修改订单中的数量为100,status改为 delivered

2、再修改 status 为 returned

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

挑战10:更新内部视频属性
1、在修改视频名称的时候,尝试增加其它的参数
发现可以修改 conversion_params 的属性值

0x07 SSRF
挑战11:让crAPI发送一个HTTP调用到“www.baidu.com”并返回HTTP响应
1、找到联系机械工的接口
将 mechanic_api 的值改为http://baidu.com
,发现服务器会发起请求,并返回结果

2、也可以使用 dnslog 验证

3、查看 dnslog 结果

0x08 NoSQl Injection
挑战12:想办法在不知道优惠券代码的情况下获得免费优惠券
1、找到验证优惠券的接口,使用 nosql 注入的语句尝试
尝试使用{"$ne":"xxxxxxxxxxxx"
(备注:$ne
表示不等于)

2、得到一个优惠券:TRAC075
0x09 SQL Injection
挑战13:通过修改数据库找到一种方法来兑换您已经认领的优惠券
由于本文使用的是 docker 搭建的,查看靶场的版本不是最新的,所以这个注入漏洞没有复现。在最新的源码中可以看到是存在 sql 注入的,此关就不做说明了。
最新版本源码存在 sql注入的代码:

0x0A Unauthenticated Access
未经身份验证的访问
挑战14:查找不为用户执行身份验证检查的接口
1、查看机械工报告的接口,不需要进行身份验证就可以直接访问

0x0B two secret challenges
官方文档提到:“crAPI中还有两个秘密挑战,它们非常复杂,目前我们不分享它们的细节,只知道它们真的很酷。” 更多的漏洞,大家可以自行探索。
0x0C 其它漏洞
除了以上漏洞,其它漏洞大家也可以多去挖掘,这边附上几个漏洞,供大家参考
增加一个商品
1、获取商品列表接口

2、尝试将 GET 请求方法改为 POST
发现需要传值,构造相应的参数之后,即可请求成功

成功之后,就上传了一个商品
支付漏洞
1、查询余额

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

3、发现金额增加了

JWT 密钥爆破
1、使用 JWT_Tool 对 jwt 进行爆破
得到密钥为 crapi

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

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

0x0D 结语
本文分享了 crAPI 靶场的相关漏洞以及解题思路,里面覆盖了大部分的 OWASP API top 10 的安全漏洞。其实,打靶的过程也是学习的过程,相信对
API 安全漏洞的研究会有一些帮助。
资料分享
最后,给大家分享一波网络安全学习资料:
我们作为一个小白想转行网络安全岗位,或者是有一定基础想进一步深化学习,却发现不知从何下手。其实如何选择网络安全学习方向,如何进行实战与理论的结合并不难,找准正确方式很重要。
接下来我将从成长路线开始一步步带大家揭开网安的神秘面纱。
1.成长路线图
共可以分为:
一、基础阶段
二、渗透阶段
三、安全管理
四、提升阶段
同时每个成长路线对应的板块都有配套的视频提供:
网络安全面试题
最后就是大家最关心的网络安全面试题板块
所有资料共87.9G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方CSDN官方合作二维码免费领取(如遇扫码问题,可以在评论区留言领取哦)~

接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期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】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。
