《零基础学 Gobuster:v3.6 完整实战指南(目录扫描 / 子域爆破 / 自动化全流程)》
《Gobuster v3.6渗透测试实战教程》是一份针对网络安全从业者的全面指南。教程采用6阶段递进式教学,从基础安装到高级实战应用,涵盖30分钟快速上手、精准扫描、性能优化、隐蔽技巧等核心内容。重点解析了4种工作模式(dir/dns/vhost/fuzz)的实战应用,提供10种常见报错的解决方案,并详细说明与Burp/httpx等工具的联动方法。教程特别强调字典选择策略和渗透前检查清单,通过实测
Gobuster 从入门到精通:v3.6 实测版渗透测试教程
本文全程基于 2025-03 发布的 Gobuster v3.6 版本实测,所有命令可直接复制执行,按「能跑起来→扫得准→扫得快→扫得隐蔽→自动化→实战」6 阶段递进,新手也能快速上手!
📚 目录
1. 30 分钟上手:从安装到首次出结果
1.1 环境安装(避坑指南)
系统 |
安装命令 |
常见问题 & 解决办法 |
Kali/Debian |
```bash |
|
sudo apt update && sudo apt install -y gobuster |
||
``` |
🔴 报错 “无法定位包”:换 Kali 官方源(编辑/etc/apt/sources.list,替换为deb http://http.kali.org/kali kali-rolling main non-free contrib) |
|
macOS |
```bash |
|
brew install gobuster |
||
``` |
🟡 无 brew:先执行/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
|
源码编译 |
```bash |
|
git clone https://github.com/OJ/gobuster.git && cd gobuster && go build |
||
``` |
🟡 需先装 Go 环境:sudo apt install golang |
验证成功:执行 gobuster version,输出 gobuster v3.6.0 即达标。
1.2 字典准备(解决 git 克隆慢)
推荐直接下载压缩包(避免克隆超时):
# 下载SecLists字典库(渗透测试必备)
wget https://github.com/danielmiessler/SecLists/archive/refs/heads/master.zip && unzip master.zip
# 定义字典变量(后续命令直接复用,不用重复输路径)
WL=SecLists-master/Discovery/Web-Content/common.txt # 目录/文件字典
SUBS=SecLists-master/Discovery/DNS/subdomains-top1million-5000.txt # 子域字典
1.3 第一次扫描:dir 模式基础操作(必出结果)
# 扫描httpbin.org,找php/html后缀文件,结果存result.txt
gobuster dir -u https://httpbin.org -w $WL -t 30 -x php,html -o result.txt
成功标志:打开result.txt,看到类似内容(200 = 正常访问,301 = 跳转):
/ip (Status: 200) [Size: 33]
/html (Status: 200) [Size: 959]
/robots.txt (Status: 200) [Size: 30]
🔴 新手踩坑:若提示 “file exists”,删除已存在的result.txt,或换 -o result_new.txt。
2. 扫得准:4 个过滤技巧(剔除无效结果)
核心目标:减少 “假阳性”(动态 404)和 “无关结果”(403 无权限),只留有用数据。
2.1 只保留有效状态码(200/302)
# 只关心能直接访问(200)或跳转(302)的路径
gobuster dir -u https://target.com -w $WL -t 30 --status-codes 200,302 -o valid.txt
2.2 剔除动态 404(按页面大小)
很多网站把 “不存在的页面” 伪装成 200 状态,需先测动态 404 大小:
# 步骤1:用curl测无效路径的页面大小(示例返回Content-Length: 5233)
curl -I https://target.com/xxxxxxxxx
# 步骤2:扫描时排除该大小
gobuster dir -u https://target.com -w $WL -t 30 --exclude-length 5233 -o no_fake404.txt
2.3 批量拉黑无用状态码(-b 参数)
# 一次性排除403(无权限)、404(不存在)、503(服务不可用)
gobuster dir -u https://target.com -w $WL -t 30 -b 403,404,503 -o filtered.txt
2.4 破解 “通配符陷阱”(所有路径都 200)
部分网站配置错误,任何路径都返回 200,需先检测:
# 步骤1:检测通配符
gobuster dir -u https://target.com -w $WL -t 30 --wildcard
# 提示“Wildcard found”说明有陷阱
# 步骤2:解决办法:用精准字典+显示大小筛选
gobuster dir -u https://target.com -w SecLists-master/Discovery/Web-Content/raft-small-words.txt -t 30 --wildcard --include-length -o wildcard_solve.txt
3. 扫得快:线程 / 延时 / DNS 并发优化
速度核心:平衡 “线程数” 和 “防封禁”,不同场景参数不同。
3.1 目录 / 文件爆破:线程与延时搭配
场景 |
线程(-t) |
延时(--delay) |
命令示例 |
局域网目标 |
200-300 |
0ms |
```bash |
gobuster dir -u http://192.168.1.100 -w $WL -t 250 -o lan_result.txt |
| 公网无WAF | 80-120 | 0ms | ```bash
gobuster dir -u https://target.com -w $WL -t 100 -o public_result.txt
``` |
| 公网有WAF | 30-50 | 50-100ms | ```bash
gobuster dir -u https://target.com -w $WL -t 40 --delay 80ms -o waf_result.txt
``` |
📌 关键提示:线程不是越高越好!超过服务器承受上限会被拉黑IP,建议从50开始逐步增加。
### 3.2 子域爆破:DNS并发优化(轻量高效)
子域爆破基于DNS查询,资源消耗低,可开高线程:
```bash
# 爆破target.com子域,用1.1.1.1 DNS(避免污染),显示子域IP
gobuster dns -d target.com -w $SUBS -t 200 -r 1.1.1.1 --show-ips --no-color -o subs.txt
🔴 踩坑:若提示 “dns: no such host”,换 -r 8.8.8.8(Google DNS)重新执行。
3.3 虚拟主机爆破:适配 HTTP 特性
用于发现同一 IP 下的多个域名(如a.target.com、b.target.com):
# 扫描10.0.0.5的虚拟主机,自动加目标后缀(如“admin”→“admin.target.com”)
gobuster vhost -u http://10.0.0.5 -w SecLists-master/Discovery/DNS/vhosts.txt -t 60 --append-domain -o vhosts.txt
📌 必加参数:--append-domain!否则字典里的 “admin” 会被当作完整域名。
4. 扫得隐蔽:代理 / UA / 认证绕过
核心需求:模拟正常用户访问,避免被 WAF 识别为扫描工具。
4.1 走 Burp 代理:抓包分析与修改
# 将请求转发到Burp(默认端口8080),可在Burp中修改Headers
gobuster dir -u https://target.com -w $WL -t 30 --proxy http://127.0.0.1:8080 -o proxy_result.txt
操作步骤:
- 打开 Burp,Proxy → Intercept 开启拦截;
- 执行命令,Burp 捕获请求后,可添加Referer等 Headers 再放行;
- 无需手动拦截时,关闭 Burp 拦截即可自动转发。
4.2 随机 User-Agent(--random-agent)
默认 UA 是gobuster/3.6.0,易被识别,加参数自动切换浏览器 UA:
gobuster dir -u https://target.com -w $WL -t 30 --random-agent -o random_ua.txt
📌 进阶:自定义 UA 用 --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36"。
4.3 绕过 TLS 证书问题(自签 / 过期)
访问自签证书网站提示 “tls: bad certificate”,加 -k 跳过校验:
gobuster dir -u https://192.168.1.100 -w $WL -t 30 -k -o tls_bypass.txt
⚠️ 注意:仅测试内部目标使用,公网目标慎用(可能是钓鱼网站)。
4.4 携带认证信息(Cookie/JWT/ 基础认证)
(1)带 Cookie/JWT(登录后扫描)
# 示例1:带Cookie(从浏览器F12→Application→Cookies复制)
gobuster dir -u https://target.com -w $WL -t 30 -c "session=abc123; username=admin" -o cookie_result.txt
# 示例2:带JWT(放在Headers里)
gobuster dir -u https://target.com -w $WL -t 30 -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." -o jwt_result.txt
(2)基础认证(用户名 + 密码)
# 示例1:指定单个密码
gobuster dir -u https://target.com -w $WL -t 30 -U admin -P password123 -o basic_auth.txt
# 示例2:批量测试密码(用字典)
gobuster dir -u https://target.com -w $WL -t 30 -U admin -P SecLists-master/Passwords/Common-Credentials/10k-most-common.txt -o brute_auth.txt
5. 4 种高级模式深度解析(覆盖 90% 场景)
模式 |
核心用途 |
关键参数 & 完整命令示例 |
实战技巧 |
dir |
目录 / 文件 + 备份文件发现 |
-x(后缀)、--discover-backup(找备份如index.php.bak) |
1. 找 swagger:加 -x json,yaml 扫/swagger;2. 找备份:--discover-backup 自动检测xxx.bak |
```bash |
|||
gobuster dir -u https://api.target.com -w $WL -t 50 -x php,bak,zip --discover-backup -o api_backup.txt |
| dns | 子域+CDN边缘节点发现 | `-r`(DNS服务器)、`--show-ips`(显示IP) | 1. 找真实IP:对比`--show-ips`结果,异常IP可能是真实服务器;<br>2. 深度子域:用`subdomains-top1million-20000.txt` |
| | | ```bash
gobuster dns -d target.com -w SecLists-master/Discovery/DNS/subdomains-top1million-20000.txt -t 250 -r 8.8.8.8 --show-ips -o deep_subs.txt
``` | |
| vhost | 同一IP多虚拟主机发现 | `--append-domain`(加后缀)、`--exclude-length`(过滤无效页) | 1. 结合crt.sh:从`https://crt.sh/?q=target.com`导出历史域名;<br>2. 排除默认页:用`--exclude-length`剔除固定大小页面 |
| | | ```bash
gobuster vhost -u http://103.xxx.xxx.xxx -w SecLists-master/Discovery/DNS/vhosts.txt -t 60 --append-domain --exclude-length 1024 -o vhosts_result.txt
``` | |
| fuzz | 自定义Fuzz(POST/API) | `-m`(请求方法)、`-B`(POST数据,FUZZ为占位符) | 1. Fuzz REST API:如`POST /api/user/FUZZ`;<br>2. JSON请求:加 `-H "Content-Type: application/json"` |
| | | ```bash
gobuster fuzz -u https://api.target.com/api/user/FUZZ -w $WL -t 30 -m POST -B '{"token":"xxx"}' -H "Content-Type: application/json" --excludestatuscodes 500 -o fuzz_api.txt
``` | |
## 6. 实战流水线:从目标到漏洞的5步落地
### 前提:已获得目标合法授权(必须!)
以 `example.com` 为例,完整流程如下:
### 步骤1:子域收集(扩大范围)
```bash
# 爆破子域,用阿里云DNS(223.5.5.5),显示IP
gobuster dns -d example.com -w $SUBS -t 150 -r 223.5.5.5 --show-ips -o subs.txt
# 提取干净子域(去掉IP和多余字符)
cat subs.txt | grep -E "\.example\.com" | awk '{print $2}' > clean_subs.txt
步骤 2:存活检测(筛选可访问子域)
用httpx(轻量存活工具)筛选 80/443/8080 端口:
# 安装httpx:sudo apt install httpx
# 检测存活,输出状态码和标题
cat clean_subs.txt | httpx -threads 50 -status-code -title -ports 80,443,8080 -o alive.txt
# 筛选有效子域(200/301/302状态)
cat alive.txt | grep -E "200|301|302" | awk '{print $1}' > valid_alive.txt
步骤 3:目录 / 文件爆破(以api.example.com为例)
# 用深度字典(raft-large-words.txt),排除404和动态404
gobuster dir -u https://api.example.com -w SecLists-master/Discovery/Web-Content/raft-large-words.txt -t 80 -x php,html,json -b 404 --exclude-length 5285 -o api_dir.txt
步骤 4:敏感路径快速筛选(聚焦高风险)
用grep筛选含 “admin”“backup” 等关键词的路径:
grep -E "200|301" api_dir.txt | grep -E "admin|backup|config|api-docs|swagger|db|sql" > interest.txt
示例结果:
/admin (Status: 200) [Size: 2048]
/backup.zip (Status: 200) [Size: 102400]
/api-docs.json (Status: 200) [Size: 5120]
步骤 5:人工复核 & 漏洞验证(关键!)
案例 1:/backup.zip(200 状态)
- 下载:wget https://api.example.com/backup.zip;
- 解压:unzip backup.zip,查看是否有config.php(数据库账号)、user.sql(用户数据);
- 漏洞:若账号可登录后台 / 远程连接数据库,即高危。
案例 2:/admin(200 状态,无认证)
- 访问https://api.example.com/admin,找 “文件上传” 功能;
- 测试:上传php.png一句话木马,用蚁剑连接;
- 漏洞:若能执行命令,即 Getshell(远程控制服务器)。
7. 10 种常见报错解决方案(避坑手册)
报错现象 |
根本原因 |
解决方案 |
tls: bad certificate |
目标用自签 / 过期 TLS 证书 |
加 -k 参数跳过校验 |
429 Too Many Requests |
线程过高触发 WAF 限流 |
1. 降线程(-t从 100→30);2. 加延时(--delay 50ms);3. 换代理 IP |
0 result (all filtered) |
字典不匹配 / 过滤太严 / 通配符陷阱 |
1. 换贴合目标的字典;2. 暂时去掉-b和--exclude-length;3. 加--wildcard检测 |
dns: no such host |
本地 DNS 无法解析目标 |
1. 换公共 DNS(-r 8.8.8.8);2. 直接用 IP 测试 |
context deadline exceeded |
目标网络不稳定 / 超时 |
加 --timeout 20s(延长超时时间,默认 10s) |
permission denied: result.txt |
输出目录无写权限 |
1. 切换到/tmp目录;2. 用chmod 777授权当前目录 |
unknown flag: --discover-backup |
版本低于 v3.6(该参数 v3.6 新增) |
升级:sudo apt upgrade gobuster 或源码编译最新版 |
invalid status code: 403,404 |
-b参数后多逗号 / 空格(如-b 403, 404) |
去掉空格,格式为 -b 403,404 |
POST data is required |
fuzz 模式用 POST 但没加-B参数 |
加 -B '{"key":"FUZZ"}'(按请求格式调整) |
proxy connect: connection refused |
Burp 未启动或端口错 |
1. 启动 Burp;2. 确认端口是 8080(或改--proxy为实际端口) |
8. 自动化工具链:与 Burp/httpx 联动
8.1 Gobuster + Burp:精准控制请求
- 打开 Burp,Proxy → Options 确认监听127.0.0.1:8080;
- 执行 Gobuster 命令(带--proxy):
gobuster dir -u https://target.com -w $WL -t 30 --proxy http://127.0.0.1:8080
- 在 Burp 中可修改 Headers(如加X-Forwarded-For)或拦截请求。
8.2 Gobuster + Naabu + httpx:端口→存活→爆破流水线
Naabu 扫端口→httpx 筛存活→Gobuster 爆破:
# 步骤1:Naabu扫80/443/8080端口
naabu -host target.com -p 80,443,8080 -o ports.txt
# 步骤2:httpx筛存活URL
cat ports.txt | httpx -o alive_urls.txt
# 步骤3:批量爆破每个URL
while read url; do
# 结果文件名处理(如https://api.target.com→api.target.com)
filename=$(echo $url | sed 's/https:\/\///;s/\/$//')
gobuster dir -u $url -w $WL -t 50 -b 404 --exclude-length 5233 -o "gobuster_$filename.txt"
done < alive_urls.txt
8.3 自定义 Shell 脚本:批量子域爆破
新建gobuster_batch.sh脚本,自动循环爆破子域:
#!/bin/bash
# 用法:./gobuster_batch.sh 子域列表文件(如clean_subs.txt)
WL=SecLists-master/Discovery/Web-Content/common.txt
SUBS_FILE=$1
if [ -z "$SUBS_FILE" ]; then
echo "用法:./gobuster_batch.sh subs.txt"
exit 1
fi
# 循环爆破每个子域
while read sub; do
echo "正在爆破:$sub"
gobuster dir -u https://$sub -w $WL -t 50 -b 404 -o "result_$sub.txt"
done < $SUBS_FILE
执行脚本:
chmod +x gobuster_batch.sh && ./gobuster_batch.sh clean_subs.txt
9. 字典选择指南(效率关键)
SecLists 是渗透测试必备字典库,不同场景选择对应字典(按优先级排序):
测试场景 |
推荐字典路径(SecLists 内) |
特点 |
适用阶段 |
目录 / 文件爆破 |
1. Discovery/Web-Content/common.txt2. Discovery/Web-Content/raft-small-words.txt3. Discovery/Web-Content/raft-large-words.txt |
1. 小(1 万条,快速);2. 精(10 万条,含 API);3. 全(100 万条,深度) |
快速→深度测试 |
文件后缀 |
手动指定:-x php,bak,zip,sql,tar.gz,old,yaml,json |
覆盖备份 / 配置文件后缀 |
所有目录扫描场景 |
子域爆破 |
1. Discovery/DNS/subdomains-top1million-5000.txt2. Discovery/DNS/subdomains-top1million-20000.txt |
1. 小(5 千条,快速);2. 中(2 万条,常规) |
快速→全面收集 |
虚拟主机 |
1. Discovery/DNS/vhosts.txt2. crt.sh 导出的历史域名 |
1. 通用;2. 目标专属,命中率高 |
结合目标信息 |
基础认证密码 |
1. Passwords/Common-Credentials/10k-most-common.txt2. Passwords/Leaked-Databases/rockyou.txt(需解压) |
1. 常见弱口令;2. 大字典(1400 万条) |
弱口令→深度爆破 |
📌 字典优化:结合目标信息(公司名、产品名)生成专属字典,命中率提升 50%!
10. 渗透前 10 秒自检 Checklist
每次执行 Gobuster 前,花 10 秒检查以下项,避免低级错误:
- 版本 ≥ v3.6?(gobuster version)
- 字典路径正确?(echo $WL 检查文件是否存在)
- 线程 / 延时适配目标环境?(局域网 / 公网 / WAF)
- 过滤参数(-b/--exclude-length)已配置?
- 需带 Cookie/JWT/ 认证信息?
- 代理(Burp)已启动且端口正确?
- 输出文件未覆盖已有结果?(或加 -a 追加)
- 已拿到目标合法授权?(合法合规是前提)
- 网络环境稳定?(避免中途断网)
- 命令无拼写错误?(如--excludelength→正确--exclude-length)
📝 总结与互动
Gobuster 的核心是 “参数搭配 + 字典选择”:新手从dir模式和common.txt入手,熟练后拓展dns/vhost/fuzz模式;实战中需平衡 “速度” 与 “隐蔽性”,结合自动化工具链提升效率。
如果在使用中遇到新的报错,或有更优的实战技巧,欢迎在评论区留言交流!一起进阶渗透测试技能~
更多推荐
所有评论(0)