如何hack api并进行模糊测试

admin 2023年1月9日21:20:54评论17 views字数 2290阅读7分38秒阅读模式

一篇如何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
如何hack api并进行模糊测试

授权(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并进行模糊测试

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月9日21:20:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何hack api并进行模糊测试https://cn-sec.com/archives/1508061.html

发表评论

匿名网友 填写信息