1.png

简单说来,过期链接劫持(BLH)的情况一般发生在当一个目标链接指向过期域名或网站页面的时候。过期链接劫持主要有两种形式,即反射型和存储型。而且需要注意的是,此前已经有很多网络犯罪分子利用过这种安全问题来实施攻击,但令人感到惊讶的是,我们几乎很少看到有安全人员在各大厂商的漏洞奖励计划中上报这种漏洞(过期链接)。 在这篇文章中,我们将会跟大家介绍有关过期链接的基本概念,以及如果一个目标链接指向的是一个已过期的终端节点,会导致怎样的安全问题出现。

2.png

存储型过期链接劫持

1)“角色”扮演

当一家公司删除了自己的社交媒体账号之后,相关负责人可能会忘记将公司官网上指向该社交媒体账号的链接删除掉。此时,攻击者就可以在相应的社交媒体平台上用该公司的用户名来注册一个账号,并伪装成该公司的官方账号。

2)外部JS文件劫持

如果一个目标网站使用了外部JavaScript文件,并且相应的域名或页面已过期的话,你就可以申请这个已过期的域名并得到一个存储型XSS漏洞。比如说我们用example.edu举个列子,假设这个网站使用了一个托管在example.com上的外部JavaScript文件,并且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所使用的JavaScript文件了。

3)信息泄露

劫持那些缺少rel=”noopener noreferrer”属性的过期链接将有可能导致目标网站将敏感信息泄露给攻击者所控制的页面【参考资料】。

除此之外,某些公司网站中还存在指向已过期的站点统计页面的链接。如果攻击者能够劫持这个已过期的站点统计页面,那么他们就能够监控那些访问该网站的用户流量,甚至还可以窃取到有价值的网站用户信息。实际上,此前已经有人在Gratipay的子域名页面中发现并在HackerOne上报告了类似的问题【HackerOne传送门】。

4)内容劫持

攻击者可以通过劫持已过期的域名或页面来劫持目标网站的页面内容。@MisterCh0c在自己的博客文章【传送门】中给出了非常好的演示样例,感兴趣的朋友可以好好看看。

3.png

反射型过期链接劫持

假如你真的发现了一个反射型 XSS 漏洞,但是你又对href或src属性无从下手的时候,你肯定知道那种绝望的感觉。

如果我们的目标链接是一个 CDN 服务或一个文件托管服务,你就可以构建一个恶意链接并将恶意文件托管在该服务之上。虽然这种情况大家都知道是非常少见的,但不管怎么样,希望大家在今后的“挖洞生涯”中可以注意这种特殊情况的出现。

样例场景

http://example.edu/?version=1.0.0可以返回一个托管在cdn.example上的特殊版本的JavaScript文件:

 

<!– 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>

 <scriptsrc=”//cdn.example/1.0.0/script.js”></script>

</body>

</html>

cdn.example将允许我们添加自己的项目并托管一个恶意的JavaScrip文件:

 

<!–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>

 <scriptsrc=”//cdn.example/maliciouspath/script.js”></script>

</body>

</html>

相关工具

1)broken-link-checker

broken-link-checker可以帮助我们对目标站点的URL进行爬取并寻找已过期的链接。

你可以使用下列命令运行该工具:

$ blc -rof --filter-level 3https://example.com/

但是就我个人而言,我比较喜欢添加下面这些运行参数,因为这样可以最大程度地降低结果的假阳性率。

broken-link-checker下载地址:【GitHub传送门

2)twitterBFTD

除了broken-link-checker之外,我们还可以选择使用misterch0c 所发布的一个小脚本,它可以帮我们寻找已过期的域名。

twitterBFTD下载地址:【GitHub传送门

参考资料

[1] https://github.com/cure53/HTTPLeaks

* 参考来源:edoverflow,FB小编Alpha_h4ck编译