前言
这里来分析一下js中history对象的回退功能导致的可能的钓鱼活动。
history
参考:JavaScript Window History | 菜鸟教程 (runoob.com)
为了安全,目前history仅有三个方法。history对象是标签页独立的。
history.back() - 与在浏览器点击后退按钮相同 history.forward() - 与在浏览器中点击向前按钮相同 history.go(1);//参数为1表示前进1,为0表示刷新页面,为-1表示后退1
漏洞介绍
某些站点,在访问404URL时,响应中会包含一个返回上一页的超链接,其通过js代码:history.back()或history.go(-1)实现。
当攻击者构建一个钓鱼网站,在用户访问钓鱼网站时,先重定向到目标网站的404URL,受害者通过地址栏以及页面内的其他信息(比如登录状态、个人信息等)确信现在是正确的地址,然后点击404URL中的返回上一页,跳转到钓鱼网站,也进行信任。
网站开发者和用户都认为其是在站内的回到前一页或者上一级,而攻击者利用该机制实现重定向到钓鱼站点,造成危害。
漏洞危害
通过站内链接重定向到钓鱼网站,导致信任钓鱼网站,攻击者可以进行伪造登录界面或者问卷调查等。
漏洞挖掘和利用
1、挖掘404页面
同一域名下404URL响应可能表现不同,一般选择至少两个路径进行测试,一个静态文件,一个动态接口。篡改之后访问,看响应中是否包含“返回”的超链接。
如果包含,查看其代码是否是history.back()或history.go(-1)
并不完全是404时才出现回退,比如参数不正确,或者干脆作为常用功能,某些网站可能滥用history回退机制。
2、进一步确认
由步骤1完成了挖掘,基本就可以了,步骤2主要是感受其后退功能。
点击返回上一页,看页面是否后退。
将404URL直接粘贴到新的标签页,访问之后点击返回上一页,看页面是否后退以超出目标站点范围。
3、利用说明
要完成漏洞的利用,根据漏洞介绍,要求第一次访问钓鱼网站时直接跳转到目标网站404URL,而回退时第二次访问钓鱼网站,不能再直接跳转到目标网站404URL。
因此,选择cookie来存储状态,第一次访问钓鱼网站时,判断读取的cookie是否为“flag=5“,很显然并不是,然后js写下cookie“flag=5“,跳转。第二次第一次访问钓鱼网站时,判断读取的cookie是否为“flag=5“,由前一次访问可以确定结果为是,因此不跳转。
钓鱼站点html:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script src="jquery-3.6.0.min.js"> </script>
<h1>钓鱼</h1>
<script>
$(document).ready(function(){
str = document.cookie
if(str!="flag=5"){
document.cookie="flag=5";
location.href="http://www.cc.com/abx";//404URL
}
});
</script>
</html>
HBuilder运行,初次请求该html时,写下cookie并跳转404URL,回退时由于有了cookie不再跳转,停留在钓鱼网站。
拓展
1、与xss比较
xss的利用之一,是篡改页面中的超链接的地址,使其跳转到钓鱼网站。
比如访问下述url,服务端或者响应后页面的js将r参数的值赋值给某超链接a。
http://www.cc.com/a?r=http://www.cc.com/b
因此,构造payload URL:(这里不讨论javascript伪协议,或者认为过滤限制了javascript)
http://www.cc.com/a?r=http://www.cc.org/b
点击之后,跳转到钓鱼网站www.cc.org。
在该过程中,用户信任的是点击访问之前,作为域名的www.cc.com,因此导致信任了访问之后站内的链接http://www.cc.org/b。
而history钓鱼攻击,利用的是点击钓鱼URL之后,地址栏显示的404URL是目标站点的URL,与上述xss钓鱼相比,一个优势是地址栏是干净的,另一个优势是不会受到服务器或者前端额外的过滤干扰,也几乎没有攻击痕迹。
2、起始URL
当然可以直接使用http://www.cc.org/b作为跳转起点进行钓鱼。但是将其隐藏,使用其他url会有更好的效果,受害者会更加相信这是目标网站回退指定的URL,而非直接的回到前一页。
比如使用baidu.com,如果baidu.com的搜索引擎存在对www.cc.org的链接,则在点击baidu.com的链接后跳转到www.cc.org的链接,再跳转到目标站点www.cc.com的链接。回退时,跳转到钓鱼站点www.cc.org的链接
3、自动回退
某些站点,当页面404,时,响应页面中包含定时回退的代码。比如5秒后回退到上一页面
好处是自动回退,显得更专业,更方便钓鱼
坏处是该漏洞的核心是由用户确认404URL仍然属于目标网站而信任,而定时后退可能导致无法确认(当然,多看两遍可以确认)
4、404URL的页面
钓鱼是个精细活,越真实越具有成功的可能性。攻击者无法控制404URL的页面的显示,但是其很大程度影响着钓鱼的成功性。
如果响应页面仅仅只有一个超链接,其可信度偏低。
如果响应页面具有与目标站点相同的风格,丰富的页面布局,甚至还有受害者用户的登录信息等,则可信度大大提高。
回退超链接内的提示文本也是一个重要因素。
如果是“后退”,其可能使用户猜到该链接的真实功能仅仅是回退,不保证在站内。而如果是“回到上一页”,“回到上一级”等具有诱导性的词汇,则提高点击之后仍在站内的可信度。
防范
1、不使用history,可以使用cookie存储上一页面的路径,并做检查是否在站内
2、如果要使用,直接回退,而不是定时回退或者让用户自行点击回退