API测试(一):PortSwigger靶场笔记

写在前面

这篇文章是关于作者在学习PortSwigger的API Test类型漏洞时的记录和学习笔记
使用到的工具为Burp Suite Pro

漏洞简介

什么是api

API全称为Application Interface,是应用程序对外提供功能的接口,现在主要有三种api风格,分别是JSON风格的api,RESTful风格的api以及Graphic风格的api

JSON风格

请求获取用户信息

POST /api/getUser HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "userId": 1
}
RESTful风格

请求获取用户信息

GET /api/users/1 HTTP/1.1
Host: example.com

请求修改用户信息

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Jane Doe",
  "email": "jane.doe@example.com"
}
Graphic风格

请求获取用户信息

POST /graphql HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "query": "{ user(id: 1) { id, name, email } }"
}

API测试是什么

API测试这种漏洞主要包含了对开放api期望运行逻辑的破坏以及对未开放的api的检测和调用,导致的危害可能有敏感信息泄露,应用行为被改变等
这篇文章主要讨论JSON和RESTful APIs
当你在测试一个api的时候,关注下面这些点:

  • api接收并处理的数据,包括必需的和可选的
  • api接受的请求类型,包括请求方法和media formats
  • 速率限制和认证机制

和api交互

使用不同的请求方法

HTTP1.0定义了三种请求方法: GET、POST、HEAD

  • GET方法请求一个指定资源的表示形式,使用 GET的请求应该只被用于获取数据。
  • HEAD方法请求一个与 GET请求的响应相同的响应,但没有响应体。
  • POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用。
    HTTP1.1新增了六种请求方法:OPTIONS、PUT、DELETE、TRACE 、CONNECT、PATCH
  • OPTIONS方法用于描述目标资源的通信选项。
  • PUT方法用有效载荷请求替换目标资源的所有当前表示。
  • DELETE方法删除指定的资源。
  • TRACE方法沿着到目标资源的路径执行一个消息环回测试。
  • CONNECT方法建立一个到由目标资源标识的服务器的隧道。
  • PATCH方法用于对资源应用部分修改。
使用不同的Content-Type

以下是最常使用的10种Content-Type
application/json

  • 用途:用于 JSON 格式的数据传输,常用于 RESTful API。
    text/html
  • 用途:用于 HTML 格式的数据传输,常用于 Web 页面响应。
    application/x-www-form-urlencoded
  • 用途:用于 HTML 表单提交的编码方式,将表单数据编码为键值对。
    multipart/form-data
  • 用途:用于文件上传表单的编码方式,允许同时上传文件和其他数据。
    text/plain
  • 用途:用于纯文本数据传输,没有特
PortSwigger 靶场中,RCE(Remote Code Execution,远程代码执行)漏洞的实验通常涉及利用用户输入中的缺陷,执行任意代码或命令。这些实验通常要求用户识别并利用代码注入、命令注入或文件上传等漏洞。 ### RCE 漏洞类型与利用方法 #### 1. **命令注入(Command Injection)** 命令注入是种常见的 RCE 类型,攻击者通过将恶意命令注入到应用程序的系统命令中,从而在服务器端执行任意命令。例如,在某些 Web 应用中,后端可能使用 `exec()` 或 `system()` 函数来执行系统命令。如果用户输入未正确过滤或转义,攻击者可以注入额外的命令。 ```python # 示例:Python 中的命令注入(不推荐) import os os.system(f"ping {user_input}") ``` 利用方法通常包括使用分号 `;`、管道符 `|` 或 `&&` 来分隔原始命令并附加恶意命令。例如,注入 `; rm -rf /` 可能导致删除服务器上的文件 [^2]。 #### 2. **代码注入(Code Injection)** 代码注入与命令注入不同,它涉及在应用程序的代码逻辑中插入恶意代码。例如,在 PHP 中,`eval()` 函数可能会被滥用,攻击者可以通过构造输入来执行任意 PHP 代码。 ```php // 示例:PHP 中的代码注入 eval("\$output = \"$user_input\";"); ``` 利用代码注入时,攻击者可以注入恶意代码,如 `phpinfo()` 或更危险的函数,以获取服务器信息或执行任意操作 [^1]。 #### 3. **文件上传漏洞(File Upload Vulnerability)** 某些 RCE 漏洞可能通过文件上传功能实现。攻击者可以上传包含恶意代码的文件(如 `.php` 或 `.phtml` 文件),然后通过访问该文件来执行代码。常见的绕过方法包括: - 上传文件名绕过(如 `shell.php.jpg`) - 文件内容绕过(如在图片文件中嵌入 PHP 代码) #### 4. **反序列化漏洞(Deserialization Vulnerability)** 反序列化漏洞可能导致 RCE,特别是在 PHP、Java 或 Python 等语言中。攻击者可以通过构造恶意序列化数据,在反序列化过程中触发任意代码执行。 --- ### PortSwigger 靶场 RCE 实验通关技巧 1. **识别输入点**:查找应用程序中接受用户输入的地方,例如表单、URL 参数或 HTTP 头。 2. **测试注入点**:尝试在输入字段中注入特殊字符,如 `;`, `|`, `&`, 或 `eval()`,观察是否可以执行命令。 3. **利用盲注技术**:在某些情况下,服务器不会返回执行结果,需要使用盲注技术,如通过 DNS 请求或 HTTP 请求来确认漏洞是否存在。 4. **使用 Burp Suite**:PortSwigger 提供的 Burp Suite 是测试 RCE 漏洞的重要工具,可以拦截和修改请求,快速测试不同注入向量。 5. **查阅官方文档**:PortSwigger Academy 提供了详细的实验指南,建议参考其官方文档和实验步骤进行练习 [^2]。 --- ### 安全防护建议 - **过滤用户输入**:对所有用户输入进行严格的验证和过滤,避免直接将其用于系统命令或代码执行。 - **使用白名单机制**:对文件上传功能实施白名单机制,限制允许上传的文件类型。 - **避免使用危险函数**:如 `eval()`、`exec()`、`system()` 等,尽量使用更安全的替代方案。 - **启用 Web 应用防火墙(WAF)**:WAF 可以帮助检测和阻止常见的 RCE 攻击模式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值