企业安全

超详细的域渗透过程

转自i春秋:https://bbs.ichunqiu.com/thread-39555-1-1.html
大家好!我们在这个write up 里讲下几个不同的入侵 windows domian 时的横向操作。 内容不会过于深入,而会介绍一些基本技巧和流程. 为了保证测试客观性所以我将使用我们的测试对象 lock domain “REDHOOK”. 希望这会成为我们第一个关于 windows domian 的系列教程. 如果你要具体了解某些细节(比如kerberos tickets)欢迎发email 谢谢 (作者鬼佬,要问写英文)!
 
实例:
 
我们的目标是获取 "redhook.DA" 域账号的鉴别信息. 假设我们做为攻击者已经成功的进入到目标企业的内部网络,但是我们和目标不在同一个 domian controller 的管理范围, 如下图所示.
 
 

 

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

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

 

如果在windows上使用cmd命令

 

 

如上图中所示我们可以看出主机 “WIN7-ENT-CLI1” 连接的是 REDHOOK domain.
 
P**ec:
 
我们使用 metasploit's P**ec 可以很容易的获取到反弹shell 注意smbuser置的bob是本地账,如果 “net use” 命令下我们必须用 “REDHOOK\bob” 同时我们就不设置SMBDomain 参数
 
 

 

除了MetasploitP**ec,我们还能用 ImpacketP**ec(RemComSvc 模拟P**ec),
 
[AppleScript] 纯文本查看 复制代码
 
在没有明文密码的时候我们通过它来传递获取到的HASH作为代替,之后细讲.下图为 ImpacketP**ec脚本使用获取目标shell)
 

 

 
微软也有自带的 P**ec (合法的数字签名过)。
图中命令后面加个 "-s" 可以返回 SYSTEM 权限的shell.

 

 

 

 

WMI:
 
Windows 下我们也能用WMIC(内置不需要下载),WMIC不仅可以让你在远程目标上执行命令, 还能提升WMIC去获取敏感信息和配置操作系统,这些功能已经全部内置。
 

 

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

 

 

 

 

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

 

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

 

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

 

 

 

 

 
需要注意以上的例子中 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

 

 

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

 

 

 

 

 
当然除了上面的还有其他办法,基本套路和工具类似。
 
侦察
 
现在我们有了一台REDHOOK域中的机器并且他链接了另外一个子网。我们现在可以开是侦察了!
 
Impersonation:
 
因为我们需要了解 domian 的细节内容,我们需要得开一个domian user权限的shell. 这会有一点点问题,我们现在拥有的shell权限不是bob的话就是SYSTEM但是我们可以用 NtQuerySystemInformation 这种神奇的操作来找到其他用户的token 并且切换成他们的身份, 这个功能就是著名的安全工具
 
的主要功能。如图,我们看见"REDHOOK\asenath.waite" 已经登录了系统,所以它是优选攻击目标。.

 

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

 

 
或者你可以用 Luke Jennings 写的 incognito binary 这个工具和 P**ec 功能类似可以用于远程攻击.

 

 

 



最后再推荐使用 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这个操作相当好用。
 

 

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

 

 

 

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




还有就是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"来建立端口映射。

 

 

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

 

首先我们要在"Client 1"上用netsh先手工设置端口转发。
 
 
我们现在设置管关于转发10.0.0.129:5678 10.1.1.3:445的策略.Impacket'sP**ec 需要连接到一个自定义端口, 默认的话我们不能直接用命令做到,要用python代码实现。
 
 
稍作修改之后就可以很简单的P**ec10.0.0.129 然后被转发到 10.1.1.3!
 
 
记得用完之后把端口转发规则清掉,下面这个就是命令。
 
 
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):
 
 
这里我们运气比较好,或者说我们的步骤都是预先安排好的呵呵!~我们现在在看下incognito的基础用法。
 
 
Impacket (P**ec) & incognito:
 
由于pivot的关系我们会有点被限制. 为了演示 我们可以在远程主机上使用incognito , 但是和Invoke-Mimikatz比较有点不太方便

 

 

 

 
在跑了这个命令之后会卡住。我进程遇到这种情况,并发现假如不用 “-c”(interactive 模式) 参数就不会卡住。 但是这样命令就不会正确执行了~ 如果你不把命令全放在一个bat文件中,那只会运行第一行然后就卡住。 以上情况只有在通过 P**ec 执行 incognito 会出现。
虽然这是一个非常简陋的解决方案,当我们登回机器的时候,我们可以看见我的batch脚本已经正确执行了。
 
 
 
如果谁有更优雅的办法,赶紧告诉我!
 
文件传输:
 
这里我用的是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举例。
 
 
很简单吧?但是这个不是在所有情况下都能用所以你最好要知道其他的办法。
 
Sysinternals (P**ec) & Invoke-Mimikatz:
 
回到我们的主要目标:获取到REDHOOK\redhook.DA的可用鉴别信息。此处我们用到Invoke-Mimikatz dump 远程主机的鉴别信息的功能. Essentially, 我们得 "Client 1" REDHOOK\Administrator权限的shell然后在域控制器上启用Mimikatz 我们这假设已经在kali 环境中得到了一个 REDHOOK\redhook.DAactive session.
 
 
由于 windows 2k12 r2/8.1 enhanced protection features (安全防护)我只dumphash。拿到明文密码基本是不可能的。但是,如图中所示我们已经获得REDHOOK\redhook.DA  NTLM hash 所以已经有了足够登录域中其他终端的条件。

 

 

 

 
注意:我们这里用0填充了HASHLM部分(用什么填充都无所谓)。当然我们这里不只限用Impacket, Metasploit's P**ec 也可以用来组装执行命令中的NTLM hash
 
Pillaging NTDS
 
获取NTDS通常是最后一步。我非常建议你看下 Sean Metcal 的文章 here 。他的文章描述了几种不同获取本地shell 连接域控制器的操作,还有远程使用WMI的操作。下面我简单说两种办法。
 
Volume Shadow Copy (Classic-Mode):
 
我们可以用 vssadmin 来进行这方面的操作.
 
得到文件之后,我们可以本地使用Impacket's SecretsDump 来获取文件内容。 见下图
 
 
NTDS可能包含成千上万的用户账号信息,信息量比较大。测试的时候不要超纲瞎搞, 等下管理员会被你吓死的!我们还可以使用 Invoke-NinjaCopy 一样的效果, 可以参考 Sean Metcalf的文章 .
 
Socks Proxy & Impacket (SecretsDump) (Easy-Mode):
 
如果你已经设置好了pivot socks代理 ,那我们就可以简单对 SecretsDump 行代理。然后用明文或者Hash来登录域控制器。
 
 
总结
 
这个帖子的主要目的是说一下几种不同的攻击技巧,根据不同的情况下可以选用到其中几种办法。希望这帖子能让你了解到在DA中横向移动的技巧!

 

作者:Ruben Boonen
翻译:i春秋翻译小组-1337g
审核人员:F0rmat
翻译来源:http://www.fuzzysecurity.com/tutorials/25.html

转自i春秋:https://bbs.ichunqiu.com/thread-39555-1-1.html

转自i春秋:https://bbs.ichunqiu.com/thread-39555-1-1.html

(0)

关键词:

热评文章

发表评论