Esta pagina se ve mejor con JavaScript habilitado

GoBuster bajo FreeBSD

 ·  🎃 kr0m

GoBuster es un buscador de recursos rápido y versátil ya que nos permite identificar ficheros, directorios, entradas DNS, vhosts o buckets de almacenamiento.
El manual se compone de los siguientes apartados:


Instalación:

El primer paso será instalar el software, podemos hacerlo mediante binarios, go install o compilando manualmente:

pkg install gobuster
go install github.com/OJ/gobuster/v3@latest
git clone https://github.com/OJ/gobuster.git
cd gobuster
make

Nos bajamos algunas listas de directorios, dominios y nombres de buckets:


DIR mode:

Lanzamos GoBuster con el parámetro dir:

gobuster dir -u http://nonexistentdomain.com -w directory-list-2.3-big.txt -r

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://nonexistentdomain.com
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                directory-list-2.3-big.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index                (Status: 200) [Size: 55680]
/rss                  (Status: 200) [Size: 16783]
/img                  (Status: 403) [Size: 162]
/default              (Status: 200) [Size: 55678]
/sitemap              (Status: 200) [Size: 40197]
/media                (Status: 403) [Size: 162]
/0                    (Status: 200) [Size: 55678]
/assets               (Status: 403) [Size: 162]
/css                  (Status: 403) [Size: 162]
/Index                (Status: 200) [Size: 55447]
/lib                  (Status: 403) [Size: 162]
/js                   (Status: 403) [Size: 162]
/RSS                  (Status: 200) [Size: 16783]
/api                  (Status: 200) [Size: 55678]
/SiteMap              (Status: 500) [Size: 30565]
/dist                 (Status: 403) [Size: 162]
/mapa                 (Status: 403) [Size: 162]
/noticias             (Status: 200) [Size: 50580]
/siteMap              (Status: 500) [Size: 30565]
/fotos                (Status: 200) [Size: 40348]
/Sitemap              (Status: 200) [Size: 40197]
/captcha              (Status: 500) [Size: 30565]
/Rss                  (Status: 200) [Size: 16783]
/INDEX                (Status: 200) [Size: 55447]
/contacto             (Status: 200) [Size: 31773]
/API                  (Status: 200) [Size: 55680]
Progress: 1273833 / 1273834 (100.00%)
===============================================================
Finished
===============================================================

Hay ocasiones en las que el servidor web responde con códigos que GoBuster considera non-existent:

Error: the server returns a status code that matches the provided options for non existing urls. http://nonexistentdomain.com/5237066a-2070-4858-ab06-c8eac059389f => 500 (Length: 184). To continue please exclude the status code or the length

En estos casos podemos blacklistear el código 500 o las respuestas con longitud 184:

gobuster dir -u http://nonexistentdomain.com -w directory-list-2.3-big.txt -r -b 500

GoBuster también nos permite tunelizar el tráfico por proxys HTTTP o SOCKS5(solo en modo dir/vhost):

gobuster dir --help
      --proxy string                      Proxy to use for requests [http(s)://host:port] or [socks5://host:port]
gobuster dir -u http://nonexistentdomain.com -w directory-list-2.3-big.txt -r --proxy socks5://127.0.0.1:7783
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://nonexistentdomain.com
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                directory-list-2.3-big.txt
[+] Negative Status codes:   404
[+] Proxy:                   socks5://127.0.0.1:7783
[+] User Agent:              gobuster/3.6
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index                (Status: 200) [Size: 55680]
/rss                  (Status: 200) [Size: 16783]
/img                  (Status: 403) [Size: 162]
/default              (Status: 200) [Size: 55678]
/sitemap              (Status: 200) [Size: 40197]
/media                (Status: 403) [Size: 162]
/0                    (Status: 200) [Size: 55678]
/assets               (Status: 403) [Size: 162]
/css                  (Status: 403) [Size: 162]
/Index                (Status: 200) [Size: 55447]
/lib                  (Status: 403) [Size: 162]
/js                   (Status: 403) [Size: 162]
/RSS                  (Status: 200) [Size: 16783]
/api                  (Status: 200) [Size: 55678]
/SiteMap              (Status: 500) [Size: 30565]
/dist                 (Status: 403) [Size: 162]
/mapa                 (Status: 403) [Size: 162]
/noticias             (Status: 200) [Size: 50580]
/siteMap              (Status: 500) [Size: 30565]
/fotos                (Status: 200) [Size: 40348]
/Sitemap              (Status: 200) [Size: 40197]
/captcha              (Status: 500) [Size: 30565]
/Rss                  (Status: 200) [Size: 16783]
/INDEX                (Status: 200) [Size: 55447]
/contacto             (Status: 200) [Size: 31773]
/API                  (Status: 200) [Size: 55680]
Progress: 1273833 / 1273834 (100.00%)
===============================================================
Finished
===============================================================

DNS mode:

Para bruteforcear los posibles subdominios DNS ejecutaremos GoBuster con el parámetro dns:

gobuster dns -d nonexistentdomain.com -w subdomains-10000.txt -i

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Domain:     nonexistentdomain.com
[+] Threads:    10
[+] Show IPs:   true
[+] Timeout:    1s
[+] Wordlist:   subdomains-10000.txt
===============================================================
Starting gobuster in DNS enumeration mode
===============================================================
Found: mail.nonexistentdomain.com [A.B.C.D,a02:1234:4444:700::2031]

Found: www.nonexistentdomain.com [A.B.C.D]

Found: webmail.nonexistentdomain.com [A.B.C.D,a02:1234:4444:700::2031]

Found: ftp.nonexistentdomain.com [A.B.C.D]

Found: admin.nonexistentdomain.com [A.B.C.D]

Found: api.nonexistentdomain.com [A.B.C.D]

Progress: 9985 / 9986 (99.99%)
===============================================================
Finished
===============================================================

Podemos utilizar un servidor DNS en concreto indicando el parámetro -r:

gobuster dns -d nonexistentdomain.com -w subdomains-10000.txt -i -r 1.1.1.1

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Domain:     nonexistentdomain.com
[+] Threads:    10
[+] Resolver:   1.1.1.1
[+] Show IPs:   true
[+] Timeout:    1s
[+] Wordlist:   subdomains-10000.txt
===============================================================
Starting gobuster in DNS enumeration mode
===============================================================
Found: mail.nonexistentdomain.com [A.B.C.D,a02:1234:4444:700::2031]

Found: www.nonexistentdomain.com [A.B.C.D]

Found: webmail.nonexistentdomain.com [A.B.C.D,a02:1234:4444:700::2031]

Found: ftp.nonexistentdomain.com [A.B.C.D]

Found: admin.nonexistentdomain.com [A.B.C.D]

Found: api.nonexistentdomain.com [A.B.C.D]

Progress: 9985 / 9986 (99.99%)
===============================================================
Finished
===============================================================

VHOST mode:

En este modo conectará contra la IP del dominio pero irá cambiando el campo Host de la petición HTTP.

Generamos la lista de subdominios con dominio principal el que nos interesa:

MAINDOMAIN=nonexistentdomain.com
sed “s/$/.$MAINDOMAIN/g” subdomains-10000.txt > vhostlist.txt

Lanzamos GoBuster:

gobuster vhost -u http://nonexistentdomain.com -w vhostlist.txt

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:             http://nonexistentdomain.com
[+] Method:          GET
[+] Threads:         10
[+] Wordlist:        vhostlist.txt
[+] User Agent:      gobuster/3.6
[+] Timeout:         10s
[+] Append Domain:   false
===============================================================
Starting gobuster in VHOST enumeration mode
===============================================================
Found: api.nonexistentdomain.com Status: 200 [Size: 2147]
Progress: 9985 / 9986 (99.99%)
===============================================================
Finished
===============================================================

Mediante ngrep podemos ver el vhost que está enviado Host: domaincontrolpanel.nonexistentdomain.com

T 192.168.69.4:21259 -> A.B.C.D:80 [AP]
GET / HTTP/1.1.
Host: domaincontrolpanel.nonexistentdomain.com.
User-Agent: gobuster/3.6.
Accept-Encoding: gzip.
.

NOTA: Este modo también permite el uso de proxys tal como se explicó en el modo dir.


FUZZ mode:

Mediante fuzzing descubriremos ficheros o directorios mediante peticiones mas complejas, tan solo debemos indicar con la palabra FUZZ la parte de la URL a sustituir.

Lanzamos GoBuster:

gobuster fuzz -u "http://nonexistentdomain.com/index.php?p=source&file=FUZZ" -w directory-list-2.3-big.txt

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:          http://nonexistentdomain.com/index.php?p=source&file=FUZZ
[+] Method:       GET
[+] Threads:      10
[+] Wordlist:     directory-list-2.3-big.txt
[+] User Agent:   gobuster/3.6
[+] Timeout:      10s
===============================================================
Starting gobuster in fuzzing mode
===============================================================
Found: [Status=301] [Length=178] [Word=12] http://nonexistentdomain.com/index.php?p=source&file=12

Found: [Status=301] [Length=178] [Word=warez] http://nonexistentdomain.com/index.php?p=source&file=warez

Found: [Status=301] [Length=178] [Word=full] http://nonexistentdomain.com/index.php?p=source&file=full

Found: [Status=301] [Length=178] [Word=2006] http://nonexistentdomain.com/index.php?p=source&file=2006

Progress: 6 / 7 (85.71%)
===============================================================
Finished
===============================================================

Las peticiones serán similares a esta:

T 192.168.69.4:39851 -> A.B.C.D:80 [AP]
GET /index.php?p=source&file=warez HTTP/1.1.
Host: nonexistentdomain.com.
User-Agent: gobuster/3.6.
Accept-Encoding: gzip.
.

NOTA: Este modo también permite el uso de proxys tal como se explicó en el modo dir.


Amazon S3 buckets:

Los buckets de almacenamiento S3 están hospedados en los servidores de Amazon por lo tanto este tipo de reconocimiento se realiza directamente sobre sus servidores lo que puede llegar a ser problemático.

La idea es añadir al principio y al final de cada una de las palabras de la lista, el nombre del dominio con la esperanza de encontrar un bucket con dicho nombre.

MAINDOMAIN=nonexistentdomain
sed "s/$/-$MAINDOMAIN/g" list.txt > s3.txt
sed "s/^/$MAINDOMAIN-/g" list.txt >> s3.txt

Lanzamos GoBuster:

gobuster s3 -w s3.txt -k

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Threads:                 10
[+] Wordlist:                s3.txt
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
[+] Maximum files to list:   5
===============================================================
Starting gobuster in S3 bucket enumeration mode
===============================================================
Progress: 4754 / 4755 (99.98%)
===============================================================
Finished
===============================================================

En este caso no ha encontrado ningún bucket que coincida con la lista suministrada.

NOTA: Este modo también permite el uso de proxys tal como se explicó en el modo dir.


Google Cloud buckets:

Con los buckets de Google ocurre exactamente lo mismo que con los de Amazon.

La idea es añadir al principio y al final de cada una de las palabras de la lista, el nombre del dominio con la esperanza de encontrar un bucket con dicho nombre.

MAINDOMAIN=nonexistentdomain
sed "s/$/-$MAINDOMAIN/g" list.txt > gcs.txt
sed "s/^/$MAINDOMAIN-/g" list.txt >> gcs.txt

Lanzamos GoBuster:

gobuster gcs -w gcs.txt

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Threads:                 10
[+] Wordlist:                gcs.txt
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
[+] Maximum files to list:   5
===============================================================
Starting gobuster in GCS bucket enumeration mode
===============================================================
Progress: 4754 / 4755 (99.98%)
===============================================================
Finished
===============================================================

En este caso no ha encontrado ningún bucket que coincida con la lista suministrada.

NOTA: Este modo también permite el uso de proxys tal como se explicó en el modo dir.


TFTP servers:

GoBuster además permite enumerar los ficheros alojados en servidores TFTP:

gobuster tftp -s nonexistentdomain.com -w directory-list-2.3-big.txt -r

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Server:     nonexistentdomain.com:69
[+] Threads:    10
[+] Timeout:    1s
[+] Wordlist:   directory-list-2.3-big.txt
===============================================================
Starting gobuster in TFTP enumeration mode
===============================================================
Found: 1
Found: 2
Found: 3
Found: 3
Progress: 1273833 / 1273834 (100.00%)
===============================================================
Finished
===============================================================

STDIN:

Otra funcionalidad muy interesante sobretodo si andamos cortos de espacio es generar las palabras a comprobar mediante alguna herramienta y empiparlas directamente a GoBuster:

crunch 1 3 | gobuster dir -u http://nonexistentdomain.com -w -

Crunch will now generate the following amount of data: 72384 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 18278
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://nonexistentdomain.com
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                stdin (pipe)
[+] Negative Status codes:   302
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
Progress: 18278
===============================================================
Finished
===============================================================

Notas finales:

GoBuster es altamente configurable, este nos permite modificar cabeceras HTTP, autenticación HTTP básica, cambiar el user-agent, añadir cabeceras HTTP, modo resume en las wordlists o búsqueda de ficheros de backup entre muchas otras, podemos consultar los parámetros soportados por cada modo del siguiente modo:

gobuster dir --help
gobuster dns --help
gobuster vhost --help
gobuster fuzz --help
gobuster s3 --help
gobuster gcs --help
gobuster tftp --help
Si te ha gustado el artículo puedes invitarme a un RedBull aquí