作者:小刚
一位苦于信息安全的萌新小白帽,记得关注给个赞,谢谢
本实验仅用于信息防御教学,切勿用于其它用途
URL重定向
服务端未对传入的跳转url变量进行检查和控制,可能导致可恶意构造任意
一个恶意地址,诱导用户跳转到恶意网站。
这个漏洞有啥危害呢????????
我们普通人当看到一个网址,发现网站开头是自己熟悉(百度,谷歌)或者某一官网(感觉很安全的网址),就会没防护意识的点入进去,当该网站有url跳转漏洞,就会引导你跳转到一个不安全的网站,导致钓鱼或者流量引流。
一般利用点
302跳转:
即设置HTTP响应头Locatioin: url,如果url包含了CRLF(回车换行),就可能隔断了http响应头,使得后面部分落到了http body,从而跳转到构造的网址。
http://www.xxx.com/index.php\r\n
注册登录跳转:
很多登录界面的网址后面会跟一个URL参数,引导我们登录成功后跳转到相应界面,当被我们利用时,则登录成功后可以跳转到我们指定的恶意网站。
http://www.xxx.com/login.php?url=www.baidu.com
http://www.xxx.com/regist.php?url=http://www.google.com
打开连接功能:
很多网站有个功能是打开外部连接,当输入要访问的网址时,会先将网址添加到url上,然后进行跳转,利用添加上url的网址可以进行引导到任意网址。
http://www.xxx.com/admin.php?jump=www.baidu.com
用户分享、收藏内容过后等等
利用姿势
1.正常在测试网站时候,当发现url中存在以下参数,可以进行url跳转测试
redirect、redirect_to、redirect_url
jump、jump_to、target、domain
url、src、to、link、linkto
2.当没有任何限制时
<?php
$url=$_GET['url'];
header("Location: $url");
?>
可以直接拼接上我们要跳转的网址
www.xxx.com/admin.php?url=http://www.baidu.com
3.当存在限制时
这个限制一般是限制只能跳转本网的网址或规定的网址
比如www.xxx.com开头的网址
<?php
$url=$_GET['url'];
if(preg_match(/^www\.xxx\.com/,$url)){
header("Location: $url");
}else{
echo "error";
}
?>
这样则只能跳转到www.xxx.com开头的网址。
但这里存在几个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
主要是在网址构造之间对特殊符号FUZZ测试进行自由组合
“;”, “/”, “”, “=”, “&”, “?”, “:”, “@”,"."
修复
1 .限制Referer
Referer是header字段,当浏览器向服务器发送请求时,通常会带上Referer,服务器判断是从哪个页面转过来的,然后限制Referer将能保证跳转URL的有效性,避免攻击者生成自己的恶意跳转链接;
2.加入有效性验证Token
token验证能有效阻断很多漏洞的利用,保证所有生成的链接都来可信任的网址,在生成的链接
加入随机不可控的Token,然后对生成的链接进行校验。
最近想做一个公众号,分享我的博客笔记和实战经验
喜欢的可以关注一下
记得点赞,在看哦