API安全学习笔记
字数 1961 2025-08-24 16:48:07

API安全学习笔记

1. API技术概述

1.1 GraphQL

  • 用于API的查询语言
  • 特征:
    • 数据包发送至/graphql接口
    • 包含大量换行符\n

1.2 SOAP-WSDL

  • WSDL(Web服务描述语言)是一种XML应用
  • 使用SOAP协议
  • 数据格式为XML
  • 常见.asmx文件包含WSDL格式
  • 测试工具:soapui

1.3 WADL

  • 文件中有明显WADL标志
  • 测试工具:soapui的REST功能

1.4 REST

  • 架构规范而非协议或标准
  • 资源状态表述传输格式:
    • JSON(最常用)
    • HTML
    • XLT
    • Python
    • PHP
    • 纯文本
  • 重要元素:
    • 请求头和响应头
    • HTTP方法中的参数
    • 状态码

2. 获取API端点的方法

2.1 Swagger API-docs泄露

  • Swagger是RESTful Web服务的框架
  • 常见路径:
    • Swagger 2:
      • /swagger-ui.html
      • /api-docs
      • /v2/api-docs
    • Swagger 3:
      • /swagger-ui/index.html
      • /api-docs
      • /v2/api-docs
      • /v3/api-docs

测试工具

  1. swagger-editor
    • 导入或远程加载URL
    • 支持JSON和YAML格式
  2. APIKit(Burp插件)

2.2 GraphQL内省查询

  • 获取所有端点信息
  • 生成接口文档工具:
    npm install -g @2fd/graphdoc
    graphdoc -s ./test.json -o ./doc/schema
    

2.3 其他方法

  1. Web静态资源(JS/HTML)中查找
    • 工具:Burp插件JS LinkFinder
  2. App和其他客户端应用
  3. GitHub搜索
  4. 根据规律fuzz

3. API鉴权方式

3.1 Basic Auth

  • 每次请求提供username和password
  • HTTP头格式:
    Authorization: Basic base64(username:password)
    
  • 安全性较低,现已较少使用

3.2 JWT(JSON Web Token)

  • 基于Token的认证授权机制

  • 三部分结构:

    1. Header:描述JWT元数据
    2. Payload:存放实际传递数据
    3. Signature:服务器生成的签名
  • 签名计算方式:

    加密算法(base64(header).base64(payload), secret)
    
  • 在线测试工具:https://jwt.io/

3.3 其他方式

  • 自定义头
  • Cookie
  • API Key
  • 随机生成的Token

4. API网关安全

4.1 Apache APISIX

  • 云原生API网关

  • 漏洞:CVE-2022-24112(命令执行)

    • 影响版本:
      • APISIX 1.3 ~ 2.12.1(不含2.12.1)
      • APISIX 2.10.0 ~ 2.10.4 LTS(不含2.10.4)

    利用条件

    • batch-requests插件默认开启
    • 使用默认Admin Key且未分配管理端口

    利用步骤

    1. 绕过请求头检测
    2. 伪造请求头注册路由
    3. 通过filter_func传递Lua代码执行

4.2 Spring Cloud Gateway

  • 高性能API网关组件

  • 漏洞:代码注入(CVE-2022-22947)

    • 影响版本:
      • < 3.1.1
      • < 3.0.7

    攻击方法

    1. 添加路由(包含SpEL表达式)
    2. 刷新配置
    3. 获取命令执行结果
    4. 清除痕迹

4.3 Traefik

  • 常见问题:Dashboard未授权访问
  • 可获取信息:
    • 路由转发规则
    • 内网IP等

5. Actuator未授权访问

5.1 配置问题

  • 默认只开放health端点
  • 危险配置:
    management.endpoints.web.exposure.include=*
    
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

5.2 利用方法

  • heapdump获取shiro key
    1. 下载heapdump:/actuator/heapdump
    2. 使用jvisualvm.exe或JDumpSpider分析
    3. 搜索org.apache.shiro.web.mgt.CookieRememberMeManager
    4. 提取并转换key

6. 后端代码安全问题

6.1 越权漏洞

  1. 参数污染

    • 为单个参数提供多个值
    GET /api/user?id={userid1}&id={userid2}
    
  2. 附加特殊字符

    GET /api/user/1%20
    
  3. 添加查询参数

    GET /api/user?id=1
    
  4. 修改动作

    PUT /api/user 改为 DELETE /api/user/1
    

6.2 XXE漏洞

  • 当API支持多种数据格式时可能存在问题
  • 测试方法:
    • 将JSON格式改为XML格式
    • 尝试XML外部实体注入

7. 鉴权绕过思路

7.1 JWT Token伪造

  1. 修改签名算法为none
  2. 爆破签名密钥
  3. 伪造密钥
  • 工具:jwt_tool

7.2 Spring-security认证绕过

  • CVE-2022-22978
    • 影响版本:
      • 5.5.x < 5.5.7
      • 5.6.x < 5.6.4
    • 利用方法:使用换行符(%0d%0a)

7.3 Shiro权限绕过

  1. CVE-2020-1957

    • 影响版本:< 1.5.2
    • 利用URI中;处理差异
    /;/admin
    
  2. CVE-2020-13933

    • 影响版本:< 1.6.0
    • 利用URL编码
    /admin/%3bindex
    

8. 其他经验

  1. GitHub、JS和App中可能包含测试token
  2. 测试站点凭据可能在正式站点有效
  3. toC端凭据可能用于toB端接口认证
API安全学习笔记 1. API技术概述 1.1 GraphQL 用于API的查询语言 特征: 数据包发送至 /graphql 接口 包含大量换行符 \n 1.2 SOAP-WSDL WSDL(Web服务描述语言)是一种XML应用 使用SOAP协议 数据格式为XML 常见 .asmx 文件包含WSDL格式 测试工具:soapui 1.3 WADL 文件中有明显WADL标志 测试工具:soapui的REST功能 1.4 REST 架构规范而非协议或标准 资源状态表述传输格式: JSON(最常用) HTML XLT Python PHP 纯文本 重要元素: 请求头和响应头 HTTP方法中的参数 状态码 2. 获取API端点的方法 2.1 Swagger API-docs泄露 Swagger是RESTful Web服务的框架 常见路径: Swagger 2: /swagger-ui.html /api-docs /v2/api-docs Swagger 3: /swagger-ui/index.html /api-docs /v2/api-docs /v3/api-docs 测试工具 : swagger-editor 导入或远程加载URL 支持JSON和YAML格式 APIKit(Burp插件) 2.2 GraphQL内省查询 获取所有端点信息 生成接口文档工具: 2.3 其他方法 Web静态资源(JS/HTML)中查找 工具:Burp插件JS LinkFinder App和其他客户端应用 GitHub搜索 根据规律fuzz 3. API鉴权方式 3.1 Basic Auth 每次请求提供username和password HTTP头格式: 安全性较低,现已较少使用 3.2 JWT(JSON Web Token) 基于Token的认证授权机制 三部分结构: Header:描述JWT元数据 Payload:存放实际传递数据 Signature:服务器生成的签名 签名计算方式: 在线测试工具:https://jwt.io/ 3.3 其他方式 自定义头 Cookie API Key 随机生成的Token 4. API网关安全 4.1 Apache APISIX 云原生API网关 漏洞:CVE-2022-24112(命令执行) 影响版本: APISIX 1.3 ~ 2.12.1(不含2.12.1) APISIX 2.10.0 ~ 2.10.4 LTS(不含2.10.4) 利用条件 : batch-requests插件默认开启 使用默认Admin Key且未分配管理端口 利用步骤 : 绕过请求头检测 伪造请求头注册路由 通过filter_ func传递Lua代码执行 4.2 Spring Cloud Gateway 高性能API网关组件 漏洞:代码注入(CVE-2022-22947) 影响版本: < 3.1.1 < 3.0.7 攻击方法 : 添加路由(包含SpEL表达式) 刷新配置 获取命令执行结果 清除痕迹 4.3 Traefik 常见问题:Dashboard未授权访问 可获取信息: 路由转发规则 内网IP等 5. Actuator未授权访问 5.1 配置问题 默认只开放health端点 危险配置: 或 5.2 利用方法 heapdump获取shiro key 下载heapdump: /actuator/heapdump 使用jvisualvm.exe或JDumpSpider分析 搜索 org.apache.shiro.web.mgt.CookieRememberMeManager 提取并转换key 6. 后端代码安全问题 6.1 越权漏洞 参数污染 为单个参数提供多个值 附加特殊字符 添加查询参数 修改动作 6.2 XXE漏洞 当API支持多种数据格式时可能存在问题 测试方法: 将JSON格式改为XML格式 尝试XML外部实体注入 7. 鉴权绕过思路 7.1 JWT Token伪造 修改签名算法为none 爆破签名密钥 伪造密钥 工具:jwt_ tool 7.2 Spring-security认证绕过 CVE-2022-22978 影响版本: 5.5.x < 5.5.7 5.6.x < 5.6.4 利用方法:使用换行符( %0d%0a ) 7.3 Shiro权限绕过 CVE-2020-1957 影响版本: < 1.5.2 利用URI中 ; 处理差异 CVE-2020-13933 影响版本: < 1.6.0 利用URL编码 8. 其他经验 GitHub、JS和App中可能包含测试token 测试站点凭据可能在正式站点有效 toC端凭据可能用于toB端接口认证