Gobuster 从入门到精通:v3.6 实测版渗透测试教程

本文全程基于 2025-03 发布的 Gobuster v3.6 版本实测,所有命令可直接复制执行,按「能跑起来→扫得准→扫得快→扫得隐蔽→自动化→实战」6 阶段递进,新手也能快速上手!

📚 目录

  1. 30 分钟上手:从安装到首次出结果
  1. 得准:4 个过滤技巧(剔除无效结果)
  1. 扫得快:线程 / 延时 / DNS 并发优化
  1. 得隐蔽:代理 / UA / 认证绕过
  1. 4 种高级模式深度解析(覆盖 90% 场景)
  1. 实战流水线:从目标到漏洞的 5 步落地
  1. 10 种常见报错解决方案(避坑手册
  1. 动化工具链:与 Burp/httpx 联动
  1. 字典选择指南(效率关
  1. 渗透前 10 秒自检 Checklist

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.comb.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

操作步骤

  1. 打开 Burp,Proxy → Intercept 开启拦截;
  1. 执行命令,Burp 捕获请求后,可添加Referer等 Headers 再放行;
  1. 无需手动拦截时,关闭 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 状态)
  1. 下载:wget https://api.example.com/backup.zip
  1. 解压:unzip backup.zip,查看是否有config.php(数据库账号)、user.sql(用户数据);
  1. 漏洞:若账号可登录后台 / 远程连接数据库,即高危。
案例 2:/admin(200 状态,无认证)
  1. 访问https://api.example.com/admin,找 “文件上传” 功能;
  1. 测试:上传php.png一句话木马,用蚁剑连接;
  1. 漏洞:若能执行命令,即 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:精准控制请求

  1. 打开 Burp,Proxy → Options 确认监听127.0.0.1:8080
  1. 执行 Gobuster 命令(带--proxy):
gobuster dir -u https://target.com -w $WL -t 30 --proxy http://127.0.0.1:8080
  1. 在 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模式;实战中需平衡 “速度” 与 “隐蔽性”,结合自动化工具链提升效率。

如果在使用中遇到新的报错,或有更优的实战技巧,欢迎在评论区留言交流!一起进阶渗透测试技能~

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐