标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2473] 作者: hudie 发表于: [2019-09-21]
本文共 [449] 位读者顶过
注:本文是一篇翻译文章,原文链接:https://medium.com/@vickieli/bypassing-ssrf-protection-e111ae70727b
[出自:jiwo.org] 当在Web应用程序中找到一个可以获取的外部资源的功能。你可以从各种外部站点读取内容,并且可以请求的文件类型不会有任何限制,应用程序会立即显示所有内容。这个现象告诉你,接下来该尝试一下是否存在SSRF漏洞了。所以你开始输入:127.0.0.1。但是仅过了一秒钟,服务器返回了一个意想不到的响应:
Error. Requests to this address are not allowed. Please try again.
所以现在该做什么?
SSRF保护机制
企业确实意识到了SSRF攻击的风险。所以大多数人已经在他们的Web应用程序中实现了某种形式的SSRF保护。SSRF保护机制基本上分两种:黑名单和白名单。
黑名单指的是如果接收到的输入为列在黑名单上的地址,那么不允许这些地址且阻止请求的处理。大多数SSRF是采用的黑名单来保护不允许探测内网IP地址段。
另一方面,白名单指的是服务器只允许接收处理在预先设定好的白名单列表里包含的URL的请求,并使得其他请求处理失败。
绕过白名单
白名单通常更难绕过,因为默认情况下相对于黑名单而言,白名单更加严格。但是如果白名单中的域中存在开放的重定向漏洞,则可能存在SSRF漏洞。 如果您可以找到可利用的重定向漏洞,则可以请求重定向到内部IP地址段的白名单中的域。
如果没有正确利用白名单(例如,使用了设计不好的正则表达式),那么也可以通过使用子域名或目录的形式作为列入白名单的域名来绕过(例如,victime.com.attacker.com或attacker.com/victim.com )。
绕过黑名单
但是由于应用程序本身的需要(获取外部资源),大多数SSRF保护机制都是以黑名单形式出现。如果遇到黑名单,有很多种方法可以欺骗服务器:
利用重定向漏洞欺骗
使服务器请求你所控制的URL重定向到黑名单地址。例如可以在自己可控的Web服务器上托管如下内容的文件:
<?php header(“location:http://127.0.0.1”);?> 假设此文件位于http://attakcer.com/redirect.php ,这样当你的目标服务器请求http://attakcer.com/redirect.php ,目标服务器实际上被重定向到http://127.0.0.1 ,这是一个受限制的内部地址。
利用DNS欺骗
修改可控的域的A记录或者AAAA记录,并使其指向受害者网络的内部地址。例如,假设http://attacker.com 是你可控的子域名。你可以创建自定义主机名到IP地址映射,使得http://subdomain.attacker.com 解析到127.0.0.1。现在当目标服务器请求http://attacker.com ,它会认为你的域位于127.0.0.1,并从改地址请求数据。
使用IPv6地址
尝试使用IPv6地址而不是IPv4地址,因为服务器可能尚未针对IPv6实施而实施了针对IPv4的保护机制。
切换编码
有很多不同的编码URL或地址可以使服务器正常解析,但是可以绕过黑名单的限制。这些编码包括十六进制编码,八进制编码,双字编码,URL编码和混合编码。
|