API 接口类型

  • RESTful API (Representational State Transfer)

    RESTful API 是一种基于 HTTP 协议的 API 设计风格,使用 HTTP 方法(如 GET、POST、PUT、DELETE)操作资源,通过 URL 唯一标识资源。

  • SOAP API (Simple Object Access Protocol)

    SOAP API 是一种基于 XML 的通信协议,使用 SOAP 消息格式进行数据交换,通常使用 WSDL (Web Services Description Language) 描述接口,支持复杂数据类型和协议扩展。

  • GraphQL API (Graph Query Language)

    GraphQL API 是一种用于数据查询和操作的 API 查询语言,允许客户端定义返回数据结构,减少不必要的数据传输和多次请求。

  • gRPC API

    gRPC 是一种高性能、开源的远程过程调用 (RPC) 框架,支持多种编程语言,使用 Protocol Buffers 进行数据序列化和通信。

  • WebSocket API

    WebSocket API 提供全双工通信机制,支持服务器与客户端实时双向数据传输,适用于实时通信和推送场景。

  • JSON-RPC API

    JSON-RPC 是一种轻量级远程过程调用 (RPC) 协议,基于 JSON 格式进行数据交换,支持多种编程语言和平台。

  • OAuth API

    OAuth 是一种开放标准的授权协议,用于用户授权第三方应用程序访问受保护资源,提供身份验证和授权接口。

  • OpenAPI/Swagger API

    OpenAPI (原 Swagger) 是一种用于设计、构建和文档化 API 的规范和工具集,提供描述 API 接口和操作的标准方式。

API 检测流程

接口发现

  • 方式:从 JS 文件提取、枚举爆破、响应提示等。
  • 分类:遵循分类、依赖语言、V1/V2 多版本等。

检测点

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

RESTful 风格的测试

  1. API 接口 JS 中 URL 泄露
fetch(
    `${form.action}/${encodeURIComponent(username)}`,
    {
        method: 'PATCH',
        body: JSON.stringify({ 'email': email })
    }
)
  1. API 接口泄露参数污染
%26a=b
#
%26field=reset_token
  1. API 接口利用提交方法
POST /api/products/1/price
PATCH /api/products/1/price
Content-Type: application/json
{
	"price":1
}
  1. API 接口利用泄露参数
POST /api/checkout
{
    "chosen_discount": {                  // 被选择(产品)的折扣
        "percentage": 0                   // 百分比
    },
    "chosen_products": [                  // 被选择的产品
        {
            "product_id": "1",            // 产品 ID
            "name": "Lightweight \"l33t\" Leather Jacket",
            "quantity": 1,                // 数量
            "item_price": 133700          // 价格
        }
    ]
}

GraphQL 风格的测试

利用核心:除常规测试思路外,GraphQL 语法的测试是重点。

测试插件:Burp Suite 应用市场 InQL。

参考资料

测试场景

  1. 实验室:访问私人 GraphQL 数据
  2. 实验室:访问暴露的 GraphQL 字段
  3. 实验室:访问隐藏的 GraphQL 端点

与 RESTful 的差异

  • RESTful:请求不同端点和参数。
  • GraphQL:固定端点,改变请求内容。

解决方法

  1. 目标使用 GraphQL API 技术判断
    • 使用插件分析 URL 特征和提交参数数据特征。
  2. 目标使用 GraphQL API 初级安全测试技术
    • 见演示。
  3. 目标使用 GraphQL API 中高级安全测试技术
    • 下节课内容。