URL重定向(URL跳转)绕过
利用姿势
1.正常在测试网站时候,当发现url中存在以下参数,可以进行url跳转测试
redirect、redirect_to、redirect_url
jump、jump_to、target、domain
url、src、to、link、linkto
2.当没有任何限制时
$url=$_GET['url'];
header("Location: $url");
?>
可以直接拼接上我们要跳转的网址
www.xxx.com/admin.php?url=http://www.baidu.com
3.当存在限制时
这个限制一般是限制只能跳转本网的网址或规定的网址
比如开头的网址
$url=$_GET['url'];
if(preg_match(/^www\.xxx\.com/,$url)){header("Location: $url");
}else{echo "error";
}
?>
这样则只能跳转到开头的网址。
但这里存在几个url构造利用,能跳转到baidu
www.xxx.com:80@baidu.com
www.xxx.com:80@baidu.com:80
www.xxx.com#@baidu.com
www.xxx.com @baidu.com
www.xxx.com @baidu.com:80
www.xxx.com\www.baidu.com
www.xxx.com\\www.baidu.com
www.xxx.com?www.baidu.com
www.xxx.com#www.baidu.com
这有篇非常详细的url原理讲解
主要是在网址构造之间对特殊符号FUZZ测试进行自由组合
“;”, “/”, “”, “=”, “&”, “?”, “:”, “@”,"."
修复
1 .限制
是字段,当浏览器向服务器发送请求时,通常会带上,服务器判断是从哪个页面转过来的,然后限制将能保证跳转URL的有效性,避免攻击者生成自己的恶意跳转链接;
2.加入有效性验证Token
token验证能有效阻断很多漏洞的利用,保证所有生成的链接都来可信任的网址,在生成的链接
加入随机不可控的Token,然后对生成的链接进行校验。
最近想做一个公众号,分享我的博客笔记和实战经验