译者:興趣使然的小胃
预估稿费:100RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
一、前言
当某个链接指向已过期的域名或页面时,就存在过期链接劫持(Broken Link Hijacking,BLH)问题。过期链接劫持有两种类型,分别为反射型(reflected)以及存储型(stored)。这种问题在野外已经被多次利用,但奇怪的是,漏洞奖励项目中,很少有研究人员会积极主动寻找这类过期链接。
当目标链接指向已过期端点时,可能会出现各种问题,本文对这类情况作了大致介绍,希望读者能对此形成基本理解。
二、存储型过期链接劫持
2.1 账户伪造
当某个公司删除社交媒体账户时,他们可能会忘记在公司网站上移除相应链接。攻击者可以使用该用户名在社交媒体平台上创建相同账户,假冒这个公司。
2.2 外部JS文件劫持
如果某个目标包含外部JS文件,并且对应的域名或页面已经过期,那么攻击者就可以接管该域名或页面的控制权,最终达到存储型XSS攻击效果。
举个例子,example.edu使用了托管在example.com上的一个外部JS文件,并且example.com已过期。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Broken Link Hijacking</title>
</head>
<body>
<script src="//example.com/script.js"></script>
</body>
</html>
现在,攻击者可以接管example.com,控制example.edu上的JS文件。
2.3 信息泄露
某些链接没有设置rel="noopener noreferrer"属性,劫持这类过期链接可能会将信息泄露给攻击者控制的页面。
有些时候,即使数据分析页面已过期,某些公司依然会链接到这些页面上。如果攻击者成功劫持这类过期页面,他们可以监控目标流量,有可能会收集到目标用户的有价值信息。现实生活中已有类似案例,有人曾经在Gratipay程序中发现过这种情况。
2.4 内容劫持
通过接管已过期的域名或页面,攻击者可以劫持某个页面的内容。@MisterCh0c的博客中介绍过这样一个经典案例,读者可以阅读他写的这篇文章:“如何劫持顶尖名人的推特(包括凯蒂·佩里、夏奇拉等)”。
三、反射型过期链接劫持
当你发现目标存在反射型XSS漏洞,却发现无法跳出href或者src属性的限制时,这种感觉肯定非常难受。
如果某个链接由CDN或者文件托管服务所提供,那么攻击者可以构造恶意链接,在这类服务上托管目标文件。实话实说,这种情况非常罕见,但我们还是应该记住这一点,以便将来碰到时能做到有备无患。
3.1 演示场景
举个例子,http://example.edu/?version=1.0.0代码中引用了某个版本的JS文件,这个文件托管于cdn.example上。
<!-- http://example.edu/?version=1.0.0 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Broken Link Hijacking</title>
</head>
<body>
<script src="//cdn.example/1.0.0/script.js"></script>
</body>
</html>
而cdn.example允许我们添加自定义项目,托管恶意JS文件。
<!-- http://example.edu/?link=maliciouspath -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Broken Link Hijacking</title>
</head>
<body>
<script src="//cdn.example/maliciouspath/script.js"></script>
</body>
</html>
四、相关工具
4.1 broken-link-checker
broken-link-checker可以爬取目标,寻找过期链接。普通情况下,可以使用如下命令来运行这个工具:
$ blc -rof --filter-level 3 https://example.com/
如果出现误报,你可以添加额外参数,修正误报情况:
$ blc -rfoi --exclude linkedin.com --exclude youtube.com --filter-level 3 https://example.com/
4.2 twitterBFTD
misterch0c公布了一个小脚本,可以在推特中查找过期域名。
五、参考链接