Do thám website: Web reconnaissance tools #1 - Gobuster

0. Web reconnaissance

Reconnaissance ( hay Information Gathering hay Enumeration ) là bước đầu tiên của penetration testing ( pentest ), trong đó mục tiêu là tìm thấy càng nhiều thông tin càng tốt về Website được pentest.
Trong bước Recon này, để hiệu quả, chính xác, tiết kiệm thời gian và công sức, việc sử dụng các tools có sẵn hoặc tự viết tools là bắt buộc.
Hôm nay tôi sẽ giới thiệu đến các bạn 1 tool tôi hay dùng gần đây: Gobuster

Lưu ý: Wordlist các bạn có thể tìm kiếm và tải miễn phí trên internet để sử dụng.

1. Giới thiệu và cài đặt

Là 1 tool mạnh và mới, được ưa dùng trên Kali Linux, được viết bằng Golang và được update thường xuyên. Gobuster là một công cụ được sử dụng để brute force URLs trên các trang web và DNS subdomains. Bạn có thể xem toàn bộ source code tại đây.

Để cài đặt, trong Kali Linux, các bạn gõ: apt-get install gobuster

2. Sử dụng

Gobuster cung cấp 3 mode option chính gồm: DIR, DNS và vHOST
Trong bài viết này chúng ta sẽ tìm hiểu về các options chính, thường dùng và hữu ích.

2.1. Dir mode: Dò quét các URLs của website theo wordlist

Để hiển thị các tùy chọn trong chế độ này, các bạn gõ: gobuster dir -h

Usage:
  gobuster dir [flags]

Flags:
  -f, --addslash                      Append / to each request
  -c, --cookies string                Cookies to use for the requests
  -e, --expanded                      Expanded mode, print full URLs
  -x, --extensions string             File extension(s) to search for
  -r, --followredirect                Follow redirects
  -H, --headers stringArray           Specify HTTP headers, -H 'Header1: val1' -H 'Header2: val2'
  -h, --help                          help for dir
  -l, --includelength                 Include the length of the body in the output
  -k, --insecuressl                   Skip SSL certificate verification
  -n, --nostatus                      Don't print status codes
  -P, --password string               Password for Basic Auth
  -p, --proxy string                  Proxy to use for requests [http(s)://host:port]
  -s, --statuscodes string            Positive status codes (will be overwritten with statuscodesblacklist if set) (default "200,204,301,302,307,401,403")
  -b, --statuscodesblacklist string   Negative status codes (will override statuscodes if set)
      --timeout duration              HTTP Timeout (default 10s)
  -u, --url string                    The target URL
  -a, --useragent string              Set the User-Agent string (default "gobuster/3.0.1")
  -U, --username string               Username for Basic Auth
      --wildcard                      Force continued operation when wildcard found

Global Flags:
  -z, --noprogress        Don't display progress
  -o, --output string     Output file to write results to (defaults to stdout)
  -q, --quiet             Don't print the banner and other noise
  -t, --threads int       Number of concurrent threads (default 10)
      --delay duration    Time each thread waits between requests (e.g. 1500ms)
  -v, --verbose           Verbose output (errors)
  -w, --wordlist string   Path to the wordlist

Chúng ta sẽ xem xét câu lệnh sau, đây cũng sẽ là câu lệnh khái quát, cơ bản hay dùng khi các bạn sử dụng Gobuster:

gobuster dir -u 10.10.10.157 -w /home/vt103/wordlist/common.txt -l -t 30 -e -x php -o 10.10.10.157.result.txt

  • 10.10.10.157 là địa chỉ 1 machine trên hackthebox.eu, các bạn có thể ghé qua website, đăng ký và chơi thử
  • common.txt là file wordlist tôi sử dụng, có khoảng gần 5000 word


Và đây là kết quả:

Chúng ta hãy cùng xem xét các options đã được sử dụng:

dir: mode được chọn
-u: địa chỉ URL
-w: địa chỉ file wordlist trong máy chúng ta
-l: In ra length body của response nhận được
-t: số threads được sử dụng, mặc định là 10
-e: dùng để in kết quả theo dạng toàn bộ URL
-x: thêm phần đuôi mở rộng để brute force, chẳng hạn -x php: tự thêm .php vào sau các request URL
-o: in kết quả ra file để tiện dùng sau này, mặc định sẽ in ra /home/ do chúng ta gọi gobuster ngay tại /home/


Một số tùy chọn khác:

-U: username cho website có Basic Authen
-P: password cho website có Basic Authen
-c: gán cookie cho các request
-s: gán các HTTP status code được chấp nhận, mặc định là 200,204,301,302,307,401,403
-r: follow redirects

Dựa vào kết quả của việc brute-force URLs phía trên, chúng ta đã có URL đúng và cũng là hướng làm của machine này:

2.2 DNS mode: Dò quét DNS subdomains của website

Để hiển thị các tùy chọn trong chế độ này, các bạn gõ: gobuster dns -h

Usage:
  gobuster dns [flags]

Flags:
  -d, --domain string      The target domain
  -h, --help               help for dns
  -r, --resolver string    Use custom DNS server (format server.com or server.com:port)
  -c, --showcname          Show CNAME records (cannot be used with '-i' option)
  -i, --showips            Show IP addresses
      --timeout duration   DNS resolver timeout (default 1s)
      --wildcard           Force continued operation when wildcard found

Global Flags:
  -z, --noprogress        Don't display progress
  -o, --output string     Output file to write results to (defaults to stdout)
  -q, --quiet             Don't print the banner and other noise
  -t, --threads int       Number of concurrent threads (default 10)
      --delay duration    Time each thread waits between requests (e.g. 1500ms)
  -v, --verbose           Verbose output (errors)
  -w, --wordlist string   Path to the wordlist

Ý nghĩa các options sẽ khác đôi chút so với dir mode phía trên. Chúng ta sẽ cùng xem xét câu lệnh sau:

gobuster dns -d facebook.com -w home/vt103/wordlist/common.txt -t 30 -i -o dnsrecon.txt

Trong đó:

-d: chỉ domain name, sẽ không có http:// hay https://
-w: địa chỉ file wordlist trong máy chúng ta
-t: số threads được sử dụng, mặc định là 10
-i: hiển thị địa chỉ IP của target
-o: in kết quả ra file .txt

Và đây là kết quả, bạn đã biết được bao nhiêu địa chỉ trong số này? :

2.3 vHost mode: Dò quét vHost của website

Để hiển thị các tùy chọn trong chế độ này, các bạn gõ: gobuster vhost -h

Usage:
  gobuster vhost [flags]

Flags:
  -c, --cookies string        Cookies to use for the requests
  -r, --followredirect        Follow redirects
  -H, --headers stringArray   Specify HTTP headers, -H 'Header1: val1' -H 'Header2: val2'
  -h, --help                  help for vhost
  -k, --insecuressl           Skip SSL certificate verification
  -P, --password string       Password for Basic Auth
  -p, --proxy string          Proxy to use for requests [http(s)://host:port]
      --timeout duration      HTTP Timeout (default 10s)
  -u, --url string            The target URL
  -a, --useragent string      Set the User-Agent string (default "gobuster/3.0.1")
  -U, --username string       Username for Basic Auth

Global Flags:
  -z, --noprogress        Don't display progress
  -o, --output string     Output file to write results to (defaults to stdout)
  -q, --quiet             Don't print the banner and other noise
  -t, --threads int       Number of concurrent threads (default 10)
      --delay duration    Time each thread waits between requests (e.g. 1500ms)
  -v, --verbose           Verbose output (errors)
  -w, --wordlist string   Path to the wordlist

Đây là 1 mode tôi ít sử dụng, và ngay cả trên github giới thiệu của Gobuster thì mode này cũng được giới thiệu khá sơ sài. Bạn đọc có thể tự cài đặt và thử sử dụng.

Ví dụ trên Github: gobuster vhost -u https://mysite.com -w common-vhosts.txt

3. Kết luận

Việc reconnaissance yêu cầu sử dụng kết hợp rất nhiều tools và kênh thông tin khác nhau. Gobuster xứng đáng nằm trong "kho vũ khí" của bất cứ một ai làm về CyberSec bởi tốc độ và sự hiểu quả của nó. Happy Hacking !