目录
Gobuster工具介绍
主要特性
支持模式及全局参数列举
安装
使用
Dir模式
DNS模式
Vhost模式
fuzz模式
TFTP模式
S3、gcs模式
字典
docker运行gobuster
Gobuster工具介绍
Gobuster 是一款用于在Web应用程序中进行目录和文件爆破的开源工具。它通过尝试在目标网站上枚举常见路径和文件,以便发现潜在的敏感目录和文件。Gobuster支持多种协议和自定义字典,具有高度可定制性。
主要特性
- 目录和文件爆破: Gobuster 主要用于目录和文件爆破,通过尝试访问网站上的不同路径,来发现隐藏的目录和文件。
- 多种扫描模式: Gobuster 提供不同的扫描模式,包括目录(dir)扫描、子域名(dns)扫描、VHost(vhost)扫描等。
- 灵活的字典支持: 用户可以使用自定义字典文件,也可以选择使用 Gobuster 默认提供的一些内置字典文件。这使得工具非常灵活,适应不同的测试场景。
- 支持HTTP和HTTPS: Gobuster 可以在 HTTP 和 HTTPS 协议上执行目录和文件爆破。
- 线程支持: 工具支持多线程,可以加速扫描过程,提高效率。
支持模式及全局参数列举
dir - 经典目录暴力破解模式
dns - DNS子域暴力破解模式
s3 - 枚举打开的 S3 存储桶并查找是否存在和存储桶列表
gcs - 枚举打开的谷歌云存储桶
vhost - 虚拟主机暴力破解模式(与DNS不同!)
fuzz -使用模糊测试模式。替换URL、Headers和请求体中的关键词FUZZ
tftp - 暴力破解 tftp 文件
--debug 打开debug模式(调试模式)
--delay duration 每个线程在请求之间等待的时间(举例:--delay 1500ms)
--no-color 禁用颜色输出
--no-error 不显示错误
-z,--no-progress 不显示进度
-o,-output string 输出结果到文件
-p,--pattern string 包含替换模式的文件
-q,--quiet 不打印banner信息和其他无用信息
-t,--threads int 指定线程数量(默认10)
-v,--verbose 详细输出日志(错误信息也会展示)
-w,--wordlist string 指定字典路径,指定-可以通过标准输入中读取
--wordlist-offset int 从字典的指定位置继续(默认偏移量为0,从第一个开始)
安装
它的安装可以有很多种方法,这里需要保证已经安装了Go环境(版本最低1.19)
GitHub链接:GitHub - OJ/gobuster: Directory/File, DNS and VHost busting tool written in Go
这里已经安装过了go环境
直接使用命令安装:go install github.com/OJ/gobuster/v3@latest
安装完成后,他在你的go目录下
此时执行gobuster version如果报错应该是 $GOPATH/bin
目录没有添加到你系统的 PATH
环境变量中,可以先执行echo $PATH
,查看一下环境变量的配置,如果没有的话,就执行export PATH=$PATH:$GOPATH/bin
添加完环境变量后就可以正常执行gobuster命令了
但是这样只能将环境变量的修改应用于当前的 shell 会话。如果打开新的终端窗口,它将不会保留。
因此需要将该命令添加到你的shell配置文件中,首先先看你使用的shell是bash还是zsh
echo $0
klai是zsh因此配置文件是~/.zshrc
echo 'export PATH=$PATH:/root/go/bin' >> ~/.bashrc
source ~/.bashrc
echo 'export PATH=$PATH:/root/go/bin' >> ~/.zshrc
source ~/.zshrc
修改完配置文件后,这个环境变量也就只有root用户能够使用
所以在使用这个工具的时候也需要切换到root权限去使用(不过这个跟你go目录在哪个路径有关,我这里是因为把go放在了root目录下。)
使用
Dir模式
gobuster help dir 查看dir模式下的特定参数
-f,--add-slash 为每个请求添加/
--client-cert-p12 string 用于配置TLS客户端证书的p12文件
--client-cert-p12-password string p12文件的密码
--client-cert- PEM string 可选TLS客户端证书的PEM格式公钥
--client-cert-pem-key string 可选TLS客户端证书的PEM格式私钥(这个密钥不需要密码)
-c,--cookies string 请求使用的cookie
-d,--discovery -backup 通过追加多个备份扩展名搜索备份文件
--exclude-length string 排除以下内容长度(完全忽略状态)可以用逗号分隔多个长度,它也支持像203-206这样的范围
-e,--expanded 扩展模式,打印完整的url
-x,--extensions string 要搜索的文件扩展名
-X,--extensions-file string 从文件中读取要搜索的文件扩展名
-r,--Follow -redirect Follow 重定向
-H,--headers stringArray 指定 HTTP 标头,-H 'Header1: val1' -H 'Header2: val2'
-h,--help dir帮助
--hide -length 在输出中隐藏正文的长度
-m, --method string 使用以下HTTP方法(默认"GET")
--no-canonicalize-headers 不规范化HTTP头名称。如果设置的报头名称按原样发送。
-n,--no-status 不打印状态码
-k,--no-tls-validation 跳过TLS证书验证
-P,--password string 基本认证密码
--proxy string 请求使用的代理[http(s)://host:port]或[socks5://host:port]
--random-agent 使用随机的User-Agent字符串
--retry 应该在请求超时时重试
--retry-attempts int 请求超时时重试的次数(默认为3)
-s,--status-codes 字符串正状态码(如果设置了status-codes-blacklist,将被覆盖)。也可以处理类似200,300-400,404的范围。
-b,--status-codes-blacklist string 负面状态码(如果设置了,将覆盖状态码)。也可以处理类似200,300-400,404的范围。(默认值“404”)
--timeout durationHTTP 超时时间(默认为10秒)
-u,--url string 目标url
-a,--useragent string 设置用户代理字符串(默认为"gobuster/3.6")
-U,--username string 基本身份验证用户名
gobuster dir -u https://buffered.io/ -w dir.txt
这里没有指定-t也就是线程,那么默认也就是10线程
gobuster dir -u https://buffered.io/ -w dir.txt --no-error
加上--no-error参数可以不显示错误
gobuster dir -u https://mysite.com/path/to/folder -c 'session=123456' -t 50 -w common-files.txt -x .php,.html
也可以利用-c参数指定cookie,使用-x参数指定搜索的文件扩展名
DNS模式
gobuster help dns 查看dns模式下的特定参数
-d,--domain string 目标域
-h,--help DNS帮助
-r,--resolver string 使用自定义DNS服务器(格式server.com或server.com:端口)
-c,--Show - CNAME 显示CNAME记录(不能与-i选项一起使用)
-i,--Show -ips 显示IP地址
DNS解析超时时间(默认为1秒)
——wildcard Force发现通配符后继续操作
gobuster dns -d xiaodi8.com -w subdomains-top100000.txt -t 20
这里使用dns模式,并且将线程设置成20
gobuster dns -d xiaodi8.com -w subdomains-top100000.txt -t 20 -i
使用-i参数可以显示IP
Vhost模式
gobuster的vhost模式用于枚举虚拟主机(Virtual Host),即通过尝试不同的主机名来发现服务器上的其他主机。这可以帮助发现同一IP地址下的其他网站或服务
gobuster help vhost 查看vhost模式下的特定参数
--append-domain 从URL添加主域名到wordlist中的单词。否则,完全限定域需要在词表中指定。
-c,--cookies string 请求使用的cookie
--domain string 使用IP地址作为URL时附加的域。如果是空的,你指定一个基于域名的URL,从URL中提取主机名
--exclude-length 整数排除下面的内容长度(完全忽略状态)。多次供应以排除多个尺寸。
-r,--Follow -redirect Follow 重定向
-H,--headers stringArray 指定 HTTP 标头,-H 'Header1: val1' -H 'Header2: val2'
-h,--help vhost帮助
-m, --method string 使用以下HTTP方法(默认"GET")
-k,--no-tls-validation 跳过TLS证书验证
-P,--password string 基本认证密码
--proxy string 请求使用的代理[http(s)://host:port]
--random-agent 使用随机的User-Agent字符串
--retry 应该在请求超时时重试
--retry-attempts int 请求超时时重试的次数(默认为3)
--timeout duration HTTP超时时间(默认为10秒)
-u,--url string 目标url
-a,--useragent string 设置用户代理字符串(默认为"gobuster/3.6")
-U,--username string 基本身份验证用户名
gobuster vhost -u http://www.xiaodi8.com -w parameter.txt
我这里一个也没爆出来
放一张官方的图
fuzz模式
gobuster help fuzz 查看fuzz模式下的特定参数
-B,--body 请求体
--client-cert-p12 string 用于配置TLS客户端证书的p12文件
--client-cert-p12-password string p12文件的密码
--client-cert- PEM string 可选TLS客户端证书的PEM格式公钥
--client-cert-pem-key string 可选TLS客户端证书的PEM格式私钥(这个密钥不需要密码)
-c,--cookies string 请求使用的cookie
--exclude-length string 排除以下内容长度(完全忽略状态)可以用逗号分隔多个长度,它也支持像203-206这样的范围
-b,--excludestatuscodes 字符串排除的状态码。也可以处理类似200,300-400,404的范围。
-r,--Follow -redirect 重定向
-H,--headers stringArray 指定 HTTP 标头,-H 'Header1: val1' -H 'Header2: val2'
-h,--help fuzz帮助
-m, --method string 使用以下HTTP方法(默认"GET")
--no-canonicalize-headers 不规范化HTTP头名称。如果设置的报头名称按原样发送。
-k,--no-tls-validation 跳过TLS证书验证
-P,--password string 基本认证密码
--proxy string 请求使用的代理[http(s)://host:port]或[socks5://host:port]
--random-agent 使用随机的User-Agent字符串
--retry 应该在请求超时时重试
--retry-attempts int 请求超时时重试的次数(默认为3)
--timeout durationHTTP 超时时间(默认为10秒)
-u,--url string 目标url
-a,--useragent string 设置用户代理字符串(默认为"gobuster/3.6")
-U,--username string 基本身份验证用户名
gobuster fuzz -u https://example.com?FUZZ=test -w parameter.txt
TFTP模式
gobuster help tftp 查看tftp模式下的特定参数
-h,--help TFTP帮助
-s,--server string TFTP目标服务器
--timeout duration TFTP超时时间(默认1秒)
gobuster tftp -s www.aqww3.xyz -w tftp.txt
这边没有现成的TFTP服务器去扫,所以没东西。
S3、gcs模式
这两个模式一个是枚举能访问的S3储存桶,一个是枚举谷歌云储存桶。这里暂时没用到就没做,后续碰到了会补充。
字典
由于gobuster没有提供字典,所以将我本次用到的字典分享出来:
链接:百度网盘 请输入提取码
提取码:6666
GitHub上面还有很多字典,这里分享几个
https://github.com/danielmiessler/SecLists
https://github.com/3had0w/Fuzzing-Dicts
https://github.com/fuzzdb-project/fuzzdb
docker运行gobuster
这个只需要下载一个gobuster的镜像,就可以直接使用,还是很方便的
这个镜像就不要去docker search gobuster去仓库里面找了,建议去GitHub上面下载最新版的镜像
docker pull ghcr.io/oj/gobuster:latest
直接拉镜像
然后就可以直接使用了
docker run --rm -v "/usr/share/wordlists:/wordlists" ghcr.io/oj/gobuster dir -h
--rm:这个参数表示当容器退出后立即删除容器。这有助于保持系统的清洁,避免产生大量无用的容器。
-v参数可以将/usr/share/wordlists挂载到docker中的wordlists,建议将字典目录挂载过去,然后就可以直接使用了
这里就可以直接使用这个镜像去做目录爆破了,这个相当于先利用这个镜像生成个容器,然后将字典目录挂载到这个容器中,然后等目录爆破结束,这个容器也随之删除。
docker run --rm -v "/usr/share/wordlists:/wordlists" ghcr.io/oj/gobuster dir -u http://www.xiaodi8.com -t 20 --no-error -w /wordlists/dir.txt
这里使用的dir模式,其他模式也是一样的使用方法。
注:没有看到gobuster有递归爆破的功能,如果想使用递归爆破,可以使用dirsearch工具,这个在我主页也有介绍该工具的使用。