这是Empire系列的起始篇,其中涵盖了对Empire各方面的用法和功能的讲解,这些文章将以作者名分类发布出来。我已经发布了各版本Empire(后续版本见链接),但是还未曾展示出该系列的强大(尽管@enigma0x3在八月发布了一篇《Empire技巧讲解》和《Empire如何用于SCCM》)。本文将会展示Empire如何进行横向扩展,其中会涵盖提权权限保持数据挖掘态势感知以及TrollSploit等等。

Invoke-PsExec

PsExec已经陪伴了我们逾十年,效果有目共睹。某些黑客喜欢使用网络管理员的工具,以彼之道还施彼身,PsExec自然也不例外。当然我们并不是必须要使用PsExec进行横向扩展(有些团队已经研究出更好的黑科技),但是它在特定的情况下仍然是一个不错的选择。

我们自定义实现的PsExec也就是Invoke-PsExec,其很大程度上基于Metasploit来实现。它利用exploit-monday.com上的法子,实现了对底层的win32 API函数的访问,其操作如下:

1、OpenSCManagerA用来打开受害者机器上服务控制管理器的句柄,此处它使用了SC_MANAGER_ALL_ACCESS (0xF003F)权限。

2、CreateServiceA用来让服务控制管理器,创建一个指定的新服务,运行一个特定的命令。

3、接着用OpenServiceA启动该服务,以StartServiceA启用,在服务启动和执行指定的命令时进行短暂停顿。

4、使用DeleteService删除该服务。

很明显,这工具动静很大,稍微强点的防火墙就能检测到。但是它的优点在于,能直接给我们提供目标的system权限。上述的功能放在lateral_movement/invoke_psexec模块里,你需要设置Listener、ComputerName,并且配置好其它的内容。

Invoke-WMI

我们更喜欢的横向扩展无疑是WMI,虽然使用WMI作为横向扩展有些需要注意的要点(参见kerbero的double hop问题)。它比PsExec的动静要小很多。在这里,我们可以用lateral_movement/invoke_wmi,使用Invoke-WmiMethod -Path Win32_process -Name create …来辅助Empire进行命令执行。因为double hop问题,你需要记住在大多数情况下,除非主机没做约束,这个新的agent是无法访问额外的远程网络资源的。你需要使用runas/pth或者窃取token,以更新你现在运行的agent的身份认证凭据。

Invoke-PsRemoting

如果目标上启用了WinRM(windows远程),你就能轻松用PowerShelly方式启用一个Empire agent。在远程系统上执行Invoke-Command,ScriptBlock参数后面跟上staging代码,横向扩展是非常容易的。如Invoke-PsExec和Invoke-WMI一样,我们的实现可以通过lateral_movement/invoke_psremoting模块,接收一个Listener和ComputerName以及一些可选的选项,最后在远程主机上启动stager。

Invoke-WMIDebugger

这里讲一个稍新奇的横向扩展法子,是使用WMI去设置五个Windows Accessibility可执行文件中任意一个的调试器。这些可执行文件包括臭名昭著的sethc.exe(粘滞键,五下shift可触发),narrator.exe(文本转语音,Utilman接口激活)、Utilman.exe(windows辅助管理器,Win+U启用),Osk.exe(虚拟键盘,Utilman接口启用)、Magnify.exe(放大镜,Utilman接口启用)。这些可执行文件是非常有用的,因为它们可以在身份验证之前就在RDP会话上触发。我们可以使用镜像劫持而不是替换掉这些可执行文件,当然清理起来也加容易。

有了lateral_movement/invoke_wmi_debugger,你可以设置这些可执行文件,关联到你指定的Empire staging代码,从而控制服务器。如果指定了listener,staging脚本会存储在RegPath指定的注册表位置,由指定的可执行文件启用。如果listener没有指定可执行文件,程序可能会启用默认的cmd.exe来替代:

这里给出一个提醒,如果你用这种方法触发agent,你可能会需要保持RDP窗口不关闭,直到它注入了其他进程。一旦RDP认证会话关闭,你的原始agent也会关闭。你需要至少30秒不活动的时间,直到你的RDP会话关闭。

当你做完这一切,指定Cleanup选项,所有的东西都会回原。这种后门适用于在互联网中实现过的情况

传递hash

你可能会问,什么叫传递hash。我们并没有完整的hash传递的工具。这里,Benjamin Delphy (the @gentilkiwi)帮助了我们。使用了Joseph BialekInvoke-Mimikatz,我们可以执行Mimikatz的sekurlsa::pth模块。它会让生成一个新的进程,然后将NTLM hash注入指定的进程空间,实现over-pass-the-hash攻击,从而有效地把认证信息转为Kerberos票据。你可以传递hash或者 credentials/mimikatz/pth模块,或者在agent菜单里选择pth <CredID>(利用Empire身份认证凭据存储):

注意,在这里你首先需要管理员权限。第二,它会产生一个新的进程,所以Empire的Invoke-Mimikatz实现会让它不产生新窗口。在该进程运行后,使用steal_token模块(等同于credentials/tokens模块,Joe的Invoke-TokenManipulation的别名),窃取新启动进程的token。

结语

横向扩展是每个渗透测试团队的重要工作步骤,PsExec、WMI、“Debuggers”、WinRM和PTH都有各自的地位和存在意义,Empire尽力让黑客们使用最好的方式来应付特定的情况。

*参考来源:harmj0ydawner编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

源链接

Hacking more

...