发现 API 的 5 种方法

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

当我们第一次接近目标时,我们需要做大量的研究,以了解其主要功能以及它们在幕后的工作方式。当然,我们总是建议花一些时间阅读有关目标及其服务的信息。例如,如果我们要入侵汽车租赁应用程序,那么一开始最好阅读有关该公司的服务(租赁、销售、支持、折扣等)。了解了目标的服务后,我们将寻找其应用程序中反映的功能并尝试破解它们。

为什么要使用特殊的 API 侦察方法而不仅仅是使用应用程序?

需要强调的是,“点击应用显示的每个按钮”是一种很好的做法。理解函数的最简单方法是简单地使用它并分析我们得到的响应。

然而,屏幕上的按钮并不总是包含应用程序包含的全部 API。我们需要假设我们只看到 API 的部分内容,主要有三个原因:

  • 我们不知道具有不同级别权限的用户是否拥有比我们更多的 API

  • 可能存在一些未记录的 API,开发人员尚未为其创建 Web 界面

  • 可能存在开发人员删除了其 Web 界面的旧 API,但仍可在后端运行

进行彻底的 API 侦察的另一个好理由是,这是了解应用程序底层和核心并同时揭露秘密的好方法

1. API 文档

并非总是如此,但在许多情况下,我们攻击的是运行产品(应用程序)的目标,该产品有其 API 的可用文档,如 Swagger 或 WSDL 文件。通常,文档是为了方便其他想要将目标 API 集成到其应用程序中的开发人员使用而存在的。但有时,文档会公开访问,除了过度曝光之外没有任何理由。

无论如何,这是非常有用的信息。它不仅映射了主应用程序的 API 端点,还解释了 API 本身的功能:

  • 特定端点希望获取什么类型的数据(整数/字符串、JSON/XML、POST/PUT/GET 等)

  • 需要发送的标头

  • 我们应该从请求中得到的响应

  • 特定端点所需的身份验证级别

图片

Uber 的 API 文档 — 请求和响应的示例

在上面的例子中,我们可以看到 Uber 如何为其他开发人员提供其 API 文档。注意请求中的不同标头,其中包括一些参数,如授权码、客户端 ID 和客户端密钥。这些参数对于正确执行 API 可能至关重要,文档对此提供了很好的解释。

使用应用程序 API 文档的另一种方法是查找其 Swagger/WSDL 文件。我们不仅可以阅读它们来了解 API 结构,还可以将这些文件加载到 Postman 并开始使用它们!

并非每个应用程序都具有它,但查找和阅读文档可以节省我们的时间并提供有关该应用程序的几乎所有问题的答案。

#2——API OSINT 研究

正如我们前面提到的,API 是应用程序中非常动态的一部分,并且它会不时发生变化。这意味着两件重要的事情:

  • 开发人员不断开发 API,并可能使用不同的工具来构建、测试和记录不同版本的 API

  • 我们很有可能发现应用程序 API 的旧版本,而且它们可能不如当前生产版本的安全性高!

让我们来讨论一些我们可以轻松使用并快速获得结果的 OSINT 工具。

当我们接近目标时,首先要做的事情之一就是结合使用 Google 的高级搜索选项和一些 API 指示性关键字。快速的 Google dorking 搜索可能会给我们带来:

  • 与 API 相关的目标子域名

  • 目标的 API 文档页面

  • API 端点——旧版本和当前版本

以下是有关xxx的一些结果示例:

图片

这个简单的搜索当然不能映射xxx的整个 API 表面,但是它为我们提供了更多包含其 API 的公司子域的线索。

一些更有用的搜索表单:

  • site:target.com inurl:”/v1”

  • 站点:target.com inurl:“/api”

  • site:target.com inurl:”/graphql”

  • 站点:target.com 标题:“api*‘

WaybackMachine 是用于发现 API 端点并同时获取一些秘密的最出色的工具之一。我们都知道,通过在那里搜索 URL,我们可以在特定日期查看目标页面。神奇的是,我们还可以在 GET 请求中获取 URL 列表。请注意下图:

图片

只需搜索公司的域名并过滤工作“api”,我们就得到了一些 API 端点,甚至包含 GraphQL。

如果我们查看公司的更多子域,我们可能会看到越来越多的 API 端点。在许多情况下,我能够在 Wayback 中找到用户名、令牌、身份验证密钥和 JWT 等凭证。

图片

在 WaybackMachine 中找到了有效的用户令牌

使用找到的这些凭据,我有时可以测试具有不同用户权限的后身份验证 API 端点。

此外,建议在您的侦察自动化中集成GAU或Waymore以拉取更多 API 端点。

GitHub

情况并非总是如此,但如果您的目标有一个您可以访问的 GitHub 存储库,那么花一些时间研究应用程序的代码总是一个好主意。通过几个关键字,我们将最大限度地找到 API 端点及其工作原理的详细说明。

API的一些常见关键字:

  • /v1

  • /api

  • apikey

  • api_key

  • apidocs

  • api_secret

  • x-api-密钥

  • /graphql

与 Postman 和 WaybackMachine 一样,在 GitHub 中我们也有机会找到一些可能对下一步合作有用的秘密和凭证。

#3 — 应用程序的 HTML 和 Javascript

为了将 API 请求从前端发送到后端,前端应用程序使用 Javascript 进行 XHR/AJAX 调用。这意味着 API 端点本身应该在客户端源代码中提及。在 FireFox 中,如果我们打开 DevTools(F12)并打开“调试器”选项卡(或 Chrome 中的“源”选项卡),我们将看到目标的地址和一个指向下方的小箭头。单击小箭头,我们将获得前端的资源,包括 Javascript 文件。

图片

TryHackMe 的 Javascript 文件

找到 Javascript 文件后,我们通常会得到一段压缩后的代码,没有新行和空格。这样做是为了提高用户体验的性能。在这种情况下,我们可以使用 JS 美化器,比如这个。之后,只需将代码复制到你的代码编辑器(如 VSCode 或 Sublime)并开始搜索 API 请求。

要在代码中搜索 API 调用,我们首先需要了解应用程序中 API 调用的结构。不要犹豫,花点时间阅读您看到的不同函数和变量。搜索关键字,如API、v1、v2、用户 和其他与 API 相关的常用词。另一件事是搜索指示向后端发送请求的 HTTP 方法。

此外,如果我们想要一个自动化工具,我们可以使用Katana。这是一个很好的爬虫,有很多不同的标志可以添加,以便根据我们的目标进行定制。Katana 最重要的功能之一是 Javascript 解析。

4. 主动扫描——模糊测试

到目前为止,我们仅讨论了丰富 API 界面的被动方法,尽量减少与目标本身的接触。被动操作仍然使我们能够发现后端存在的许多甚至大多数 API 端点。但是,当存在不应暴露给我们正在干扰的应用程序的 API 端点时会发生什么?我说的不是影子 API,而是存在于后端的其他端点,这些端点应该为另一个应用程序提供服务,例如内部应用程序或员工应用程序。

例如,当一家公司开发一些前端应用程序(Web 和移动)并从其中一个后端(api.target.com)获取数据时,这种情况就很有意义,例如一个面板供客户使用,另一个面板供经理使用。

模糊测试器

如今,有许多工具可以通过模糊测试很好地发现 API。对于带有端点列表的简单 GET 请求,我们始终可以使用 Burp Intruder、ffuf、GoBuster、Kiterunner等工具,甚至可以构建我们自己的模糊测试器。在大多数情况下,我发现ffuf和 Kiterunner是出色的工具,不仅在速度方面,而且还具有按大小、状态代码、单词等进行过滤的有用功能。具体到 Kiterunner,结合 Assetnote 中的相关列表,该工具非常适合现代 Web 应用程序(NodeJS、Flask、Rails 等)。

图片

只需一个命令,您就可以很好地了解目标的 API 图:

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

5. 移动端

假设我们的目标是一家快递公司。它有一个网络应用程序,我们可以在其中下订单、付款,甚至使用其他一些功能。但如果快递公司也有移动应用程序,那么可能会有一些专门针对手机的功能,比如通过 GPS 获取准确位置。

在这种情况下,这可能意味着Web 应用程序的 Javascript 中存在的 API 与 APK 文件上存在的 API 端点不同。

移动应用程序渗透测试是一个非常不同的主题,因此我们不会在本文中讨论太多细节,但我们可以使用 JADX 和 MobSF 等静态分析工具来获取驻留在 APK 中的一些硬编码 API 端点。

有一些镜像网站,例如APKPure,我们可以将 APK 下载到我们的机器上,以便使用分析工具打开它。始终建议使用静态和动态分析来映射应用程序发送的每个调用,但首先使用 MobSF 等工具进行初步了解也是非常有效的。

MobSF 是一个自动分析工具,它获取 APK 文件并生成有关文件内部情况的报告:

图片

 

     免费 获 取 网 安 资 料:

 申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/910222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Netty 如何自动探测内存泄露的发生

本文基于 Netty 4.1.112.Final 版本进行讨论 本文是 Netty 内存管理系列的最后一篇文章,在第一篇文章 《聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现》 中,笔者以 UnpooledByteBuf 为例,从整个内存管理的外围对 ByteBuf 的整个设计体系…

51单片机教程(六)- LED流水灯

1 项目分析 基于点亮LED灯、LED灯闪烁,扩展到构成最简单、花样流水灯。 2 技术准备 1 流水灯硬件及原理图 流水灯是由多个LED灯组成的 2 C语言知识点 数组 数组声明:长度不可变 数据类型 数组名称[长度n] // 整数型默认为0,小数型默认…

基础算法——排序算法(冒泡排序,选择排序,堆排序,插入排序,希尔排序,归并排序,快速排序,计数排序,桶排序,基数排序,Java排序)

1.概述 比较排序算法 算法最好最坏平均空间稳定思想注意事项冒泡O(n)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)Y比较最好情况需要额外判断选择O( n 2 n^2 n2)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)N比较交换次数一般少于冒泡堆O( n l o g n nlogn nlogn)O( n l o g n nlogn nlogn)O( n l…

SpringBoot基础系列学习(四):Thymeleaf模板

文章目录 一丶什么是模板引擎二丶Thymeleaf 介绍三丶使用引入依赖代码html页面响应 一丶什么是模板引擎 模板引擎是一种将数据和模板结合起来生成最终结果的工具,它将一个模板和一个数据对象作为输入,通过模板解析和渲染生成最终的结果。通俗地说&#…

模块化开发 webpack

模块化开发 & webpack 1、模块化开发 & webpack1.1 webpack 执行过程1.1.1 初始化1.1.2 编译1.1.3 输出 2.1 webpack 基础配置2.1.1 Entry2.1.1.1 context2.1.1.2 Entry类型 2.1.2 output2.1.2.1 filename2.1.2.2 publicPath2.1.2.3 path2.1.2.4 libraryTarget 和 libr…

Spring WebFlux 核心原理(2-3)

1、Project Reactor 高级 1.1、响应式流的生命周期 要理解多线程的工作原理以及 Reactor 中实现的各种内部优化,首先必须了解 Reactor 中响应式类型的生命周期。 1.1.1、组装时 流生命周期的第一部分是组装时(assembly-time)。 Reactor 提供…

LabVIEW编程过程中为什么会出现bug?

在LabVIEW编程过程中,Bug的产生往往源自多方面原因。以下从具体的案例角度分析一些常见的Bug成因和调试方法,以便更好地理解和预防这些问题。 ​ 1. 数据流错误 案例:在一个LabVIEW程序中,多个计算节点依赖相同的输入数据&#…

AI大模型如何重塑软件开发:从传统流程到未来趋势?

人工智能技术的快速发展,尤其是AI大模型的兴起,正在深刻地改变着软件开发的各个环节。从代码自动生成到智能测试,再到项目管理和安全防护,AI大模型的应用正在提高开发效率、优化产品质量,并带来新的挑战。本报告将探讨…

Spring挖掘:(AOP篇)

学习AOP时,我们首先来了解一下何为AOP 一. 概念 AOP(面向切面编程,Aspect Oriented Programming)是一种编程技术,旨在通过预编译方式或运行期动态代理实现程序功能的统一管理和增强。AOP的主要目标是在不改变原有业务逻辑代码的…

Rust-宏编程

巴山楚水凄凉地,二十三年弃置身。 怀旧空吟闻笛赋,到乡翻似烂柯人。 沉舟侧畔千帆过,病树前头万木春。 今日听君歌一曲,暂凭杯酒长精神。 ——《酬乐天扬州初逢席上见赠》唐刘禹锡 【哲理】翻覆的船只旁仍有千千万万的帆船经过&a…

计算机网络——网络层导论

转发是局部功能——数据平面 路由是全局的功能——控制平面 网卡 网卡,也称为网络适配器,是计算机硬件中的一种设备,主要负责在计算机和网络之间进行数据传输。 一、主要功能 1、数据传输: 发送数据时,网卡将计算机…

推荐一款非常好用的视频编辑软件:Movavi Video Editor Plus

MovaviVideoEditorPlus(视频编辑软件)可以制作令人惊叹的视频,即使您没有任何视频编辑方面的经验! 该款视频编辑程序没有复杂的设置,只需进行直观的拖放控制。在您的电脑上免费使用MovaviVideoEditor亲身体验它的简单易用性与强大功能! 基本简介 您是否…

基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真。本系统包括PV模块,电池模块,电池控制器模块,MPPT模块,PWM模…

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日,由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能,探索制造业数字化转型之路。 在苏州站活动开场,达索系统专业客户事业部华东区渠道经理马腾飞…

[Element] el-table修改滚动条上部分的背景色

[Element] el-table修改滚动条上部分的背景色 ::v-deep .el-table__cell .gutter {background: red;}

esp32cam+Arduino IDE在编译时提示找不到 esp_camera.h 的解决办法

多半是因为你的ESP32库升级了,不再是 1.02版本,或者根本就没有 ESp32 库。如果被升级了,还原为1.02版本就可以了。如果没有,按照下述方法添加: 首先,在"文件"->"首选项"->"…

基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 医院信息界面图…

qt QHeaderView详解

1、概述 QHeaderView 是 Qt 框架中的一个类,它通常作为 QTableView、QTreeView 等视图类的一部分,用于显示和管理列的标题(对于水平头)或行的标题(对于垂直头)。QHeaderView 提供了对这些标题的排序、筛选…

AJAX 全面教程:从基础到高级

AJAX 全面教程:从基础到高级 目录 什么是 AJAXAJAX 的工作原理AJAX 的主要对象AJAX 的基本用法AJAX 与 JSONAJAX 的高级用法AJAX 的错误处理AJAX 的性能优化AJAX 的安全性AJAX 的应用场景总结与展望 什么是 AJAX AJAX(Asynchronous JavaScript and XML…

空天地遥感数据识别与计算——建议收藏!

原文链接:空天地遥感数据识别与计算https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx3&sn53b4d7a7203ab47c26b53c691627ce27&chksmfa8daad0cdfa23c637fa13ec8ebe7344ff48c6c6c08be022dadf601371d8676238290bb9b1fe&token136…