一篇如何hack api并进行模糊测试的笔记
前言
在对api进行漏洞挖掘之前,首先得要理解api本身
本文将按照以下结构来叙述:
-
HTTP Headers 和 Cookies -
Content-Type -
API种类 -
UUIDs 和 numeric ids -
Responses 和 Error codes
HTTP Headers 和 Cookies
在api中,授权可以以cookie或报头的形式处理。
当使用cookie处理时,有一个类似如下的cookie/cookies:
Cookie: SESSION-ID=123123123123ASDBUSD331231,auth=bUIBWD12313212+bbis7831BD;
当使用HTTP头处理时,有类似如下的headers:
X-API-ID: AUIB123712bDCUJJDIUD8182
TOKEN: 789812bihBSIUDBIBHUDU782
Authorization: Bearer 67823bjS78923jhsbvd69923hbdd
授权(Authorization) HTTP header 中存在的令牌可以处理当前用户的会话。删除该授权标头(header),请求会提供 401 未授权或 403 禁止错误。
Content-Type
现在请求主体大多包含 JSON 格式的数据,但一些开发人员也使用 urlencoded 格式。
如果为一个应用程序指定“Content-Type: text/html”,但是该应用程序将请求中的主体处理为JSON,那么请求将很难从服务器得到一些响应,并将给出400 Bad Request error 错误,因为正确的请求为:“Content-Type: application/ JSON”。
API种类
常见的 API 分为三种:REST、GraphQL 和 SOAP.
SOAP API 非常古老,并且与 Content-Type: application/xml 一起使用,因此当处理 SOAP API 时,请求正文有很多 XML。
REST API 仍在使用并且非常流行。他们可以接受许多 Content-Type 值,但大多数开发人员通过 urlencoded 和 json 格式发送数据。请求通过 GET、POST、PUT、DELETE 等方法发送。
GraphQL API 也很流行。请求主要通过 POST 方法发送,有时也通过 GET 方法发送。两个基本操作是查询和变更(mutations)。graphql api 中使用的接口主要是 /graphql
,但也可以是 /api/graphql
、/api/voyager
、/graph
或其他。
UUIDs 和 Numeric IDs
在处理 API 时,会看到 user_id、profile_id、image_id、video_id、file_id、plan_id、isAdmin、invoice_id 等参数。
这些参数的数据类型可以是字符串、整数、布尔值、UUID 等。
了解 id 的格式很重要。它的长度,它是按顺序或随机递增的。它是固定的还是在一段时间后发生变化。这些事情对于了解攻击者重现漏洞的难易程度很重要,并且会影响漏洞的严重性。
现在许多应用程序都在使用 UUID,因为它们有 32 个字符长,随机且不连续。这降低了轻易猜测这些值的可能性。
(备注:如何证明包含UUID的为有效漏洞,有兴趣的可以去搜搜,有大佬专门分享过)
Response 和 Error Codes
响应包含状态代码,它们反映了请求的成功和失败。200 表示正常,403 表示禁止,401 表示未授权,404 表示未找到,500 表示服务器错误等
很多时候出现错误代码,如 ERROR-10032、ERROR-10035 等,这些错误是由开发人员造成的。浏览应用程序或 API 的文档,并查看错误部分以了解这些特殊代码。
在哪进行fuzz
在 IDORs、XSS、SQLi、SSRF 等漏洞的各个位置进行模糊测试。
针对一些字符串,对 XSS 进行模糊测试;
针对一些id,对 IDOR 和业务逻辑错误进行模糊测试
针对像url、redir等参数,用于开放重定向和 SSRF 的模糊测试。
针对布尔值,将true改为false,将0改为1,-1,null,注意应用程序的行为
如何进行模糊测试
创建两个账户,先使用Burpsuite Repeater。从 HTTP 历史记录或拦截器中获取请求并将其发送到 Repeater。手动测试一些值并检查响应代码、请求中数据的格式以及各种标头。
使用到比较大的字典的时候,可以考虑使用ffuf:
ffuf -w numeric-six-digit.txt -u https://api.redacted.com/v1/user/invoices/FUZZ -fc 401,403
或者:
ffuf -w passwords.txt -H 'Content-Type:application/json' -d '{"username:admin","password":FUZZ}' -X POST -u https://redacted.com/login -fc 401 -mc 200,302
可以使用 ffuf 对任何内容进行模糊测试,包括子域、目录、http 标头、方法等等。模糊测试从放置 FUZZ 关键字的地方开始。
ffuf -w users.txt:FUZZ1 -w passwords.txt:FUZZ2 -d username=FUZZ1&password=FUZZ2 -X POST -u https://redacted.com/signin -fc 401 -mc 20
原文始发于微信公众号(迪哥讲事):如何hack api并进行模糊测试
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论