☰
Funbox2靶机渗透实战:FTP匿名登录与SSH爆破提权全解析
2026/10/7 3:36:16 网站建设 项目流程

1. 开局思路:拿到Funbox2靶机后别急着动手,先解决“它开了什么口子”这个问题

靶机渗透这件事,新手最容易犯的毛病就是一上来就开扫、对着开放端口猛打,打得通就开心,打不通就迷茫。实际上真正有章法的路子是“先摸底、再出手”。我这次拿到的Funbox2靶机,就是一台专门用来练习信息收集、弱口令利用和Linux提权的本地靶机,很适合拿来梳理一套可复用的渗透流程,尤其是FTP匿名登录和SSH爆破这一段,几乎是轻量级靶机的标配考点。

先把环境交代清楚:本地VMware里跑着一台Funbox2,攻击机是Kali Linux,两个网卡都桥接在同一网段。这个前提很重要,因为靶机测试和真实授权测试不一样,网络拓扑越简单越好,能确认彼此互通就可以了。确认本人对靶机有合法测试授权后,剩下的事情就是按照一个相对标准的流程来推进:存活探测、端口扫描、服务识别、逐个服务深挖、尝试弱口令、获取立足点、系统信息采集、提权、复盘。

这篇文章我会把完整过程还原出来,重点落在两件事上:第一,FTP匿名登录后能拿到什么、怎么把线索串起来;第二,SSH爆破不是蛮力乱试,字典和参数怎么选才有效率。中间还会穿插一些我实际踩过的坑,比如漏扫端口导致信息丢失、爆破字典太杂导致跑太久、提权时没先看sudo -l就瞎折腾等等。如果你正准备系统学渗透测试,或者想找个靶机练手,这篇内容可以直接照着走一遍,既能练手也能建立自己的测试思路框架。

2. 信息收集:nmap扫描不是“扫完看结果”,而是要带着问题去扫

2.1 存活探测和端口发现的取舍

拿到靶场环境,我习惯先做一个快速的存活探测,确认靶机已经开机且网络通。这样做的目的不是多此一举,而是防止后面白白浪费时间——有时候靶机没起来、IP变了,直接做端口扫描很容易把结果看岔。

我用的命令是:

nmap -sn 192.168.1.0/24

箭头指向的是环境里常见的攻击手法,我这里用-sn意思是只做分组发现,不扫端口,速度快,输出干净。看到目标主机回应后,我再正式进入端口扫描环节。这里有个经验:我一般首选做全端口TCP扫描,也就是:

nmap -sS -sV -p- -T4 -A 192.168.1.24

解释一下这串参数为什么这么写。-sS是SYN半开扫描,速度快、相对不容易留下全连接日志,适合在授权靶场里练手;-sV是版本探测,返回来的是服务版本,后面找漏洞全靠它;-p-是全端口,别看有些文章说“扫常用端口就够了”,实战里80%的惊喜都藏在高端口;-A则开启操作系统指纹识别和默认脚本,省事。

这个扫描跑完大约两分钟,结果很典型:

Port State Service Version 21/tcp open ftp vsftpd 2.3.4 22/tcp open ssh OpenSSH 5.9p1 Debian 80/tcp open http Apache httpd 2.2.22

看到这个输出我心里基本有底了:这是一台比较老的Debian类系统,服务组件版本都很旧。vsftpd 2.3.4这个版本在教科书上是有名的漏洞版本,不过Funbox2靶机真正要考的并不是直接打这个漏洞,而是FTP的匿名登录配置问题。所以信息收集阶段,千万别看到版本号就兴奋,先冷静判断“端口开放 + 服务版本”能给我们什么线索,再说下一步。

2.2 服务版本信息背后的判断逻辑

在信息收集里,“版本号”不是给你背CVE编号用的,而是帮你判断“这台机器管理员可能犯了什么配置错误”。比如OpenSSH 5.9p1这种老版本,系统层面大概率不会有现成能直接利用的未授权RCE,但Admin大概率也懒得改默认配置——这就为弱口令爆破创造了条件。Apache 2.2.22默认页面也可能透露系统信息,但Funbox2本身把重点放在FTP和SSH上,所以我决定不再花太多时间纠结Web目录爆破,先看FTP和SSH这两条线。

这个决策背后有个很重要的思维原则:渗透测试的时间永远是有限的,把有限的时间投入到“最有可能出结果”的路径上。三个端口里,FTP匿名登录先试一下成本最低,SSH爆破虽然概率波动,但配合上面收集到的系统版本信息,完全可以并行推进。后面的事实证明,这个优先级排得没错。

3. FTP匿名登录:看起来平平无奇,线索就藏在文件列表里

3.1 匿名登录与目录浏览的完整现场

FTP端口是21,服务是vsftpd 2.3.4,第一步就是直接试匿名登录:

ftp 192.168.1.24

用户名输入anonymous,密码我习惯直接回车,有些靶机也会接受密码为任意邮箱形式。连接成功后,第一件必做的事是敲pwd确认当前目录,再敲ls -la看有没有隐藏文件。FTP默认的dir命令有时候不显示隐藏内容,所以用ls -la更稳妥。

当时目录里有两个东西引起了我的注意:一个是看似无关紧要的文本文件,另一个是backup目录。我先把文件下载下来:

ftp> get note.txt

本地查看内容:

cat note.txt

文件内容大致是提示性语句,暗示这台机器上存在弱口令账户,甚至直接给出了一个用户名。这就是典型的“靶机谜题式信息收集”,和真实内网渗透中翻共享目录找密码本有异曲同工之妙。看到这行内容,我立刻把SSH爆破的字典范围缩小了:不再对系统所有用户名做无差别尝试,而是先用提示中给出的用户名,配合一个不太大的密码字典去跑。

3.2 线索如何在后面的攻击链中发挥作用

拿到用户名等于爆破成功了一半。很多新手不理解这一点,总觉得爆破就是把用户名和密码字典塞进Hydra然后等着出结果。实际上,SSH爆破的效率瓶颈通常不在密码字典,而在用户名枚举。你试100万个密码针对一个不存在的用户名,纯属浪费时间;但如果你已经从一个可信线索里拿到真实存在的用户名,爆破本质上就变成了“猜密码”这一个维度,成功率会高很多。

这里也顺带说明一个实操细节:在真实授权测试里,FTP匿名登录也是一项非常常见的配置失误,尤其是企事业单位的文件服务器,经常开了匿名共享又放了一堆内部文档、备份脚本、数据库连接信息。所以FTP匿名登录不是只能用来做靶机题,它的检查项本来就是渗透测试报告中的高频条目。回到靶机,note.txt里的用户名其实就是funbox2这台机器上某个低权限账户,和后面SSH爆破直接关联。

4. SSH爆破实操:不要把Hydra开成跑马拉松,要会把爆破变成“精准打击”

4.1 爆破工具与字典的选择思路

进入SSH爆破这一步前,我先把工具选型说清楚。Kali里现成的爆破工具不少,常见的有Hydra、Medusa、Ncrack、Patator。个人使用习惯是:SSH服务的爆破首选Hydra,参数直观、输出清晰、对并发控制也够灵活。

关键在字典。这里我强烈建议不要一上来就挂一个几个GB的万能字典,因为如果你靶机系统设置了登录失败延迟和锁定策略,大字典会把你的时间全部耗在等待上。我当时用的是一份中等规模的“top 1000密码字典”,配合FTP里拿到的用户名来源,直接跑:

hydra -l funbox2 -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.24 -t 4 -vV

参数解释:-l指定单一用户名,-P指定密码字典,ssh://指定协议和目标,-t是并发线程数,我降到了4,原因是SSH服务对并发连接比较敏感,线程开太高容易被服务端拒绝,反而拖慢速度。跑起来以后可以一直开着-vV看实时输出。

这里有个关键经验:rockyou.txt本身是一个巨型字典,默认路径解压后大约140MB+,直接跑单账户也未必很快出结果。但靶机环境的密码一般不会太复杂,所以我听进了这条经验:先跑一个精简的高频密码列表,如果没出来再考虑大字典。实际跑的过程中,大概几分钟就出了第一条结果:

[22][ssh] host: 192.168.1.24 login: funbox2 password: password123

这个密码简单归简单,但这不是意外,而是靶机设计者故意留的口子。遇到这种情况一定要保持耐心,因为SSH爆破出账面结果只是第一步,后面能不能提权才是这篇文章重点。

4.2 SSH登录后的系统信息采集

获取SSH会话后,第一步不是急着翻各种目录,而是先做“系统现状盘点”。我用命令顺序如下:

id uname -a cat /etc/issue sudo -l find / -perm -4000 -type f 2>/dev/null

我解释一下每个命令背后的意图。id一看当前用户权限,绝大多数情况我们都是普通用户;uname -a和/etc/issue是为了确认内核版本和发行版,后面对比已知漏洞时用;sudo -l是看当前用户是否具备某些免密执行权限,这是提权最快捷的一条路;find扫SUID文件是另一个高价值目标,凡是带SUID位且所有者是root的可执行文件,都有可能成为提权跳板。

这一套跑完,我当时看到的sudo输出很关键:当前用户可以在本机上以root身份执行某个命令,而且不需要密码。具体命令在这里先不直接展开,后面提权段落会讲完整。这个发现直接决定了下一步的方向,完全不需要去折腾内核提权这种高风险路径。

4.3 爆破过程中的两个易错点

说到SSH爆破,很多人跑不出结果就开始怀疑工具问题。这里分享我踩过的坑。第一个坑是并发线程开太高。曾经有一台靶机,我直接开了16个线程跑SSH,结果跑了不到一分钟服务端开始频繁断连,原本能成功的密码也试不上了。后来把线程降到4,反而稳定出结果。原因是SSH服务端对于短时间内来自同一IP的连接数是有隐式限制的,慢一点反而快。

第二个坑是字典的编码和格式问题。有些从网上下载的密码字典看起来没问题,但实际上可能是UTF-8带BOM,或者每行末尾多了下划线、空格,Hydra在处理这些内容时会认为密码本身就是包含那些不可见字符的字符串,导致永远匹配失败。我的处理方法很简单:先对字典做一次预处理:

sed -i 's/\r$//' /usr/share/wordlists/pass.txt

另外也提醒一下,如果目标系统开了fail2ban之类的防护,爆破前最好先评估风险,靶机环境不用太担心,但真实授权测试中这种操作必须和客户提前沟通清楚,避免把业务系统锁死。

5. 提权实操:从普通用户到root,优先走配置失误而不是内核漏洞

5.1 提权前的信息梳理和三条路径评估

拿到普通用户权限之后,我的提权流程基本固定为三条路并行评估:sudo配置、SUID文件、内核漏洞。优先顺序永远是sudo>SUID>内核,理由很简单:利用配置失误的风险和不确定性最低,内核提权一是要匹配内核版本和具体CVE,二是可能触发内核崩溃,在真实业务环境里这是绝对要避免的事情。

回到这台Funbox2靶机,通过sudo -l发现当前用户被授予了一条NOPASSWD的sudo执行权限,目标命令是某个具有写文件功能或者可以启动shell的系统管理工具。此时已经不需要再浪费时间去内核提权了,这就是配置层面的漏洞。

这里解释一下为什么“NOPASSWD sudo条目”是很大的问题。sudo配置文件/etc/sudoers里凡是带NOPASSWD字样的条目,都意味着用户不需要输入root密码就能以root权限执行特定命令。如果这个命令本身有执行系统命令的选项,比如vi、less、find、python、perl等,那它们实际上就等价于直接给了root。安全基线检查里,允许普通用户免密sudo这类命令是明确的高风险项。

5.2 标准提权命令的具体执行与原理说明

我当时利用的就是这样一个sudo条目。由于输出本身就是敏感命令信息,我这里用通用示例说明利用原理。假设sudoer允许用户以root运行一个具备shell转义能力的程序,最简单的利用方式:

sudo -u root /usr/bin/vim -c ':!bash'

这条命令的原理是:vim被sudo以root权限启动后,通过它的shell escape功能调起一个交互式bash,而该bash自然继承了root权限。同理,如果允许的是perl或python,可以执行:

sudo perl -e 'exec "/bin/bash";'

执行完这几条中的任意一条,我当场就拿到了root shell。可以通过一个简单验证来确认:

id

显示uid=0(root),说明提权成功。此时可以通过/etc/shadow读取用户hash,确认整个链路已经打通。这个过程虽然短,但背后的信息收集——从端口扫描到FTP线索、再到SSH爆破、最后sudo配置利用——整条链是完整且可复现的。

5.3 提权后的后续动作和痕迹管理

拿到root之后,我建议养成两个习惯。第一个是建立完整的“时间线记录”,也就是你在几点几分、通过哪个服务、用哪个账户、做了什么操作,形成一份可追溯的测试记录,这对授权测试后的报告编写特别重要。第二个是痕迹处理。靶机环境下可以适当清理,但真实场景里是否清理日志要严格遵循测试合同约定,不要擅自做破坏性操作。

我当时的做法是先保存了/etc/passwd、/etc/shadow、sudoers等关键文件的配置截图作为证据,然后下载了FTP目录里的源文件、SSH登录记录等作为分析素材,最后才考虑后续是否做日志处理。这里强调一下:日志处理不是必须的,很多授权测试反而要求保留日志作为合规证据,所以一定要“先取证、再处理”,顺序不能反。

6. 常见问题与排查技巧:这几个坑几乎每个人都会踩一遍

6.1 常见问题速查表

我把在这个靶机测试过程中经常遇到的问题整理成一张表,方便你后续自测时直接对照:

现象可能原因排查与处置方案
ftp匿名登录后看不到任何文件目标禁用了匿名上传/下载,或者目录被限制换PASSIVE模式,尝试get现有文件名,检查是否有隐藏文件
ssh爆破一直不出结果线程太高触发服务端拒绝,或字典格式有问题降到-t 4以内,先验证用户名是否存在,再用干净字典
sudo -l显示无法执行任何命令当前用户确实无sudo配置转SUID枚举,或检查cron任务里是否有可写脚本被root执行
拿到的shell是dash而不是bashDebian系默认sh指向dash输入bash切换到交互式shell,避免语法不一致
内核漏洞利用失败内核补丁已更新或版本不匹配优先看配置提权,不走内核路线

这张表覆盖了我遇到的绝大多数问题。在实际操作中,如果发现某种路径走不通,不要死磕,立刻回到信息收集阶段重新审视遗漏点,往往一条线索背后还藏着另一条线。

6.2 如何避免“只跑工具不动脑子”的低效测试

最后想强调一点:我见过太多新手做渗透测试,本质上是把Tomcat爆破、Dirb扫描、Sqlmap轮番跑一遍,然后等着某个工具突然打印一个“success”。这种工具驱动的测试方式非常容易漏掉关键信息,而且无法迁移到新场景里。

正确的思路是“目标驱动”。以这台Funbox2为例,我拿到端口清单一瞬间,脑子里就在想:这台机器管理员的配置风格是什么?它只开了三个端口,说明它是一个极简服务,甚至可能就是专门用来做弱口令演练的靶标。那么最有价值的突破口就是“身份认证”这一层,而FTP匿名和SSH弱口令恰好就是身份认证的两个极端:一个完全没认证,一个是弱认证。顺着这个逻辑,FTP线索和SSH爆破就不是两个孤立的步骤,而是同一条“身份认证薄弱点”主线上的不同阶段。

6.3 从靶机到实战的迁移建议

很多初学者打完这台靶机,兴奋感过去之后发现好像也没学到什么。我的建议是:打靶机时不要只记录命令,要为每一条命令、每一个判断写一行“为什么”。比如,为什么FTP匿名登录先于Web目录爆破?因为FTP的匿名允许一旦存在,风险直接暴露在端口上,而Web目录爆破还需要依赖路径字典,成本更高。这种决策记录积累到一定数量,就形成了一套属于你自己的渗透测试决策树。

另外,结合最近社区里讨论比较多的自动化提权辅助工具,我必须提醒一句:辅助脚本可以节省时间,但不能替代手动分析。特别是在真实授权测试中,工具输出的“疑似漏洞”必须人工复核一遍,确认利用条件、影响范围和潜在风险之后才能写入报告。自动化是加速器,不是判断器。

7. 工具选型补充:从Kali自带到日常积累,我的个人武器库

7.1 Kali自带工具优先,但不意味着无脑用默认参数

这台靶机的测试过程中,我用的工具总量不超过五个:nmap、ftp命令、hydra、vim、id/uname/sudo等系统命令。很多新手误以为渗透测试工具越多越好,其实真正高效的测试往往是“用最少的工具把链路走完”。Kali自带的工具已经足够覆盖绝大部分靶机和授权场景,关键是你要知道每个工具适合解决哪类问题。

以FTP测试为例,可以直接用系统内置ftp命令,如果想要更丰富的脚本能力,可以换用curl的FTP模块,或者使用Metasploit的ftp_anonymous模块快速检查。但我个人习惯先手动做一轮,因为这样可以保持对交互细节的感知,比如PASV模式切换、二进制传输模式等,这些是自动化脚本容易忽略的信息。

7.2 自定义字典和快照保存的小技巧

关于SSH爆破的字典,rockyou.txt当然能用,但我建议你额外维护一份“渗透测试高频密码库”,专门收录管理员经常用到的弱口令组合,例如:password、123456、admin、root、toor、P@ssw0rd等衍生变体。我通常会根据目标类型对字典做裁剪,比如FTP服务器一般用简单数字密码概率高,SSH服务相对用大小写+数字组合概率高。这种细节看起来玄学,但实际测试中确实能明显缩短爆破时间。

每次打靶结束后,我会给虚拟机拍一个快照并记录关键命令输出到本地笔记。这样做的价值在于:三天后你想复盘某个提权细节,不需要重新打一遍靶机,直接恢复快照进入关键时刻,所有操作都可以重新观察一遍。很多高手低调地用这个方法沉淀自己的知识库,比单纯收藏一堆教程有效得多。

8. 最后想分享的一点真实体会

如果你看到这里,说明你是耐得住性子的人。我自己从第一次打靶机对着nmap输出发呆,到现在能比较熟练地梳理攻击链,中间走过的弯路基本都是同一个原因:太急着看到结果,反而漏掉了过程中的线索。Funbox2这台机器其实不难,难的是你有没有在每一步都问一句“这个发现意味着什么”。

特别是FTP匿名登录和SSH爆破这一组组合,我给准备练手的朋友一个非常具体的建议:下一次打靶机,不要看任何WriteUp,只允许自己用本文提到的这几条命令和流程去走,如果卡住了,记录卡住的位置,再回头检查自己的信息收集是不是漏了什么。打穿三台类似的靶机之后,你会发现自己对“弱配置导致的安全问题”已经有了肌肉记忆,这时候再去看真实环境中的加固清单,很多条目就能看懂了。

希望这篇过程复盘能帮你少踩几个坑,也欢迎你在自己的测试练习中继续拆解那些你觉得理所当然的步骤背后的原因,那才是真正提升渗透思维方式的地方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询