URL跳转漏洞的危害

一直以来,对URL跳转漏洞的理解,仅限于钓鱼、欺骗等,无法影响到当前业务。但前几天看到一个漏洞,让我对URL跳转的危害理解又加深了一层。
对于URL跳转漏洞来说,某些URL跳转的方式可以带着HTTP referer头,这就会使得一些依赖referer校验的安全解决方案失效,比如仅做了referer校验的jsonp接口。这种问题不产生直接危害,但可能造成其他安全防护功能的绕过。

什么情况下的URL跳转会带referer

还是从代码上看来的直接:
写了两个页面,分别放在不同的域下,模拟跨域请求
1.http://localhost:81/url.php?url= 存在URL跳转漏洞的页面,页面中模拟了2种主要的跳转方式。

<?php
if(isset($_GET["url"])) {
    $target = $_GET['url'];
    //使用服务器端302跳转
    //header("location: ".$target);

    //使用html的方式跳转
    echo "<script>window.location.href=\"$target\"</script>";
    exit;
} else {
    echo "Please input the URL";
}
?>

2.http://localhost:8101/referer.php 另一个域下的页面,校验了referer必须为localhost:81

<?php
if (isset($_SERVER['HTTP_REFERER'])) {
    $referer = $_SERVER['HTTP_REFERER'];
    if( strpos($referer, "localhost:81") ) {
        echo "Secert";
    } else {
        echo "Wrong referer";
    }
} else {
    echo "referer is null";
}
?>

看执行情况:
直接访问:http://localhost:81/url.php?url=http://localhost:8101/referer.php
a. 当使用服务器端跳转时,不带referer,此时URL跳转漏洞仅限于钓鱼等危害(这种情况跟我查到的资料都不同)
这里写图片描述

b. 当使用html方式跳转时,带referer,此时可能造成后续影响
这里写图片描述

*测试环境:最新版Chrome、IE、FF

猜你喜欢

转载自blog.csdn.net/change518/article/details/53997509