
最近在复盘vulnhub上的Breach 3靶场把它当成一次完整的实战前演练。说实话这几年带人入门安全测试最常被问到的问题不是“漏洞怎么利用”而是“我连入口都找不到接下来干什么”。DVWA和Pikachu这类靶场练的是漏洞原理而Breach 3这类综合靶场练的是完整思路两者正好互补。这篇文章就把Breach 3的“第一部分”单独拉出来聊透从环境搭建、目标探测到找到第一个可利用入口整个流程里的方法和坑我都写出来适合刚学完基础Web漏洞、准备往综合靶场进阶的人参考。1. 从标题看Breach 3靶场的定位与学习价值1.1 它和DVWA这类单点靶场有什么不一样DVWA是一个基于ApachePHPMySQL的应用里面把SQL注入、XSS、CSRF、文件上传这些漏洞做成菜单点开就能练它解决的是“漏洞长什么样、怎么触发”的问题。Pikachu也是类似路线更偏向中文教学场景每个漏洞点都标得明明白白。这类靶场的优点是上手快、反馈直接缺点是太“点菜式”了真实环境里没人帮你把漏洞标注好。Breach 3不是这种玩法。它是vulnhub上一台经典的“boot to root”靶机所谓boot to root就是给你一个虚拟机的启动入口你需要从零开始最后拿下系统最高权限才算通关。靶机里面会模拟出一个有站点、有服务、有用户行为的业务环境可能是博客系统、论坛程序也可能藏着备份文件、数据库、内部账号。你根本不知道漏洞在哪个角落一切都得靠信息收集和逻辑推断。我用一个不太严谨但很好理解的类比DVWA像是在健身房练器械每个动作都固定了Breach 3则是让你到野外跑一趟越野路上有什么障碍得自己看、自己绕。两者都需要但后者更接近真实需求。1.2 为什么把“第一部分”单独拿出来讲我经常看到有人下载完Breach 3启动靶机后对着黑屏发呆甚至怀疑镜像坏了。其实问题出在习惯上大家一上来就想“打漏洞”但忽略了整个流程中最吃功夫的前半段——信息收集。这部分内容我习惯称它为“第一部分”从靶机开机到找到第一个能交互的入口。很多人以为入口是扫描器跑出来的实际上恰恰相反入口是“串线索”串出来的。举个例子你会在某个备份目录里找到一个数据库文件数据库里存着一个后台用户名的哈希哈希爆破后登录后台后台里才有一个上传点。这条链路里任何一环漏了后面全断。把第一部分单独讲就是想让刚入门的人先把这套“线索串联”的节奏练熟而不是急着去搜exp、跑工具。1.3 打这个靶场前需要什么基础不需要你有多深的经验但三个基本功得扎实。第一个是Linux命令。至少会切换目录、查看文件、看进程和网络连接、理解用户权限因为这些操作在打靶过程中会被反复使用。第二个是网络常识比如TCP端口、HTTP状态码、DNS解析、内网网段这些概念搞不清楚很容易在环境配置上卡一天。第三个是常见Web漏洞的原理不需要会写很复杂的payload但至少能说清楚SQL注入是干什么的、文件上传的校验点在哪里、命令执行为什么危险。如果你这三个方面都比较模糊我建议先花两周把DVWA的低中高三档过一遍再来看这篇会更顺畅。基础越扎实越能体会到Breach 3第一部分的设计精妙。2. 靶场环境的搭建与准备工作2.1 虚拟机选型与镜像导入vulnhub上Breach 3的镜像下载下来通常是一个.ova文件这种格式打包了虚拟机的配置和磁盘直接用VirtualBox导入最省事。打开VirtualBox选择“导入虚拟电脑”选中.ova文件一路下一步就好。导入时注意看一下虚拟机名称和磁盘路径磁盘空间不足会导致导入失败。我遇到过几次导入到一半报错排查下来全是宿主机磁盘不够先把C盘或者存放虚拟机的分区清理出10GB以上再操作。如果你用的是VMware Workstation也可以导入.ova但导入后会多一些坑。最典型的是固件类型和网络适配器不匹配靶机镜像在VirtualBox下默认用BIOS引导到了VMware里可能默认变成EFI导致开机黑屏或无法进入系统。解决办法是编辑虚拟机设置把“固件类型”改成BIOS同时把网络适配器类型改成e1000或vmxnet3具体哪种要试一下才知道。另外建议把内存调到2GB以上、CPU给2核打Web渗透的时候浏览器和扫描工具同时开配置太低会很卡。2.2 Host-only还是NAT靶场网络模式的选择这一步是新手最容易踩坑的地方我详细说一下。VirtualBox里常见的网络模式有三种。NAT模式下虚拟机可以访问外部网络但虚拟机和虚拟机之间默认是隔离的也就是说你的攻击机Kali和靶机Breach 3虽然都在NAT模式下却互相看不见。桥接模式会让虚拟机直接挂在宿主机所在的局域网里有可能拿到一个随机IP在公司或者宿舍网络里还可能干扰到别人的设备不太推荐。所以打靶场我强烈建议用Host-only模式。Host-only模式相当于宿主机内部划了一个虚拟交换机只有宿主机和接入同一个Host-only网络的虚拟机才能互相通信外界的设备和流量进不来安静又可控。VirtualBox装好后默认会创建一个Host-only网络网段通常是192.168.56.0/24DHCP分配的地址范围是192.168.56.101到192.168.56.254。Kali攻击机和Breach 3靶机都把网络模式改成Host-only然后同时启动两台机器就能互相访问了。启动后先在攻击机里确认一下网卡输入ip addr看看是否拿到了192.168.56.x的地址。如果没拿到多半是DHCP没开或者网卡没启用可以手动配置静态IP地址填192.168.56.2掩码255.255.255.0网关可以不填。靶机一般会自动获取如果它没获取到进靶机控制台用ip addr查看再手工配置。2.3 快照、记录和复现习惯打靶场和真实渗透有一个很大区别真实环境出了事要负责靶场里随便折腾。但随便折腾不等于没有策略我强烈建议养成熟练使用快照的习惯。镜像导入后、第一次启动前先拍一个“干净快照”。这样无论后面网络配置改崩了、靶机服务打挂了、还是自己不小心把系统搞坏了都能一键回到最初状态。另一个更实用的做法是在每次关键节点后都拍一个新快照比如当你成功进入后台、拿到初始shell、提权成功后各拍一张。复现或者写笔记的时候可以直接跳回某个阶段不用从头跑一遍非常省时间。同时我建议用Markdown文件记录整个打靶过程不要只在脑子里记。内容包括当前靶机IP、攻击机IP、发现的端口和服务、访问过的路径、尝试过的账号密码、失败的原因。很多人打靶失败不是因为技术不够而是因为没有记录过半小时就忘了自己扫过什么重复劳动浪费时间。3. 第一部分实操信息收集与入口发现3.1 存活探测先把靶机的IP找出来靶机启动后第一件事就是确认它已经连上了Host-only网络。先在攻击机里用ip addr确认自己的IP属于哪个网段然后扫描这个网段里的存活主机。我习惯用netdiscover -r 192.168.56.0/24来做这个工具通过ARP请求直接询问网段内所有主机速度很快而且不依赖目标是否回应ping。没有netdiscover的话用nmap -sP 192.168.56.0/24也可以但有个坑如果靶机禁ping-sP可能看不到它。遇到这种情况改用nmap -Pn 192.168.56.0/24它跳过主机发现直接对网段内所有地址做端口探测虽然慢一点但能扫出开着端口的机器。还有一种最笨但最可靠的办法直接打开靶机的控制台窗口登录进去运行ip addr看它自己分配的地址是多少。很多靶机开机后会打印一个欢迎界面上面甚至直接写了IP遇到这种直接记下来就好。需要注意的是有些vulnhub镜像默认不启用DHCP需要手动在靶机里配置IP如果你发现靶机一直拿不到地址先看它的/etc/network/interfaces文件。3.2 端口扫描别一上来就拉满负载找到IP后先做一次全端口TCP扫描目的是了解目标开放了哪些服务。我常用的命令是nmap -sS -p- -T4 目标IP这个命令扫全部65535个端口速度快但不会带版本识别。第一轮只做端口发现不要加-sV -sC因为全端口加版本和脚本扫描会非常慢而且动静很大。第一轮扫完看到开放端口列表后再针对具体端口做详细识别。比如发现80端口开放就运行nmap -sV -p 80 目标IP确认Web服务的具体版本再运行nmap -sC -p 80 目标IP调用默认脚本看看有没有明显的配置问题。这里有个经验-sC脚本库里有不少主动型脚本比如枚举、暴力猜解在靶机上跑没问题但在真实测试中要谨慎。靶场里跑一跑能帮我们快速定位一些常见入口比如robots.txt、目录列表、版本漏洞。扫描结果记得完整保存下来。我会把每个开放端口的服务版本、指纹信息整理到Markdown里因为后面判断利用方案时版本信息就是最重要的依据。3.3 Web页面探索与目录爆破细节Breach 3这类靶机一般都会开放HTTP服务所以网页探索是第一部分的重点。打开浏览器访问目标IP第一件事不是急着乱点而是先看页面源代码。靶场出题人有个习惯喜欢把提示放在HTML注释里、隐藏的div标签里、外部JS文件里。按CtrlU查看源码搜索”comment”、”hidden”、”password”、”user”这些关键词经常会有惊喜。然后查看robots.txt这个文件本来是用来告诉搜索引擎哪些目录不能抓取但在靶场里常常直接暴露敏感路径。还要注意页面里的Cookie内容有些靶场会在Cookie里做文章可能是编码后的路径也可能是base64串。如果页面能跳转到一个登录框先别急着爆破观察一下登录框附属的表单字段名看看有没有隐藏字段。目录爆破是Web探索的另一个必备环节。我习惯用gobuster或dirsearch跑。字典选择很关键默认的小字典扫一遍很快但容易漏建议用SecLists里的directory-list-2.3-medium.txt大小适中覆盖率高。线程数控制在50左右太高容易把靶机服务打崩。爆破过程中要多关注状态码变化不要只盯着200。302重定向说明存在登录跳转403可能是敏感目录被禁止访问204、301也可能藏线索。看到异常状态码就手动访问一下确认页面内容再判断价值。3.4 把线索拼起来锁定第一个入口信息收集到最后手里会有一堆零散线索某个路径、某个版本号、某个用户名、某个备份文件。第一步入口通常不是单一漏洞而是这些线索的串联结果。比如你在/backup目录下找到了一个数据库备份文件下载下来后发现里面有个users表表中有个管理员用户名和一个哈希值。把哈希先识别类型再放到字典里爆破得到明文密码。接着用这个密码尝试登录后台登录后发现后台有日志查看功能日志参数存在命令注入。这种情况下真正的入口其实是那个数据库备份文件漏掉它就什么都做不下去。Breach 3的第一部分核心就是这种“由点到线”的推理训练。我的建议是每发现一个线索都立刻访问或验证不要攒着不看。看到路径就访问看到用户名就测试默认密码和弱口令看到版本号就在本地翻一翻对应版本的历史漏洞记录。把所有线索按优先级排个序能直接交互的服务优先有版本漏洞信息的服务其次纯静态页面放在最后。这样做的好处是一旦某个点验证不通可以快速换下一个不浪费时间。4. 漏洞利用与权限建立的通用方法4.1 先识别指纹再选路线进入利用阶段前很多人会犯一个错误直接上漏洞扫描器对着目标一顿扫。结果往往是扫出一堆误报真正能利用的一个都没有。正确的做法是先做指纹识别。指纹识别的意思是确定目标运行的是什么软件、什么版本。打开网页后看Meta标签里的generator字段看CSS、JS文件引用的路径比如出现wp-content多半是WordPress出现/administrator多半是Joomla出现generator nameGenerator会告诉你具体CMS类型。也可以用专门的指纹识别工具比如whatweb它会把目标的技术栈一口气列出来节省大量时间。知道目标是什么组件后利用路线就很清晰了如果是开源CMS直接查这个版本有哪些已知漏洞很多靶场考点就藏在版本CVE里如果是自研应用重点测参数、文件上传和业务逻辑如果是常见的中间件比如某个版本的Apache、Tomcat则优先看对应解析漏洞和路径穿越问题。这个思路在真实测试中同样适用先缩小范围再精准打击。4.2 登录、上传和命令执行场景的拆解思路常见的第一步入口无非三种场景登录框、上传点、命令执行参数。登录场景下不要只想着弱口令爆破。先看看能不能找到合法用户的凭证比如备份文件、配置项、历史页面里的信息残留。如果只有哈希先识别哈希类型再决定用字典还是规则爆破而不是拿一个rockyou字典从头跑到底。另外注意观察登录逻辑本身有些靶场会在找回密码、验证码校验、响应包字段上留漏洞。上传场景下先看前端的限制比如只允许jpg格式。用BurpSuite拦截请求看服务端是否校验了Content-Type、扩展名、文件头。绕过的思路包括修改扩展名大小写、双写扩展名、在扩展名后面加空格和点以及配合解析漏洞换取执行权限这些手法属于基础功值得逐个尝试。命令执行场景通常隐藏在某个参数里比如日志查看、ping测试、搜索功能。重点观察参数是否被拼接到系统命令中是否有WAF过滤回显在哪里。如果没有直接回显可以利用带外通道来确认漏洞点了。但我这里不贴具体payload毕竟是学习环境自己动手构造一次印象会深得多。4.3 拿到首次shell后的稳定与枚举拿到初始访问权限后不要急着大喊“通关了”因为初始权限通常非常低可能是Web服务的www-data也可能是某个普通用户。这个阶段的重点变成了两件事稳定会话和系统枚举。稳定会话是因为很多反弹shell或Webshell连接很不稳定网络抖动一下就断了。我会先确认当前用户身份和交互能力再考虑升级成交互式shell。在Linux靶机里可以利用Python的pty模块来获得一个完整终端这是最常用的手段。之后在条件允许的情况下备份自己的公钥到目标用户目录方便后续重新登录。系统枚举是提权前最关键的环节。需要逐项检查当前用户能执行哪些sudo命令、有哪些文件当前用户可写、系统计划任务里有没有以高权限运行的脚本、有没有特殊的SUID文件、网络端口里有没有只监听本地的额外服务。这些命令的输出拼起来就是一条清晰的提权路线图。很多靶机的设计意图是“sudo配置不当”或“计划任务调用了用户可写脚本”只要枚举够细一般都能找到突破口。提权本质上就是把权限从低往高提的过程。常见路径包括sudo配置里出现某种免密命令、某个定时任务以root身份运行但你却能修改对应脚本、系统内核版本对应公开漏洞、某个应用以root权限运行且存在利用点。这部分需要耐心验证遇到一个就试一个失败的记录下原因继续下一个直到拿到root。5. 常见问题与排错实录5.1 靶机导入后没有网卡怎么处理症状表现是靶机启动后控制台里执行ip addr只看到lo回环接口看不到eth0或者ens33这类正常网卡。大部分原因是虚拟机网卡类型和靶机系统不匹配或者网卡没有被加载。先把虚拟机完全关机然后在网络设置里把网卡类型改一下。VirtualBox里通常默认是Intel PRO/1000如果不行就换成virtio-netVMware里默认是e1000或vmxnet3来回切换一次再看。改完启动后在靶机控制台里等待30秒左右再执行ip addr有时网卡驱动加载比较慢。如果还是不行直接在靶机里手工让网卡接管IP编辑/etc/network/interfaces或者使用dhclient eth0命令很多Linux镜像默认不用NetworkManager需要手动拉起接口。5.2 攻击机扫描不到靶机IP怎么办这个问题出现频率极高我把它拆成几个原因来看。第一个原因Host-only网络根本没启用。打开VirtualBox的全局设置在“网络”里的“仅主机网络”页面看DHCP服务器是否开启虚拟网卡是否处于启用状态。在VMware里则要检查虚拟网络编辑器中的VMnet1是否被禁用。第二个原因两个虚拟机不在同一网段。攻击机是192.168.56.2靶机却是192.168.1.x那就说明靶机的网络配置不对或者靶机拿到的是其他网卡分配的地址。第三个原因靶机禁ping。用nmap -sn检测不到时换nmap -Pn或者直接看靶机控制台里的IP。这里给一张排查顺序表照着走基本都能解决现象可能原因解决办法靶机只有lo接口网卡类型不匹配关机改虚拟网卡类型重启攻击机能上网但扫不到靶机两台不在同一Host-only网段手工配置攻击机和靶机的IP到同一网段ping不通但端口好像开着靶机防火墙屏蔽ICMP使用nmap -Pn跳过主机发现扫一遍什么都没有靶机服务没起来等30秒后再扫或重启靶机服务5.3 端口扫描和服务状态不稳定有时第一轮扫描看到80端口开放想再详细识别一下结果端口消失了或者目录爆破到一半连接被断开。多半不是靶机真的关了服务而是扫描强度太高把靶机上的服务打崩了。我总结下来的经验是目录爆破线程控制在50以内全端口扫描不要带太重的脚本nmap的-T4已经够快。如果发现服务崩了重启靶机等它完全起来再继续。另外一个容易被忽视的问题是IP变化如果靶机使用DHCP可能在多次重启后拿到了不同地址导致之前扫描的结果对不上。遇到这种情况把靶机的IP固定下来或者每次操作前先确认一下当前IP是否变化。5.4 工具联动时的典型坑打靶过程中会频繁切换BurpSuite、nmap、sqlmap、浏览器等工具最常见的问题是代理设置混乱。例如BurpSuite开了代理监听准备抓Web请求但浏览器的代理设置没有同步修改结果半天抓不到包。反过来使用sqlmap时它默认会走系统代理如果代理没关可能导致扫描流量绕到Burp再出去不仅慢还可能因为配置不当出现诡异结果。我在实践中的做法是固定一套代理配置BurpSuite默认监听127.0.0.1的8080端口浏览器设置为同一个代理需要运行sqlmap时显式指定--proxy参数指向同一个代理或者干脆临时关闭Burp让流量直连目标。还有一个很实用的习惯每切换一个工具之前先确认目标主机IP有没有变化再确认当前工具的代理设置最后才是执行扫描命令。6. 打靶记录的几个好习惯6.1 信息收集记录模板打靶这事光靠兴奋撑不了多久真正拉开差距的是工整的记录习惯。我自己的信息收集表长这样目标属性发现内容备注目标IP192.168.56.3固定不变开放端口80, 330680为主入口Web指纹Apache 2.4PHP 7.4存在版本风险点敏感目录/backup, /admin/backup可目录列表关键账号admin, backupuser来源备份文件可利用漏洞上传点绕过待验证每次做完一项操作就在表里加一行。不要嫌麻烦因为当你打了两小时后卡住回来看这张表马上就知道哪里还没覆盖到。6.2 卡住时的排查顺序打到一半没有任何进展是常态别急着换exp或者乱扫。我的习惯是先按顺序做三件事第一重新确认端口扫描结果是不是有漏扫的高位端口第二回到Web页面把刚才没有仔细看的源码和目录重新翻一遍第三检查自己的记录表看有没有线索被记下来但还没验证过。大多数情况下卡点都不是漏洞利用技术不够而是信息收集阶段漏了一项。Breach 3这种靶场的乐趣就在于你永远不知道下一个入口是藏在某个备份文件里还是藏在一个看似无关的版本号里。把第一部分练扎实了后面的路自然就好走了。