超详细的域渗透过程!

  • Post author:
  • Post category:其他


大家好!我们在这个write up 里讲下几个不同的入侵

windows domian

时的横向操作。 内容不会过于深入,而会介绍一些基本技巧和流程. 为了保证测试客观性所以我将使用我们的测试对象 lock domain “REDHOOK”. 希望这会成为我们第一个关于 windows domian 的系列教程. 如果你要具体了解某些细节(比如kerberos 的 tickets)欢迎发email 谢谢 (作者鬼佬,要问写英文)!

实例:

我们的目标是获取 ”

redhook.DA

“ 域账号的鉴别信息. 假设我们做为攻击者已经成功的进入到目标企业的内部网络,但是我们和目标不在同一个 domian controller 的管理范围, 如下图所示.


image.png

另外我们作为攻击者假设已经获得了Client 1.主机上一些有用的本地管理员的鉴别信息。怎么获得的?如果目标网络够大, 就很有可能会在网络分享上找到有用的鉴别信息 (例如各种batch, vbs, .NET, ps1, etc. 文件中), 在找的过程中 “dir /s”, “findstr /SI” andFind-InterestingFile 相当管用. 取决于一开始你怎么获得的权限,你可能已经用到了一些很好用的像cobalt strike类型入侵框架,或者你已经在目标网络某台机器是有了一些基本权限功能。虽然在本讲中入侵者使用的是kali,但我也会介绍一些windows 上的小技巧. 最后,本讲中我不会去讲关于绕过防护的技巧,记住实战中触发了防护的话那就代表没戏了。

黑掉 Client 1

像我之前说的我们已经在内网分享内容里得到了 “Client 1” 的鉴别信息。看一下代码


image.png

我们可以尝试获取上面batch脚本中IP地址的NetBIOS的信息。


image.png

如果在windows上使用cmd命令

image.png


image.png

如上图中所示我们可以看出主机 “WIN7-ENT-CLI1” 连接的是 REDHOOK domain.

P**ec:

我们使用 metasploit’s P**ec 可以很容易的获取到反弹shell。 注意smbuser设置的bob是本地账,如果“net use” 命令下我们必须用 “REDHOOK\bob” 同时我们就不设置SMBDomain 参数


image.png

除了Metasploit的P**ec,我们还能用 Impacket的P**ec(RemComSvc 模拟P**ec),


image.png

在没有明文密码的时候我们通过它来传递获取到的HASH作为代替,之后细讲.(下图为 Impacket的P**ec脚本使用获取目标shell)。


image.png

微软也有自带的 P**ec (合法的数字签名过)。


image.png

图中命令后面加个 ”-s” 可以返回 SYSTEM 权限的shell.


image.png

WMI:

Windows 下我们也能用WMIC(内置不需要下载),

WMIC

不仅可以让你在远程目标上执行命令, 还能提升WMIC去获取敏感信息和配置操作系统,这些功能已经全部内置。


image.png

当然你必须知道怎么用 ”cmd.exe /c” and “powershell.exe-exec bypass -command”去达到你的目的.我们提到的所有工具都已经集成了这些基本功能.我们回到用WmiExec ,通过图中命令获取到下图信息, 这时候你可能已经有了一个可以用来获取hash的半开的shell.


image.png

最后用 PowerSploit’s

Invoke-WmiCommand

获取hash,由于PSCredential object的关系,这玩意可能比较满要花点时间。 但是用这个脚本你可以获取到如下输出以及内存中的数据。


image.png

Pass-The-Hash, WCE & Mimikatz:

有的时候你用工具可能只能获取到账号的NTLM hash拿不到明文。 这时候你可以用 metasploit (p**ec) 或者 Impacket (只要是支持PTH的都可以), 之后就简单了。如果你能确定目标本地的windows环境,那就可以用 WCE 或者 Mimikatz 注入NTLM hash 到进程中。


image.png

缺点就是使用WCE的做以上操作的话,100%肯定会被发现攻击行为。Mimikatz则是利用 powershell w00t! 来直接载入到目标内存中。我习惯用编译过的二进制。


image.png

需要注意以上的例子中 domian 设置成了 ”.”,因为bob的账号虽然属于本地账号,但是也可以当作域账号来使用。我们有很多办法可以获取到shell。也许这部分看起来有点重复,但多知道几个办法没有坏处啊~。 在不同的被限制的情况下可能只有特定的办法可以成功。 需要注意 P**ec variants 都可以获取到 SYSTEM 权限 shell 但 WMI variants只能以登录用户权限来执行命令. 再说一遍多知道点办法没有坏吃。

Smash-And-Grab

在成功进入到目标子网中之后,我们就可以开始经典的”samsh and grab”操作了。我们的目标是收集到所有可以收集到的信息(明文,hash 密码)。然后考虑如何利用他们。

Metasploit (Mimikatz & hashdump):

通过meterpeters返回的active session 我们可以用使用Mimikatz 获取到明文密

码,或者可以使用hash dump 来获取到所有的本地账号的hash。


image.png


Secretsdump & Invoke-Mimikatz:

除了上面的办法,我们还可以用Impacket’s SecretsDump 和 Powersploit的Invoke-Mimikatz来达到同样的效果(这种情况下 Invoke-Mimikatz 需要被下载到目标服务器上运行)。看下图中,我已经精简化了powershell下载和执行mimikatz的命令.


image.png


当然除了上面的还有其他办法,基本套路和工具类似。

侦察

现在我们有了一台REDHOOK域中的机器并且他链接了另外一个子网。我们现在可以开是侦察了!

Impersonation:

因为我们需要了解 domian 的细节内容,我们需要得开一个domian user权限的shell. 这会有一点点问题,我们现在拥有的shell权限不是bob的话就是SYSTEM。但是我们可以用 NtQuerySystemInformation 这种神奇的操作来找到其他用户的token 并且切换成他们的身份, 这个功能就是著名的安全工具


incognito

的主要功能。如图,我们看见”REDHOOK\asenath.waite” 已经登录了系统,所以它是优选攻击目标。.

如下图Meterpreter已经内置了可以i让过程简化的 incognito 插件


image.png

或者你可以用 Luke Jennings 写的

incognito

binary。 这个工具和 P**ec 功能类似可以用于远程攻击.


image.png

最后再推荐使用 PowerSploit 的

Invoke-TokenManipulation]Invoke-TokenManipulation

但是不是很推荐因为安全性不是很靠谱。我已经给他们提了两个相关漏洞(

#112

&

#113

)如果这些问题解决了(尤其是113)我会更新下相关操作。我觉得用PowerShell 做 tokenimpersonation操作是最方便的!

Domain 侦察:

现在我们已经取得了一个具有domain user 权限的shell,我们需要看目前的范围

下有哪些攻击目标 (操作如下)。

如上图上图所示有了一点获取 domian 管理员的思路。

(1) 中可以看出本地用户 TemplateAdmin 同时是 “client1″ 和 “client2″的管理员.

(2) 虽然我们没有TemplateAdmin 的明文密码但是我们有他登录 “client2”的密码Hash.

(3) REDHOOK\Administrator 账号能 登录”Client2″, 加入我们在用户的登录的情况黑掉他,我们就可以获取到明文密码。我们现在就可以切换成他的账号。这个时候我们就相当于黑掉了这个domain!

考考你们:为什么说”REDHOOK\Administrator”是domian 管理员组的? 这种问题可能会出现在MCSA考试中。

Socks Proxy:

还有一件事我需要提到下. metasploit’s 通过建立的sessions转发流量,之后我们就可以通过sock 代理进行登录目标机了. 在使用metasploit 或者 cobaltstrike这个操作相当好用。


image.png

通过使用“session 1”做route我们就可以用metasploit的各种模组来测试之前测试不到的 /24 子网中的主机啦!


image.png

另外,我们可以使用 proxychains (就是一种socks 代理的方式) 来做代理获取到进入的目标机的权限。在设置proxychains时需要正确的设置成metasploit module使用的端口。


image.png

还有就是socks proxy只允许 TCP流量. 留意下这个限制.用windows主机的话不能直接用命令行设置socks proxy。 但是我们能用 netsh来做端口映射(之后再说) 如果你还想要更强大的功能,你可以尝试用plink来做些SSH牛逼操作。但是这个是本次谈论范畴之外的了。

黑掉 Client 2

从”Client 1″ and “Client 2″ 两台机器上的 同时拥有 TemplateAdmin账号的情况,很有可能密码也是相同,像这样我们拿下”Clinet 2″的过程和我们上面的例子就没什么区别了。 唯一区别我们需要 pivot 下我们的shell,还有我们使用hash而不是明文。下面我介绍两种办法,当然还有其他的办法。

Metasploit (PortProxy & P**ec):

虽然我们可以通过metasploit访问”Client 2″ 但是链接返回时会出现问题。 这时候我们需要用到portproxy 模组在”Client 1″来建立端口映射。


image.png

上面的看着可能有点难懂. “Client 1″ 在 10.1.1.2:9988 上监听, 然后转发所有数据到10.0.0.128:9988. 所有的都在后台发生。事实上在Windows中封装在netsh上。剩下的就是要稍微重新配置下P**ec。


image.png

Impacket (P**ec) & netsh:

首先我们要在”Client 1″上用netsh先手工设置端口转发。


image.png

我们现在设置管关于转发10.0.0.129:5678 到 10.1.1.3:445的策略.Impacket’sP**ec 需要连接到一个自定义端口, 默认的话我们不能直接用命令做到,要用python代码实现。


image.png

稍作修改之后就可以很简单的P**ec到10.0.0.129 然后被转发到 10.1.1.3!


image.png

记得用完之后把端口转发规则清掉,下面这个就是命令。


image.png

纯windows环境?:

恭喜你~ 没办法~ , 假如攻击者使用的是windows环境,P**ec 没法使用默认端口。另外,假如攻击者的机器445端口被占用,上面设置的端口映射规则将无效。(例如这样的规则: 127.0.0.1:445 –> 10.0.0.129:5678). 还有SMB也不能选择临时关闭, 每次关闭了之后系统都需要重新配置,然后在重启才能打开所以非常的恶心。如果那位大神有办法,请告诉我下怎么解决。这中情况下最好的办法是用pyinstaller 对Impacket’s P**ec进行修改然后重新编译 和maaaaz 的操作类似

href

Smash-And-Grab

这个步骤取决于”Client 2″ 怎么认证REDHOOK\Administrator,可能和第一实例中的不太一样。例如,假如我们用  ”net use \\10.1.1.3\C$” 是没有办法获得明文密码或者hash的, 但是”net use\\10.1.1.3\C$ /user:REDHOOK\AdministratorXXXXXXX” 就都能拿到。 In essence,是这个取决于REDHOOK\Administrator用户在登录是有没有输入密码登录。

以下的办法很可能直接解决问题。甚至在没有明文密码的情况下,我们也可以找到一个以REDHOOK\Administrator权限运行的进程然后用incognito impersonate(劫持) 它的 token从而得到此进程的权限。

Metasploit Easy-Mode (Mimikatz & hashdump &incognito):


image.png

这里我们运气比较好,或者说我们的步骤都是预先安排好的呵呵!~我们现在在看下incognito的基础用法。


image.png

Impacket (P**ec) & incognito:

由于pivot的关系我们会有点被限制. 为了演示 我们可以在远程主机上使用incognito , 但是和Invoke-Mimikatz比较有点不太方便 。


image.png

在跑了这个命令之后会卡住。我进程遇到这种情况,并发现假如不用 “-c”(interactive 模式) 参数就不会卡住。 但是这样命令就不会正确执行了~ 。 如果你不把命令全放在一个bat文件中,那只会运行第一行然后就卡住。 以上情况只有在通过 P**ec 执行 incognito 会出现。

虽然这是一个非常简陋的解决方案,当我们登回机器的时候,我们可以看见我的batch脚本已经正确执行了。


image.png

如果谁有更优雅的办法,赶紧告诉我!

文件传输:

这里我用的是Impacket’s P**ec自带的 ”put” 命令 。更好的办法是用下载的方式把文件传到 pivot box 上,比如我们可以用 Powershell 的 webclient 或者bitsadmin 来做下载操作。其他的办法可以参考Parvez 的文章

here

.一旦文件传输成功,我们就可以在主机上创建一个不被限制的 windows 分享文件夹。

Compromising Redrum-DC

目前我们已经获得到了REDHOOK\Administrator 的明文密码,或者我们可以创建自己的 Domain 管理员账号。这样一来我们拿下域控制器的流程就和拿下”client 2“ 一样了。 我就懒得把同样的步骤再打一遍啦~你可以混合使用之前提到的操作。这下面细讲的两个例子,和之前的讲的稍微有点不同。

Socks Proxy & Impacket (WmiExec):

记得我们之前设置的 socks proxy ? 我们可以用来代理所有拿下这个域的操作.另外提醒下socks proxy 一定要做在 pivot 上。为了有点变化, 这里我们用Impacket’s WmiExec举例。


image.png

很简单吧?但是这个不是在所有情况下都能用所以你最好要知道其他的办法。

Sysinternals (P**ec) & Invoke-Mimikatz:

回到我们的主要目标:获取到REDHOOK\redhook.DA的可用鉴别信息。此处我们用到Invoke-Mimikatz的dump 远程主机的鉴别信息的功能. Essentially, 我们得到 ”Client 1″ REDHOOK\Administrator权限的shell然后在域控制器上启用Mimikatz。 我们这假设已经在kali 环境中得到了一个REDHOOK\redhook.DAactive session.


image.png

由于 windows 2k12 r2/8.1

enhanced protection features (安全防护)

,我只dump到了hash。拿到明文密码基本是不可能的。但是,如图中所示我们已经获得了REDHOOK\redhook.DA  NTLM hash 所以已经有了足够登录域中其他终端的条件。


image.png

注意:我们这里用0填充了HASH的LM部分(用什么填充都无所谓)。当然我们这里不只限用Impacket, Metasploit’s P**ec 也可以用来组装执行命令中的NTLM hash 。

Pillaging NTDS

获取NTDS通常是最后一步。我非常建议你看下 Sean Metcal 的文章

here

。他的文章描述了几种不同获取本地shell 连接域控制器的操作,还有远程使用WMI的操作。下面我简单说两种办法。

Volume Shadow Copy (Classic-Mode):

我们可以用 vssadmin 来进行这方面的操作.

得到文件之后,我们可以本地使用Impacket’s SecretsDump 来获取文件内容。 见下图


image.png

NTDS可能包含成千上万的用户账号信息,信息量比较大。测试的时候不要超纲瞎搞, 等下管理员会被你吓死的!我们还可以使用

Invoke-NinjaCopy

一样的效果, 可以参考 Sean Metcalf的文章 .

Socks Proxy & Impacket (SecretsDump) (Easy-Mode):

如果你已经设置好了pivot 的socks代理 ,那我们就可以简单对 SecretsDump 进行代理。然后用明文或者Hash来登录域控制器。


image.png

总结

这个帖子的主要目的是说一下几种不同的攻击技巧,根据不同的情况下可以选用到其中几种办法。希望这帖子能让你了解到在DA中横向移动的技巧!

作者:Ruben Boonen

翻译:i春秋翻译小组-1337g

审核人员:F0rmat

翻译来源:




http://www.fuzzysecurity.com/tutorials/25.htm