漏洞名称:URL重定向、跳转漏洞
漏洞描述:
服务端未对传入的跳转url变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转到恶意网站。由于是从可信的站点跳转出去的,用户会比较信任,所以跳转漏洞一般用于钓鱼攻击,通过转到恶意网站欺骗用户输入用户名和密码盗取用户信息,或欺骗用户进行金钱交易;也可能引发的XSS漏洞(主要是跳转常常使用302跳转,即设置HTTP响应头,Locatioin: url,如果url包含了CRLF,则可能隔断了http响应头,使得后面部分落到了http body,从而导致xss漏洞)。另外在struts2 中存在重定向的漏洞,是因为struts2由于缩写的导航和重定向前缀‚action:‛、 ‚redirect:‛、 ‚redirectAction:‛ 等参数前缀的内容没有被正确过滤导致的开放式重定向漏洞。
检测条件:
1.网页可正常访问
检测方法:
1、 首先找到网站相关url中存在跳转链接的参数(常见的有登陆页面)。
2、 在检测的同时,可以修改参数中的合法URL为非法URL,然后查看是否能正常跳转或者通过抓包工具获取其HTTP响应头中host:的值是否包含了任意的构造URL。
3、 如果是struts2重定向漏洞,则可通过web扫描工具扫描发现,或者手工验证,直接在URL后 添 加 ?redirect:+ 指 定 钓 鱼 链 接 , 例 如 :
10.1.82.53:9098/admin/login.action?redirect:http://diaoyu.com进行验证。
修复方案:
1、 若跳转的URL事先是可以确定的,包括url和参数的值,则可以在后台先配置好,url参数
只需传对应url的索引即可,通过索引找到对应具体url再进行跳转;
2、 若跳转的URL事先不确定,但其输入是由后台生成的(不是用户通过参数传人),则可以
先生成好跳转链接然后进行签名,而跳转cg首先需要进行验证签名通过才能进行跳转;
3、 若1和2都不满足,url事先无法确定,只能通过前端参数传入,则必须在跳转的时候对url
进行按规则校验:即控制url是否是公司授权的白名单或者是符合公司规则的url,参考代
码:
function checkURL ( sURL) {
return
(/^(https?:\/\/)?[\w\-.]+\.(yourDomainA|yourDomainB|yourDomainC)\.com($|
\/|\\)/i).test
(sUrl)||(/^[\w][\w\/\.\-_%]+$/i).test(sUrl)||(/^[\/\\][^\/\\]/i).test(sU
rl) ? true : false;
}
4、 通过对referer的限制:如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接;
5、 加入有效性验证Token:我们保证所有生成的链接都是来自于我们可信域的,通过在生成的链接里加入用户不可控的Token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用,在跳转时做判断,指定跳转的值。当用户访问需要跳转URL的页面时,生成随机token,并保存到Cookie中,后台应用程序在跳转前,判断token是否和cookie中的token一致。
6、 理论上讲,url跳转属于CSRF的一种,跳转url检测中也加入了CRLF头部注入漏洞的检测逻辑, 具体就是在请求参数中加入了%0d%0a这种测试代码,需要对这些参数进行删除处理(事实上:在判断到一个参数中包含 %00 -> %1f 的控制字符时都是不合法的,需对其进行删除)
7、 如果为struts2重定向漏洞,则需要更新相关的struts2的版本到最新。
标签:重定向,URL,用户,漏洞,参数,url,跳转 From: https://blog.csdn.net/CHENSMALLYUN/article/details/137510563