本文主要介绍api安全漏洞相关基础知识介绍和后七题的解题过程。
crapi是一个供车主注册和管理车辆的平台,是一个易受攻击的应用程序,crapi是一个用于学习和实践api安全性的api漏洞的集合。在这里可以遇到api安全的应用程序中的常见漏洞,基本包括OWASP API TOP 10的漏洞。比如失效的对象级别授权漏洞,失效的用户身份验证漏洞,过多的数据暴露漏洞,速率限制漏洞,失效的功能级别授权,批量分配,SSRF,注入以及未经身份验证的访问漏洞。
GitHub地址:https://github.com/OWASP/crAPI
环境搭建以及前七题的解题思路可以参考第一篇文章:https://xz.aliyun.com/t/11734
解题提示文档:https://github.com/OWASP/crAPI/blob/develop/docs/challenges.md
将客户端提供的数据(例如 JSON)绑定到数据模型,而无需基于白名单进行适当的属性筛选,通常会导致批量分配。无论是猜测对象属性、探索其他 API 端点、阅读文档或在请求负载中提供其他对象属性,攻击者都可以修改它们不被允许修改的对象属性。
Challenge 8 - Get an item for free
挑战 8 - 免费获得一件物品
通过返回发现商品的几种状态
修改订单编号,改为运输中即可
Challenge 9 Increase your balance by $1,000 or more -
挑战 9 将您的余额增加 1,000 美元或更多 -
将数量改为90
这样可以增加自己的余额。
Challenge 10 - Update internal video properties
挑战 10 - 更新内部视频属性
根据第五题的api 更改属性
SSRF 漏洞使攻击者可以从易受攻击的应用程序的后端服务器发送精心设计的请求。犯罪分子通常使用 SSRF 攻击来针对位于防火墙后面且无法从外部网络访问的内部系统。攻击者还可以利用 SSRF 访问通过被利用服务器的环回接口 (127.0.0.1) 提供的服务。
当攻击者完全或部分控制 Web 应用程序发送的请求时,就会出现 SSRF 漏洞。
成功的 SSRF 攻击通常会导致未经授权的操作或访问组织内的数据,无论是在易受攻击的应用程序本身还是在应用程序可以与之通信的其他后端系统中。在某些情况下,SSRF 漏洞可能允许攻击者执行任意命令执行。
Challenge 11 - Make crAPI send an HTTP call to "www.google.com" and return the HTTP response.
挑战 11 - 让 crAPI 向“www.google.com”发送 HTTP 调用并返回 HTTP 响应。
修改数据包为www.baidu.com 返回响应
与关系数据库不同,NoSQL 数据库不使用通用查询语言。NoSQL 查询语法是特定于产品的,查询是使用应用程序的编程语言编写的:PHP,JavaScript,Python,Java 等。这意味着成功的注入使攻击者不仅可以在数据库中执行命令,而且可以在应用程序本身中执行命令,这可能更加危险。
以下是 OWASP 对于 Nosql 注入的介绍:
NoSQL databases provide looser consistency restrictions than traditional SQL databases. By requiring fewer relational constraints and consistency checks, NoSQL databases often offer performance and scaling benefits. Yet these databases are still potentially vulnerable to injection attacks, even if they aren’t using the traditional SQL syntax. Because these NoSQL injection attacks may execute within a procedural language, rather than in the declarative SQL language, the potential impacts are greater than traditional SQL injection.
NoSQL database calls are written in the application’s programming language, a custom API call, or formatted according to a common convention (such as XML, JSON, LINQ, etc). Malicious input targeting those specifications may not trigger the primarily application sanitization checks. For example, filtering out common HTML special characters such as < > & ; will not prevent attacks against a JSON API, where special characters include / { } :.
Challenge 12 - Find a way to get free coupons without knowing the coupon code.
挑战 12 - 想办法在不知道优惠券代码的情况下获得免费优惠券。
想办法在不知道优惠券代码的情况下获得免费优惠券。
首先获取提交优惠券的流量包
利用burp的暴力破解功能进行爆破攻击
结束发现返回的状态码全都是500
仔细查看请求数据包发现问题为URL编码
将payloads最下面的Payload Encoding打钩
再次进行爆破尝试发现部分返回422
查看返回包发现提示为无效字符,
将最开始的流量包的引号删除
再次尝试攻击
成功
返回burp进行重放测试
完成!
SQL注入
通过修改数据库找到兑换您已领取的优惠券的方法
确定存在注入的api如下图所示
经过一番尝试没有发现可以注入的地方,疑惑了一会开始查找问题出在了哪里
发现了最新版本v1.1.2的更新时间为5月27号
查看提交日期发现SQL注入的相关内容是在八月二号
也就是说虽然源码提交了SQL注入的相关内容,但是最新版并没有更新这一点,这也就是为什么虽然找到了注入点但是怎么尝试都注入不成功的原因
Challenge 14 - Find an endpoint that does not perform authentication checks for a user.
挑战 14 - 查找不对用户执行身份验证检查的端点。
查找不对用户执行身份验证检查的端点。
修改任意都可以发送成功
在解题帮助文档的最后作者提示有两个秘密挑战
我在解题过程中发现存在JWT,记录如下
JWT是JSON web Token的缩写,它是为了在网络应用环境间传递声明而执行的一种基于JSON的开放式标准,该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(场景。JWT的声明一般被用在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的业务逻辑所必须声明信息,该token也可被直接用于认证,也可用作加密。
将数据包中的 Authorization 复制到https://jwt.io/ 的编码框中
使用工具JWT_Tool进行攻击
经过多次尝试发现 crapi 是正确的
返回到JWT的编码框中,将crapi填入。
将重新获取到的Authorization 替换到数据包中进行重放测试。
成功!!!