概念

应用程序编程接口(API)是现代软件开发的基础,其中网络 API 最为普遍。它们通过互联网在不同系统之间实现无缝通信和数据交换,作为不同软件应用程序之间集成和协作的关键桥梁。

本质上,API 由定义的规则和协议组成,这些规则和协议规定了不同系统如何交互。它们指定数据格式要求,界定资源访问方法,并定义预期响应结构。API 通常分为公共和私有两类,公共 API 可供外部方访问,而私有 API 则限制于特定组织或系统组。

内容点

SOAP

SOAP简单对象访问是交换数据的一类协议规范,是一种轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化和固化的信息。SOAP不是WEB Service的专有协议

SOAP使用HTTP来发送XML格式的数据,可以简单理解为SOAP=HTTP+XML

Swagger API

详细描述:
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,方便开发者快速了解和调试接口。但由于其文档默认公开在 Web 路径下,未经授权的用户也能访问,从而可能泄露接口信息,甚至造成未授权访问、任意文件读取等安全风险。

SOAPUI

REST

REST即表述性状态传递,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来说明显的更加简洁,越来越多的web服务开始使用REST风格设计和实现

它使用 client-server 模型,客户端使用标准 HTTP 方法( GETPOSTPUTDELETE )向服务器上的资源发起请求。 RESTful API 是无状态的,这意味着每个请求都包含服务器处理所需的所有信息,响应通常序列化为 JSON 或 XML。

WSDL

网络服务描述语言,用于描述web服务的公共接口,这是基于xml的关于如何与web服务通讯和使用的服务描述

gRPC

gRPC 是一种较新的风格,使用 Protocol Buffers 进行消息序列化,提供了一种高性能、高效的方式来在系统之间进行通信。 gRPC API 可以用多种编程语言开发,特别适用于微服务和分布式系统。

安全问题

由于 API 的通用性和普遍性,它们是一把双刃剑。无论它们是现代软件架构的关键组成部分,但也呈现出广阔的攻击面。API 本身的性质,即促进不同系统之间的数据交换和通信,引入了漏洞,例如 Exposure of Sensitive DataAuthentication and Authorization IssuesInsufficient Rate LimitingImproper Error Handling 以及各种其他安全配置错误。

接口数据包

  • Method:请求方法
    • 攻击方式:OPTIONS、PUT、MOVE、DELECT
    • 效果:上传恶意代码、修改页面信息
  • URL:唯一资源定位符
    • 攻击方法:猜测、遍历、跳转
    • 效果:未授权访问
  • Params:请求参数
    • 攻击方式:构造参数、修改参数、遍历、重发
    • 效果:爆破、越权、未授权访问、突破业务逻辑等
  • Authorization:认证方式
    • 攻击方式:身份伪造、身份篡改
    • 效果:越权、未授权访问等
  • Headers:请求消息头
    • 攻击方式:拦截数据包、改Hosts、改Referer、改Content-Type等
    • 效果:绕过身份认证,绕过Referer验证、绕过类型验证、DDOS等
  • Body:消息体
    • 攻击方式:SQL注入、XML注入、反序列化等
    • 效果:提权、突破业务逻辑、未授权访问等

云主机KEY信息泄露利用

云平台作为降低企业资源成本的工具,在当今各大公司系统部署场景内已经成为不可或缺的重要组成部分,并且由于各类应用程序需要与其他内外部服务或程序进行通讯而大量使用凭证或密钥,因此在漏洞挖掘过程中经常会遇到一类漏洞:云主机秘钥泄露。此漏洞使攻击者接管云服务器的权限,对内部敏感信息查看或者删除等操作。此篇文章围绕如何发现秘钥泄露、拿到秘钥后如何利用展开。

漏洞概述

ak、sk拿到后的利用,阿里云、腾讯云云主机通过使用Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。Access Key Id(AK)用于标示用户,Secret Access Key(SK)是用户用于加密认证字符串和云厂商用来验证认证字符串的密钥,其中SK必须保密。

云主机接收到用户的请求后,系统将使用AK对应的相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。

AK/SK原理使用对称加解密。

秘钥泄露常见场景

通过上面描述我们知道云主机密钥如果泄露就会导致云主机被控制,危害很大。

在漏洞挖掘过程中常见的泄露场景有以下几种:

  1. 报错页面或者debug信息调试。
  2. GITHUB关键字、FOFA等。
  3. 网站的配置文件
  4. js文件中泄露
  5. 源码泄露。APK、小程序反编译后全局搜索查询。
  6. 文件上传、下载的时候也有可能会有泄露,比如上传图片、上传文档等位置。
  7. HeapDump文件。

报错页面或者debug信息调试中的AK\SK泄露

很多框架(如 ThinkPHP、Laravel、Spring Boot、Django)在开发或测试阶段开启了 Debug 模式,且上线时未关闭。当应用程序抛出异常时,报错页面会打印出完整的环境变量、配置信息或堆栈跟踪。 1、利用错误传参触发Debug报错。

  • 操作过程: 访问目标网站时,通过修改URL参数类型(如将字符串改为数组 id[]=1),或者访问不存在的路由,刻意引发代码执行异常。 在返回的详细报错页面中(如 Whoops 页面),直接搜索 envAccessKeySecretKeyOSS_AK 等关键字,即可获取硬编码在环境变量中的云主机秘钥。

GITHUB关键字、FOFA等平台中的AK\SK泄露

开发人员安全意识薄弱,将包含敏感秘钥的配置文件(如 .envconfig.yaml)随源代码一起提交到了公开的 GitHub 仓库,或测试环境直接暴露在公网被 FOFA 等空间测绘引擎抓取。 1、通过 GitHub 语法进行精准搜索。

  • 搜索关键字"aliyun_access_key""AccessKeyId""SecretAccessKey""oss.aliyun.com" 结合目标企业域名。 2、通过 FOFA 搜索暴露的配置面板。
  • 搜索语法body="AccessKeyId" && title="测试环境" 或搜索开放了特定监控端口(如 Spring Boot Actuator 的暴露点)。

网站的配置文件泄露

运维人员在备份网站源码或修改配置文件时,将备份文件(如 .bak.swp.zip.tar.gz)遗留在 Web 目录下,导致攻击者可以直接下载并读取。 1、目录扫描与敏感文件下载。

  • 扫描工具dirsearchffuf御剑
  • 操作过程: 使用字典扫描目标网站,发现存在 /.env/config.php.bak/wwwroot.zip 等文件。 直接下载后,打开文件查看数据库配置及云存储/云主机的 AK/SK 信息。

前端JS文件中泄露

部分应用采用前端直传 OSS(对象存储)的架构,为了方便,直接将长期有效的 AK/SK 硬编码在前端的 JavaScript 代码中(如 Webpack 打包后的 app.jschunk.js),而不是通过后端动态获取 STS 临时凭证。 1、分析前端源码提取秘钥。

  • 提取工具:浏览器 F12 开发者工具、FindSomething (浏览器插件)、Packer-Fuzzer
  • 操作过程: 访问目标网站,按 F12 打开开发者工具,在 Sources(源代码)面板中全局搜索 AccessKeyOSS_KEY 或常见云厂商的默认 Endpoint。提取出秘钥后,使用云厂商的 OSS Browser 客户端或命令行工具(如 ossutilaliyun-cli)直接接管其云存储。

源码泄露

移动端 APP 或微信小程序由于客户端完全掌握在用户手中,如果不做代码混淆和加壳,很容易被逆向分析,暴露出硬编码的敏感凭证。

反编译并提取全局敏感信息。

  • 反编译工具jadx-gui (针对APK)、wxappUnpacker / unveilr (针对微信小程序)
  • 操作过程
    1. 获取目标 APK 或小程序 wxapkg 包。
    2. 使用 jadx-gui 打开 APK 进行反编译,或者使用解包工具还原小程序的前端源码。
    3. 在源码目录进行全局正则搜索,如搜索 AKID[a-zA-Z0-9]{32}(腾讯云特征)或 LTAI[a-zA-Z0-9]{20}(阿里云特征),获取泄露的凭据。

文件上传、下载等位置的接口信息泄露

在处理文件上传(如图床、附件上传)或下载时,由于业务逻辑缺陷,接口返回了过多的敏感信息,或者存在任意文件读取/下载漏洞,导致攻击者能获取到服务器上的秘钥文件。 1、抓包分析接口响应或利用任意文件读取。

  • 操作过程: 在执行图片上传操作时,使用 Burp Suite 抓包。观察服务器响应报文,某些粗心的接口会在返回 JSON 数据时,将用于签名验证的完整 AK/SK 一并返回给客户端。 或者,若发现目标存在任意文件读取漏洞,可尝试跨目录读取云主机的元数据配置文件或 .aws/credentials 文件。

HeapDump文件中的AK\SK泄露

HeapDump文件是JVM虚拟机运行时内存的一个快照,通常用于性能分析等,但是因为其保存了对象、类等相关的信息,如果被泄露也会造成信息泄露。 1、Spring Actuator heapdump文件造成的秘钥泄露。

  • 扫描工具https://github.com/F6JO/RouteVulScan
  • 解压/利用工具https://github.com/wyzxxz/heapdump_tool
  • 操作过程: 访问某一网站时进行测试发现存在spring未授权,此时查看是否有heapdump文件,下载解压,全局搜索可发现秘钥泄露。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    D:\>java -jar heapdump_tool.jar heapdump
    [-] file: heapdump
    [-] Start jhat, waiting...
    [-] fing object count: 185929
    [-] too many object,please input 0/1 to choose mode.
    0. (search data, may can't find some data, can't use function num=,len=).
    1. (load all object, need wait a few minutes).
    > 0
    [-] please input keyword value to search, example: password, len=16, num=0-10, id=0x123a, all=true, geturl, getfile, getip input q/quit to quit.
    > accesskey
    [-] Start find keyword: accesskey
    >> xxxxxxxxxx.accessKey -> IIQxxxxxxxxxxxxxxxx

2、通过暴破路径的方式获取。 在文件存储位置会有一些敏感文件泄露,比如请求下载云服务器上某文件时候抓包分析。可以在请求位置爆破文件名,云服务器会返回带有访问秘钥的敏感文件。

对象授权漏洞

Web API 允许用户通过发送各种参数来请求数据或记录,包括唯一标识符,如 Universally Unique IdentifiersUUIDs ),也称为 Globally Unique IdentifiersGUIDs ),以及整数 ID。然而,如果未能通过 object-level authorization mechanisms 正确且安全地验证用户是否拥有查看特定资源的所有权和权限,可能会导致数据泄露和安全漏洞。

一个 Web API 端点如果其授权检查(在源代码级别实现)未能正确确保经过身份验证的用户具有足够的权限或特权来请求和查看特定数据或执行某些操作,则该端点易受 Broken Object Level AuthorizationBOLA )的攻击,也称为 Insecure Direct Object ReferenceIDOR )。

通过用户控制密钥的授权绕过