Gobuster工具详解

2023-12-20 18:31:02

目录

Gobuster工具介绍

主要特性

支持模式及全局参数列举

安装

使用

Dir模式

DNS模式

Vhost模式

fuzz模式

TFTP模式

S3、gcs模式

字典

docker运行gobuster


Gobuster工具介绍

Gobuster 是一款用于在Web应用程序中进行目录和文件爆破的开源工具。它通过尝试在目标网站上枚举常见路径和文件,以便发现潜在的敏感目录和文件。Gobuster支持多种协议和自定义字典,具有高度可定制性。

主要特性

  1. 目录和文件爆破: Gobuster 主要用于目录和文件爆破,通过尝试访问网站上的不同路径,来发现隐藏的目录和文件。
  2. 多种扫描模式: Gobuster 提供不同的扫描模式,包括目录(dir)扫描、子域名(dns)扫描、VHost(vhost)扫描等。
  3. 灵活的字典支持: 用户可以使用自定义字典文件,也可以选择使用 Gobuster 默认提供的一些内置字典文件。这使得工具非常灵活,适应不同的测试场景。
  4. 支持HTTP和HTTPS: Gobuster 可以在 HTTP 和 HTTPS 协议上执行目录和文件爆破。
  5. 线程支持: 工具支持多线程,可以加速扫描过程,提高效率。

支持模式及全局参数列举

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工具,这个在我主页也有介绍该工具的使用。

文章来源:https://blog.csdn.net/B_l_a_nk/article/details/135109164
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。