白帽故事 · 2024年4月14日

五种用来挖掘API端点的方法

简介

在渗透目标时,最值得测试的部分莫过于 API,API 是动态的,它们比应用程序的其它部分更新的更加频繁,并且负责许多后端繁重的工作。在现代应用程序中,我们通常会看到 REST API,当然也会有其它形式,如 GraphQL 甚至 SOAP。

当第一次接触目标时,通常需要做大量的前期研究,以了解其主要功能以及‘幕后’的工作方式,例如,如果要渗透一个租赁应用程序,那么一开始最好阅读有关该公司的服务(租赁、销售、支持、折扣等),在了解目标服务后,寻找其应用程序中的相应功能然后尝试渗透它们。

方法一:API文档

如果渗透目标的应用程序提供了可用的 API 文档,如 Swagger 或 WSDL 文件。而且文档提供了公开访问或曾经提供过公开访问,那么阅读API文档无疑是最好的手段,我们可以通过API文档了解到:

  • 特定端点希望要求什么类型的数据(整数/字符串、JSON/XML、POST/PUT/GET 等)
  • 需要发送的标头有哪些
  • 从请求中会得到哪些响应
  • 特定端点所需的身份验证级别

Request:

image-20240414100338161

Response:

image-20240414100427482

方法二:公开源信息(OSINT)收集

开发人员不断开发 API,并可能使用不同的工具来构建、测试和记录不同版本的 API,那么我们就有可能发现应用程序 API 的旧版本,那么这些旧版本可能就不如当前生产版本的安全性那么高了!

Google Dorking

结合使用 Google 的高级搜索选项和一些 API 关键字,通过快速的 Google Dorking 搜索可以为我们带来:

  • 与 API 相关的目标子域
  • 目标 API 文档页面
  • API 端点——旧版本与当前版本

image-20240414100957381

Google Dorking语法举例:

site:target.com inurl:”/v1"
site:target.com inurl:”/api"
site:target.com inurl:”/graphql"
site:target.com intitle:”api*”

Wayback

WaybackMachine 是用于发现 API 端点并同时获取一些‘秘密’的最出色工具之一,通过它我们可以在特定日期查看目标页面,更加厉害的是,我们还可以在 GET 请求中获取 URL 列表,如下图:

image-20240414101233142

只需搜索目标的域名并过滤“api”,我们就能够得到了一些 API 端点,甚至包含 GraphQL。

如果查看公司的更多子域,有可能会看到更加多的 API 端点,在这些端点中有时甚至能够找到用户名、Token、身份验证密钥和 JWT 等信息:

image-20240414101423164

使用这些找到的信息,可以测试具有不同用户权限授权的API端点,另外,强烈建议将GAU或Waymore集成到你的‘侦察;自动化工具中,以便找出更多API端点。

Postman

这是开发人员测试 API 最常用的工具之一,无需前端界面就可以发送请求,而且比使用 Curl 方便很多。

image-20240414101619511

如果运气不错,能够拿到目标的Postman Collection信息,那可能要比找到官方 API 文档还要棒,这些信息可以帮助我们了解更多有关应用程序内部环境和目标底层核心的信息,其中最好的部分之一就是具有查询后端的高权限凭据信息!

Github

如果目标有一个可以公开访问的 GitHub 存储库,那么花一些时间研究应用程序的源代码总归是一个不错的主意,通过一些关键字,我们将最大限度地找到 API 端点及其工作原理的详细说明。一些常用的关键字:

  • /v1
  • /api
  • apikey
  • api_key
  • apidocs
  • api_secret
  • x-api-key
  • /graphql

方法三:应用程序的HTML与JS

除了查看页面源代码和F12大法外,还可以利用一些插件或工具帮我们自动化寻找API端点信息,比如:Findsomething(插件)、Katana等。

通过查看 HTML 和 JS信息,有时可以找到大量隐藏的API端点(影子API),影子 API 一般很少暴露,因此它们往往具有更高的潜在漏洞!

方法四:APP应用分析

如果目标有移动应用程序(APP),那么就有可能提供一些专门针对手机的功能,比如通过 GPS 获取精确位置。那么在这种情况下,就意味着 Web 应用程序的 Javascript 中存在的 API 与 APK 文件中存在的 API 端点可能会有所不同。

通过反编译APK(Jadx、JEB2等)或者一些移动APP的自动化平台(APKPure、MobSF等),可以方便的收集到在APP中的一些硬编码、URL、子域、API端点等。

image-20240414103944423

方法五:主动扫描与Fuzz

对于API端点Fuzz,常用的工具包括 Burp Intruder、FFUF、GoBuster、Arjun、Kiterunner 等,当然我们也可以打造属于自己的模糊测试器。

image-20240414103231108

Kiterunner 命令示例:

./kr scan https://target.com -w ~/wordlists/routes-large.json

拥有强大的字典是Fuzz成功的关键,以下是一些不错的字典:

SecLists

Assetnote

FuzzDB

另外,我们也可以利用强大的ChatGPT为我们生成一些字典组合,比如“汽车租赁”的组合字典:

image-20240414103653506

更多API案例

希望以上内容能对你有所帮助。