绕过SSRF(Server-Side Request Forgery)防御机制是常见的挑战之一,尤其当目标应用试图通过限制URL、阻止数字IP地址、处理302重定向或利用DNS重绑定技术来防止SSRF攻击时。下面是一些绕过这些防御策略的方法:
URL Bypass
当目标应用限制URL只允许使用特定的域名或路径时,可以尝试以下方法:
- 子域名枚举:尝试使用目标域下的未知子域名,因为应用可能只过滤了主域名,而未考虑到所有可能的子域名。
- URL编码:对URL进行编码,比如使用百分比编码(%XX)或URL-safe base64编码。
- 使用相似字符:使用看起来像合法字符但实际上不同的Unicode字符,如使用全角字符代替半角字符。
- 利用国际化域名:尝试使用国际化域名(IDN),这些域名可能看起来与目标域名相同,但实际上使用了不同的字符集。
数字IP Bypass
当目标应用阻止了直接对数字IP地址的请求时,可以尝试:
- 使用域名解析到同一IP:找到一个解析到目标IP的域名,并使用该域名进行请求。
- 利用DNS缓存:如果目标服务器的DNS缓存了特定域名到目标IP的映射,可以利用这个映射进行请求。
- 使用CNAME记录:创建一个CNAME记录指向目标IP的域名,然后使用这个CNAME记录发起请求。
302跳转 Bypass
当目标应用拦截并阻止了302重定向时,可以:
- 手动处理重定向:在SSRF请求中,自己处理重定向逻辑,不依赖于应用自动跟随重定向。
- 使用循环重定向:创建一个无限循环的重定向链,这可能导致目标应用崩溃或放弃重定向处理。
- 利用应用的重定向逻辑缺陷:寻找应用在处理重定向时的逻辑漏洞,比如是否正确验证重定向的目标。
DNS重绑定 Bypass
DNS重绑定是一种技术,允许攻击者通过更改DNS解析来绕过同源策略或SSRF防御。当目标应用检查DNS解析的IP地址时,可以:
- 动态更改DNS记录:在应用检查DNS记录和实际发起请求之间的时间差内,更改DNS记录,使其指向目标IP。
- 使用延迟解析的DNS记录:创建一个DNS记录,它的解析被延迟,直到应用发起请求时才真正解析为目标IP。
实战技巧
- 多步攻击:结合使用上述多种技巧,比如先利用URL bypass绕过域名限制,再利用数字IP bypass绕过IP限制。
- 自动化工具:使用自动化工具,如Burp Suite、ZAP或专门的SSRF工具,来帮助测试和发现绕过机会。
- 深入理解HTTP协议:理解HTTP协议的各个部分,包括请求头、状态码、重定向等,可以帮助设计更复杂的绕过方案。