freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

超详细的域渗透过程!
i_春秋 2018-05-02 16:03:30 677034

大家好!我们在这个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'sInvoke-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

# web安全
本文为 i_春秋 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
网安技术解析
i_春秋 LV.6
培育信息时代的安全感
  • 255 文章数
  • 177 关注者
海淀“警学联盟·校园无诈”防电诈宣传活动
2023-04-24
专业爱好者周年狂欢丨在线征稿,瓜分万元现金奖励!
2023-04-13
【春秋云境.com】内网极限挑战赛,首批官方认证证书等你来拿!
2023-04-07