【技术分享】看我如何利用过期链接进行链接劫持

阅读量    39882 |   稿费 100

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

https://p3.ssl.qhimg.com/t01633275f74a9c2264.jpg

译者:興趣使然的小胃

预估稿费:100RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

一、前言

当某个链接指向已过期的域名或页面时,就存在过期链接劫持(Broken Link Hijacking,BLH)问题。过期链接劫持有两种类型,分别为反射型(reflected)以及存储型(stored)。这种问题在野外已经被多次利用,但奇怪的是,漏洞奖励项目中,很少有研究人员会积极主动寻找这类过期链接。

http://p9.qhimg.com/t01c544dee57bc9b917.png

当目标链接指向已过期端点时,可能会出现各种问题,本文对这类情况作了大致介绍,希望读者能对此形成基本理解。

二、存储型过期链接劫持

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的博客中介绍过这样一个经典案例,读者可以阅读他写的这篇文章:“如何劫持顶尖名人的推特(包括凯蒂·佩里、夏奇拉等)”。

http://p4.qhimg.com/t0103eb836ba9863980.png

三、反射型过期链接劫持

当你发现目标存在反射型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公布了一个小脚本,可以在推特中查找过期域名。

五、参考链接

https://github.com/cure53/HTTPLeaks 

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多