API安全 | 发现API的5个小tips

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

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

在这篇文章中,我们将讨论 API 侦察方法,以便更好地了解我们的攻击面。我们不会在这里深入讨论常见的 API 攻击。

图片

为什么要使用特殊的 API 侦察方法而不只是使用工具?

可以说“单击应用程序向您显示的每个按钮”是一个很好的做法。理解函数最简单的方法就是简单地使用它并分析我们得到的响应。

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

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

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

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

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

#1 — API 文档

但在许多情况下,我们正在测试运行产品(应用程序)的目标,该目标具有其 API 的可用文档,例如 WSDL 文件的 Swagger。通常,文档是为了方便其他想要将目标 API 集成到其应用程序中的开发人员而提供的。但有时,除了过度曝光之外,文档可以无任何理由地公开访问。

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

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

  • 发送请求所需的标头

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

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

图片

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

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

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

如果我们的目标没有 API 文档,我们可以为应用程序创建自己的文档,而不需要付出太多的努力。请阅读本文中的更多信息:当目标不存在时如何为目标制作流氓 API 文档:https://danaepp.com/how-to-craft-rogue-api-docs-for-a-target-when-they-dont-exist。

#2 — API 开源情报研究

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

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

  • 我们很有可能可以找到应用程序 API 的旧版本,并且它们可能不如生产中的当前版本安全!

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

Google Dorking

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

  • 与API相关的目标子域

  • 目标的API文档页面

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

以下是有关星巴克的一些结果的示例:

图片

这个简单的搜索当然不会映射星巴克的整个 API 表面,但它为我们提供了更多线索,指向拥有其 API 的公司的更多子域。

一些更有用的搜索表单:

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

  • site:target.com inurl:“/api”

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

  • site:target.com title:“api*”

WaybackMachine

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

图片

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

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

图片

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

此外,建议将GAU:https://github.com/lc/gau或Waymore: https://github.com/xnl-h4ck3r/waymore集成到您的侦察自动化中,以拉取更多 API 端点

Postman

这是开发人员测试 API 的最常用工具之一,无需前端接口来发送请求,并且比仅使用curl 方便得多。

图片

Postman 在postman.com:https://www.postman.com/中作为 SaaS 应用程序提供,允许开发人员共享项目,以使团队更轻松地工作。postman项目,也称为postman收藏,通常被认为是私人的。但在很多情况下,你会看到这些藏品是公开开放的。在集合中,有许多细节,例如参数、标头、正文数据、环境变量和授权令牌

如果我们足够幸运,能够接触到目标的postman集合,那么它可能比找到官方 API 文档页面更好。这些不仅仅是我们在那里看到的没有真实内容的示例,这些是应用程序开发人员发送的真实请求和来自后端的真实响应。我们可以了解很多关于应用程序的内部环境和目标的底层核心。最好的部分之一 - 通常具有查询后端的高权限的凭据!

图片

在上图中,我们可以看到属于我的一位客户的postman收藏。正如您所看到的,这是发送到 localhost:8080 的 POST 请求的示例,因为它是在临时环境中发送的。但有一个令牌和一个 cookie 仍然可以在生产环境的渗透测试中使用。

GitHub

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

API 的一些常见关键字:

  • /v1

  • /api

  • apikey

  • api_key

  • api文档

  • api_secret

  • x-api-key

  • /graphql

与 Postman 和 WaybackMachine 一样,在 GitHub 中我们也有很好的机会找到一些可能对后续合作步骤有用的秘密和凭据。

#3 — 应用程序的 HTML 和 Javascript

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

图片

找到 Javascript 文件后,我们通常会得到一大块精简的代码,没有换行和空格。它的发生是为了提高用户体验的性能。在这种情况下,我们可以使用 JS 修饰器:https://beautifier.io/ 进行代码美化。之后,只需将代码复制到代码编辑器(例如 VSCode 或 Sublime)中,然后开始搜索 API 请求。

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

另外,如果我们想要一个自动化工具,我们可以使用Katana:https://github.com/projectdiscovery/katana 。这是一个爬虫工具。Katana 最重要的功能之一是 Javascript 解析。有了这个,我们可以在许多 JS 文件上运行,并在几分钟内获得目标上 API。一个好的建议是使用 Katana 并查看输出,然后再次运行它,并对特定的 Web 应用程序进行更多自定义。

通过查看应用程序的 HTML 和 Javascript,我们可以映射大多数 API 调用,甚至找到那些未公开的API(shadow api):https://www.cloudflare.com/learning/security/api/what-is-shadow-api/。在我最近的一次测试中,应用程序的用户界面公开了大约 30 个 API 调用,而在提取 Javascript 代码后,我能够公开 140 多个 API 端点,而这些端点仅通过使用应用程序是看不见的。

由于shadow api 的暴露程度较小,因此它们往往具有较高的潜在漏洞,因为它们也很少经过测试。

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

到目前为止,我们只讨论了发现 API 的被动方法,与目标本身的接触最少。被动操作仍然使我们能够发现后端存在的许多甚至大多数 API 端点。但是,当 API 端点不暴露给我们正在使用的应用程序时,会发生什么情况呢?我不是在谈论shadow API,而是在谈论后端存在的其他端点,并假设为另一个应用程序提供服务,例如内部或员工应用程序。

例如,当一家公司开发少量从一个后端 (api.target.com) 获取数据的前端应用程序(Web 和mobile)时,例如一个用于客户的面板和另一个用于经理的面板。

如果我们无法访问另一个应用程序,或者我们甚至不知道它的存在,通过模糊测试,我们可以找到更多的端点来测试!

当谈到 API 模糊测试时,我们需要考虑两件重要的事情:

  • 模糊器/扫描器:它是发送 HTTP 请求并通过响应进行过滤的工具。

  • 词汇表/字典:我们模糊测试的内容。一个好的字典是找到只运行通用单词的漏洞和浪费时间之间的区别

我们来谈谈他们吧。

模糊器/扫描器

现在有很多工具通过模糊测试在 API 发现方面做得很好。对于带有端点列表的简单 GET 请求,我们始终可以使用 Burp Intruder、ffuf、GoBuster、 Kiterunner:https://github.com/assetnote/kiterunner等工具,甚至构建我们自己的模糊器。在大多数情况下,我发现ffuf:https://github.com/ffuf/ffuf 和 Kiterunner都是很棒的工具,不仅在速度方面,而且在它带来的有用功能方面,例如按大小、状态代码、单词等进行过滤。特别是 Kiterunner,结合 Assetnote 的相关列表,这个工具非常适合现代 Web 应用程序(NodeJS、Flask、Rails 等)。

图片

使用单个命令,您就可以很好地了解目标的 API :

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

此外,除了 API 端点之外,我们还必须发现后端接受哪些参数。当然,有合法请求的“默认”参数,但如果还有“影子参数”怎么办?也许我们可以找到一个多个漏洞,除了模糊目标之外,我们没有其他方法可以找到该漏洞。**对于这项任务,我认为Arjun:https://github.com/s0md3v/Arjun是最好的工具之一。

Arjun 是一个 Python 工具,它只需将 GET 请求发送到具有大量不同参数的给定 URL。最后,该工具将返回我们有效参数列表以供进一步测试。我将在以后有关黑客 API 的文章中详细介绍 Arjun 的使用。

单词表/字典

使用正确的字典是 API 渗透测试成功的关键。对于这个任务有一些很棒的资源:SecLists:https://github.com/danielmiessler/SecLists 、 Assetnote:http://wordlists.assetnote.io/、 FuzzDB:https://github.com/fuzzdb-project/fuzzdb等等。

专业人士总是会尝试根据目标获得更具体的单词表。例如,如果我们知道我们的目标是基于 Django 作为后端的汽车租赁 Web 应用程序,我们可以将 Django 的通用单词列表与汽车租赁的自定义单词列表结合起来。对于第一个单词列表,我们可以使用 assetnote:

图片

对于第二个,我们可以要求 ChatGPT 生成汽车租赁的常见 API 端点列表

图片

#5——Mobile(移动端)

假设我们的目标是一家送货公司。它有一个网络应用程序,我们可以在其中下订单、付款,也许还有更多功能。但如果快递公司也有移动应用程序,那么就有可能有一些特别适用于手机的功能,例如通过 GPS 获取精确位置。

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

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

有一些镜像网站,例如APKPure:https://apkpure.com/ ,我们可以将APK下载到我们的机器上,以便用分析工具打开它。建议使用静态和动态分析来映射应用程序发送的每个调用,使用 MobSF 等工具也非常有效。

MobSF 是一种自动分析工具,它获取 APK 文件并构建有关文件内部结构的报告:

图片

从报告中,我们可以获得一些硬编码的 URL 和域,可以帮助我们更全面地了解目标的 API 。

总结

当我们测试 API 时,我们必须充分了解应用程序的工作原理、它提供的功能以及我们可用的整个表面。通过使用上述方法,我们将彻底构建应用程序的形象,并为测试不同应用程序的 API 奠定良好的基础。

测试 API 有时更像是一项研究,我们必须使用不同的工具、资源甚至手动技术才能发现它的每一个部分。如果我们长期关注某个目标(几周或几个月),我们可能会看到它的 API 随着时间的推移而变化和增长,而测试它们的最佳时机是当它们是全新的或仍处于未公开状态时。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb有线连接正常,adb connect失败

adb connect失败 1. 确认两个设备在同一个局域网 2. 确认此网络是否有adb连接的权限(有的公司网络不允许adb) 3. 确认防火墙设置 如果前面3步都确认没问题,Ping ip也能成功,那么有可能就是端口的问题: step1: 先用有线连接设备&#xff0…

macos系统内置php文件列表 系统自带php卸载方法

在macos系统中, 自带已经安装了php, 根据不同的macos版本php的版本号可能不同, 我们可以通过 which php 命令来查看mac自带的默认php安装路径, 不过注意这个只是php的执行文件路径. 系统自带php文件列表 一下就是macos默认安装的php文件列表. macos 10.15内置PHP文件列表配置…

java微信机器人制作教程

Java实现微信小号做机器人 随着人工智能技术的发展,机器人在各行各业扮演着越来越重要的角色。在社交领域,微信机器人也逐渐受到人们的关注。本文将介绍如何使用Java实现一个简单的微信小号做机器人的功能。 常见开发功能: 好友管理&#…

css 个人喜欢的样式 速查笔记

起因&#xff0c; 目的: 记录自己喜欢的&#xff0c; 觉得比较好看的 css. 下次用的时候&#xff0c;直接复制&#xff0c;很方便。 1. 个人 html 模板&#xff0c; 导入常用的 link 设置英语字体: Noto导入默认的 css使用网络 icon 图标导入 Bootstrap css 框架 html <…

简单好用的OCR API

现如今&#xff0c;越来越多的科技产品可以帮助我们改善和提高相应的工作效率。OCR技术的出现&#xff0c;提高了人们的工作效率&#xff0c;其应用领域及其广泛。就拿应用了OCR技术的翔云文档识别服务来说&#xff0c;只需上传文档图片便可自动识别并返回文档中相应的内容。翔…

vue+IntersectionObserver + scrollIntoView 实现电梯导航

一、电梯导航 电梯导航也被称为锚点导航&#xff0c;当点击锚点元素时&#xff0c;页面内相应标记的元素滚动到视口。而且页面内元素滚动时相应锚点也会高亮。电梯导航一般把锚点放在左右两侧&#xff0c;类似电梯一样。 二、scrollIntoView() 介绍 scrollIntoView() 方法会…

erlang学习: Mnesia Erlang数据库2

Mnesia数据库增加与查询学习 -module(test_mnesia).-record(shop, {item, quantity, cost}). -record(cost, {name, price}). -record(design, {info, plan}). %% API -export([insert/3,select/1,start/0]). start() ->mnesia:start().insert(Name, Quantity, Cost) ->…

k8s的Ingress控制器安装

Ingress文档地址&#xff1a;Ingress文档 1.安装helm 官网地址&#xff1a;helm官网安装 wget https://get.helm.sh/helm-v3.2.3-linux.amd64.tar.gz tar -zxvf helm-v3.2.3-linux-amd64.tar.gz cp linux-amd64/helm /usr/local/bin/ rootmaster01:~# helm version version.B…

《python语言程序设计》2018版第8章第14题金融:信用卡号合法性 利用6.29题

一、之前6.29题我做的代码 这是用数字来进行分辨的 is_txt 4383576018402626 #合法def split_the_data_even(vis_n):current_a1 vis_n // 10000a_t1 vis_n % 10000# print("1th", a_t1)a_t2 current_a1 % 10000# print("2th", a_t2)current_a3 curre…

Python设计模式实战:开启软件设计的精进之旅

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

python绘制3D瀑布图

成品&#xff1a; 代码&#xff1a; def line_3d(x, y, z, x_label_indexs):"""在y轴的每个点&#xff0c;向x轴的方向延伸出一个折线面&#xff1a;展示每个变量的时序变化。x: x轴&#xff0c;时间维&#xff0c;右边。y: y轴&#xff0c;变量维&#xff0c;…

《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录 一、图像形态学基本概念二、基本运算1.简单介绍2.代码实现 三、高级运算1.简单介绍2.代码实现 一、图像形态学基本概念 图像形态学是图像处理科学的一个独立分支&#xff0c;它基于集合论和数学形态学的理论&#xff0c;专门用于分析和处理图像中的形状和结构。图像形…

linux学习之线程2:线程控制与使用

铺垫 之前我们提到&#xff0c;Linux不直接对线程进行调度&#xff0c;而是对轻量级进程进行调度。但用户就想像Windows那样直接对线程进程控制。所以&#xff0c;就有了pthread库来封装了一层。 那么想要进行线程控制&#xff0c;要用pthread库。&#xff08;pthread库是原生…

Spire.PDF for .NET【文档操作】演示:创比较 PDF 文档

PDF 已成为跨不同平台共享和保存文档的标准格式&#xff0c;在专业和个人环境中都发挥着无处不在的作用。但是&#xff0c;创建高质量的 PDF 文档需要多次检查和修订。在这种情况下&#xff0c;了解如何有效地比较 PDF 文件并找出它们的差异变得至关重要&#xff0c;这使文档编…

《Python编程:从入门到实践》外星人入侵

一、规划 在游戏《外星人入侵》中&#xff0c;玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船&#xff0c;还可使用空格键进行射击。游戏开始时&#xff0c;一群外星人出现在天空中&#xff0c;他们在屏 幕中向下移动。玩家的任务是射杀这些外星…

潘多拉的盒子还是阿拉丁的神灯:揭示RAG噪声在大语言模型中的作用

一、结论写在前面 论文来自清华大学、北京国家信息科学与技术研究中心 论文标题&#xff1a;Pandora’s Box or Aladdin’s Lamp: A Comprehensive Analysis Revealing the Role of RAG Noise in Large Language Models 论文链接&#xff1a;https://arxiv.org/pdf/2408.135…

【包教包会】CocosCreator3.x拖尾MotionStreak威力加强版(支持3.x、支持原生、可合批)

将去年写的2.x拖尾升级到3.x 完美适配Web、原生平台&#xff08;其余平台没测过&#xff09;。 保留原版功能&#xff08;拖尾会跟随节点位移、缩放、受节点透明度影响&#xff0c;但不会跟随节点旋转&#xff09; 支持世界坐标 / 本地坐标切换&#xff08;至于为什么需要这…

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 大语言模型已被广泛采用&#xff0c;但推理时需要大量的GPU内…

2024年智能录屏解决方案全攻略,从桌面到云端

如果你有过录屏经验那你一定遇到过被限制录制时长或者录制的画面比较模糊之类的情况。这次我我推荐几款免费录屏软件&#xff0c;让我们可以更自由的录制屏幕画面。 1.福晰REC大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款软件便捷好操作&#xff0c;而且符合我这次…

post请求中有[]报400异常

序言 在和前端同学联调的时候&#xff0c;发现只要post请求参数里面有[]&#xff0c;就会报400的错误 可以看到日志中&#xff1a; The valid characters are defined in RFC 7230 and RFC 3986 解决办法&#xff1a; 参考了博客&#xff1a; spring boot 中解决post请求中有…