绕过API安全控制与速率限制测试技巧
1. 自动化绕过WAF
在发现绕过Web应用防火墙(WAF)的成功方法后,可借助模糊测试工具的功能来自动化执行绕过攻击。
1.1 使用Burp Suite自动化绕过
Burp Suite的Intruder工具提供了强大的有效负载处理功能。在Intruder的“Payloads”选项下,有一个“Payload Processing”部分,可添加规则,Burp会在发送每个有效负载之前应用这些规则。
- 操作步骤:
1. 点击“Add”按钮,可添加各种规则,如前缀、后缀、编码、哈希和自定义输入等。
2. 例如,若发现通过在URL编码的有效负载前后添加空字节可绕过WAF,可创建以下规则:
- 第一条规则:对有效负载中的所有字符进行URL编码。选择“Encode”规则类型,选择“URL-Encode All Characters”选项,然后点击“OK”添加规则。
- 第二条规则:在有效负载前添加空字节。选择“Add Prefix”规则,将前缀设置为 %00 。
- 第三条规则:在有效负载后添加空字节。选择“Add Suffix”规则,将后缀设置为 %00 。
3. 启动攻击并查看请求有效负载,检查“Payload”列以确保有效负载已正确处理。示例请求如下:
POST /api/v3/user?id=%00%75%6e%64%65%66%69%6e%65%64%00
POST /api/v3/user?id=%00%75%6e%64%65%66%00
POST /api/v3/user?id=%00%28%6e%75%6c%6c%29%00
1.2 使用Wfuzz自动化绕过
Wfuzz也具备出色的有效负载处理能力。其有效负载处理文档可在 https://wfuzz.readthedocs.io 的“Advanced Usage”部分找到。
- 操作步骤:
1. 若需要对有效负载进行编码,需知道要使用的编码器名称。可使用以下命令查看所有Wfuzz编码器列表:
$ wfuzz -e encoders
2. 部分可用的Wfuzz编码器如下表所示:
| 类别 | 名称 | 概述 |
|---|---|---|
| hashes | base64 | 使用Base64对给定字符串进行编码 |
| url | urlencode | 使用 %xx 转义替换字符串中的特殊字符,字母、数字和字符 _ . - 不会被引用 |
| default | random_upper | 将字符串中的随机字符替换为大写字母 |
| hashes | md5 | 对给定字符串应用MD5哈希 |
| default | none | 不做任何更改返回所有字符 |
| default | hexlify | 将每个数据字节转换为对应的两位十六进制表示 |
| 3. 使用编码器时,在有效负载后添加逗号并指定编码器名称。例如: |
$ wfuzz -z file,wordlist/api/common.txt,base64 http://hapihacker.com/FUZZ
4. 编码器功能也可与多个编码器一起使用。若要在单独的请求中让一个有效负载由多个编码器处理,用连字符指定它们。例如:
$ wfuzz -z list,a,base64-md5-none
5. 若希望每个有效负载由多个编码器依次处理,用`@`符号分隔编码器。例如:
$ wfuzz -z list,aaaaa-bbbbb-ccccc,base64@random_upper -u http://192.168.195.130:8888/identity/api/auth/v2/FUZZ
2. 测试速率限制
速率限制是API重要的安全控制措施,可防止API消费者过度请求,避免提供商产生额外成本或遭受DoS攻击,同时也是API提供商实现盈利的一种方式。
2.1 识别速率限制
- 首先查阅API文档和营销材料,看是否有相关信息。API提供商可能会在其网站或API文档中公开速率限制细节。
- 若未找到相关信息,检查API的响应头。API通常会包含以下类似的头信息,告知在违反限制之前还能进行多少次请求:
-
x-rate-limit -
x-rate-limit-remaining
-
- 有些API没有速率限制指示器,但超过限制时会暂时阻止或禁止访问,可能会返回新的响应代码,如
429 Too Many Requests,并可能包含Retry-After头,指示何时可以提交额外请求。
2.2 应对宽松的速率限制
有些速率限制可能较为宽松,无需绕过即可进行攻击。例如,速率限制为每分钟15,000个请求,而要暴力破解一个有150,000种可能性的密码,可在10分钟内完成请求,确保不超过速率限制。
- 若使用Wfuzz,可使用 -t 选项指定并发连接数,使用 -s 选项指定请求之间的时间延迟。Wfuzz -s 选项如下表所示:
| 请求之间的延迟(秒) | 大约发送的请求数 |
| ---- | ---- |
| 0.01 | 每秒10个 |
| 1 | 每秒1个 |
| 6 | 每分钟10个 |
| 60 | 每分钟1个 |
- 若使用Burp Suite CE的Intruder,其设计上已进行了速率限制;若使用Burp Suite Pro,可设置Intruder的“Resource Pool”来限制请求发送速率。Burp Suite Intruder的“Resource Pool”延迟选项如下表所示:
| 请求之间的延迟(毫秒) | 大约请求数 |
| ---- | ---- |
| 100 | 每秒10个 |
| 1000 | 每秒1个 |
| 6000 | 每分钟10个 |
| 60000 | 每分钟1个 |
2.3 绕过速率限制的方法
- 路径绕过 :稍微改变URL路径是绕过速率限制的简单方法之一。例如,在请求中使用大小写转换或字符串终止符。若对以下POST请求中的
uid参数进行IDOR攻击:
POST /api/myprofile
--snip--
{uid=§0001§}
当达到该请求的速率限制时,可尝试以下路径迭代:
POST /api/myprofile%00
POST /api/myprofile%20
POST /api/myProfile
POST /api/MyProfile
POST /api/my-profile
也可在路径中包含无意义的参数,若该参数使请求成功,可能会重置速率限制。可在每个请求中更改参数值,使用Burp Suite的Intruder时,可将攻击类型设置为“pitchfork”,并为两个有效负载位置使用相同的值。
- 源头发送方欺骗 :一些API提供商使用请求头来实施速率限制。可尝试在请求中包含常见的源头发送方头信息,如:
- X-Forwarded-For
- X-Forwarded-Host
- X-Host
- X-Originating-IP
- X-Remote-IP
- X-Client-IP
- X-Remote-Addr
- 对于这些头的值,可发挥创意,尝试使用私有IP地址、本地主机IP地址( 127.0.0.1 )或与目标相关的IP地址。
- 可尝试一次性发送所有可能的源头发送方头,或在单个请求中包含它们。若一次性包含所有头导致收到 431 Request Header Fields Too Large 状态码,则减少每个请求中的头数量,直到成功。
- 除源头发送方头外,API防御者可能还会使用 User-Agent 头来识别用户。可使用SecLists中的 User-Agent 词表,在请求中循环使用不同的值。在 User-Agent 值周围添加有效负载位置,并在每个请求中更新它,若 x-rate-limit 头重置或在被阻止后能够成功请求,则表示绕过成功。
- 在Burp Suite中旋转IP地址 :WAF的基于IP的限制可能会阻止模糊测试。为克服这一问题,Rhino Security Labs发布了名为“IP Rotate”的Burp Suite扩展。
- 操作步骤:
1. 安装Boto3:
$ pip3 install boto3
2. 从[https://www.jython.org/download.html](https://www.jython.org/download.html)下载Jython独立文件。
3. 打开Burp Suite的“Extender”选项,在“Python Environment”下指定Jython独立文件。
4. 导航到Burp Suite Extender的“BApp Store”,搜索“IP Rotate”并点击“Install”按钮。
5. 登录AWS管理账户,导航到IAM服务页面,创建一个具有编程访问权限的用户账户。
6. 在“Set Permissions”页面,选择“Attach Existing Policies Directly”,搜索“API”,选择“AmazonAPIGatewayAdministrator”和“AmazonAPIGatewayInvokeFullAccess”权限。
7. 创建用户后,下载包含用户访问密钥和秘密访问密钥的CSV文件。
8. 打开Burp Suite,导航到“IP Rotate”模块,将访问密钥和秘密访问密钥复制粘贴到相应字段,点击“Save Keys”按钮。
9. 准备使用“IP Rotate”时,更新目标主机字段为目标API,点击“Enable”。注意不要在目标主机字段中输入协议(HTTP或HTTPS),使用“Target Protocol”按钮指定协议。
10. 可将`ipchicken.com`作为目标进行测试,代理请求到[https://ipchicken.com](https://ipchicken.com),每次刷新页面时观察旋转的IP地址。
通过这些技术,可绕过API的安全控制和速率限制,对API进行更有效的攻击。在发起全面攻击前,应尽可能收集信息,并创建临时账户,以防某个账户被封禁。
绕过API安全控制与速率限制测试技巧(续)
3. 技术总结与应用场景分析
3.1 自动化绕过技术对比
| 工具 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Burp Suite | 界面友好,规则设置灵活,适合初学者和有一定经验的测试人员 | 商业版有一定成本,免费版功能有限 | 对单个目标进行详细的绕过测试,需要可视化操作和精细规则配置 |
| Wfuzz | 命令行工具,可脚本化操作,支持多种编码器组合 | 学习曲线较陡,对于复杂规则设置不如Burp Suite直观 | 批量测试多个目标,需要快速编写脚本进行自动化绕过 |
3.2 速率限制测试方法选择
根据不同的API情况和测试目的,选择合适的速率限制测试方法:
- 宽松速率限制 :当API的速率限制较为宽松时,可通过控制工具的请求速率来进行测试,如使用Wfuzz的 -t 和 -s 选项,或Burp Suite的“Resource Pool”。
- 严格速率限制 :需要使用绕过技术,如路径绕过、源头发送方欺骗或IP地址旋转。路径绕过适用于API对URL路径处理较为敏感的情况;源头发送方欺骗适用于API通过请求头进行速率限制的情况;IP地址旋转适用于API基于IP进行限制的情况。
4. 实战案例分析
4.1 案例背景
假设我们要对一个社交媒体API进行安全测试,该API的速率限制为每分钟100个请求,我们需要对用户ID( uid )参数进行暴力破解,可能的 uid 值有10000个。
4.2 测试过程
- 初始尝试 :直接使用Wfuzz进行暴力破解,很快达到了速率限制,收到了
429 Too Many Requests响应。
$ wfuzz -z range,1-10000 http://socialmediaapi.com/api/user?uid=FUZZ
- 路径绕过尝试 :尝试对URL路径进行修改,使用以下请求:
POST /api/user%00?uid=§1§
POST /api/User?uid=§1§
发现部分路径修改后可以绕过速率限制,继续进行测试。
- 源头发送方欺骗尝试 :在请求中添加不同的源头发送方头信息,如:
GET /api/user?uid=1 HTTP/1.1
Host: socialmediaapi.com
X-Forwarded-For: 127.0.0.1
发现部分头信息可以绕过速率限制,结合路径绕过,提高了测试效率。
- IP地址旋转尝试 :使用Burp Suite的“IP Rotate”扩展,配置好AWS账户和密钥后,继续进行测试,发现可以持续发送请求而不被IP限制。
4.3 测试结果
通过综合使用路径绕过、源头发送方欺骗和IP地址旋转技术,成功绕过了API的速率限制,完成了对 uid 参数的暴力破解,发现了API的安全漏洞。
5. 总结与展望
在API安全测试中,绕过安全控制和速率限制是重要的技术手段。通过使用自动化工具和各种绕过技术,我们可以更有效地发现API的安全漏洞。在实际应用中,应根据API的具体情况选择合适的技术和工具,同时注意遵守法律法规和道德规范。
未来,随着API技术的不断发展,安全控制和速率限制技术也会不断升级。我们需要不断学习和研究新的绕过技术,以应对日益复杂的API安全挑战。同时,API提供商也应加强安全防护,合理设置速率限制,确保API的安全稳定运行。
以下是一个简单的mermaid流程图,展示了测试API速率限制的一般流程:
graph TD;
A[开始测试] --> B[识别速率限制];
B --> C{速率限制宽松?};
C -- 是 --> D[控制请求速率进行测试];
C -- 否 --> E{是否可绕过?};
E -- 是 --> F[选择绕过方法进行测试];
E -- 否 --> G[结束测试];
D --> H[发现漏洞?];
F --> H;
H -- 是 --> I[报告漏洞];
H -- 否 --> G;
I --> G;
通过以上内容,我们详细介绍了绕过API安全控制和速率限制的技术和方法,希望对API安全测试人员有所帮助。
超级会员免费看

被折叠的 条评论
为什么被折叠?



