![80fa7279dd3a9c0d1f0c1ad29abfae57.png](https://i-blog.csdnimg.cn/blog_migrate/b6a653558139fe65e9e927b5d6c5c336.jpeg)
重定向漏洞
服务端未对传入的跳转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_urljump、jump_to、target、domainurl、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.comwww.xxx.com:80@baidu.com:80www.xxx.com#@baidu.comwww.xxx.com @baidu.comwww.xxx.com @baidu.com:80www.xxx.com\www.baidu.comwww.xxx.com\\www.baidu.comwww.xxx.com?www.baidu.comwww.xxx.com#www.baidu.com
这有篇非常详细的url原理讲解
https://www.anquanke.com/post/id/86527
主要是在网址构造之间对特殊符号FUZZ测试进行自由组合
“;”, “/”, “”, “=”, “&”, “?”, “:”, “@”,"."
修复
限制Referer Referer是header字段,当浏览器向服务器发送请求时,通常会带上Referer,服务器判断是从哪个页面转过来的,然后限制Referer将能保证跳转URL的有效性,避免攻击者生成自己的恶意跳转链接。 加入有效性验证Token token验证能有效阻断很多漏洞的利用,保证所有生成的链接都来可信任的网址,在生成的链接加入随机不可控的Token,然后对生成的链接进行校验。