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 风格的测试
- API 接口 JS 中 URL 泄露
fetch(
`${form.action}/${encodeURIComponent(username)}`,
{
method: 'PATCH',
body: JSON.stringify({ 'email': email })
}
)- API 接口泄露参数污染
%26a=b
#
%26field=reset_token
- API 接口利用提交方法
POST /api/products/1/price
PATCH /api/products/1/price
Content-Type: application/json
{
"price":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。
参考资料:
测试场景
- 实验室:访问私人 GraphQL 数据
- 实验室:访问暴露的 GraphQL 字段
- 实验室:访问隐藏的 GraphQL 端点
与 RESTful 的差异
- RESTful:请求不同端点和参数。
- GraphQL:固定端点,改变请求内容。
解决方法
- 目标使用 GraphQL API 技术判断
- 使用插件分析 URL 特征和提交参数数据特征。
- 目标使用 GraphQL API 初级安全测试技术
- 见演示。
- 目标使用 GraphQL API 中高级安全测试技术
- 下节课内容。