Có ba cách để thực hiện subdomain enumeration:

  • OSINT (open source intelligence)
  • Brute force
  • Virtual host

Chỉ có cách đầu tiên là thuộc loại passive reconnaise.

OSINT

SSL/TLS Certificates

Các CA (certificate authority) sẽ lưu lại danh sách các chứng chỉ được cấp cho một domain bất kỳ. Chúng ta có thể sử dụng danh sách này để tìm ra các subdomain của trang web.

Truy cập thông qua:

Search Engines

Có thể sử dụng các công cụ tìm kiếm (phương pháp Google Dorking). Ví dụ bên dưới sẽ tìm kiếm các subdomain của domain.com ngoại trừ www.domain.com.

site:*.domain.com -site:www.domain.com

DNS

DNS Dumpster

Các công cụ như nslookupdig ở trong DNS Reconnaise không cho ta biết thông tin về các subdomain. Các subdomain có thể không được cập nhật thường xuyên nên rất có giá trị khi thực hiện khai thác.

Công cụ DNS Dumpster sẽ giúp chúng ta tìm được các subdomain. Công cụ này thậm chí còn phân giải các tên miền để thu được các địa chỉ IP và cố định vị chúng.

Shodan.io

Shodan.io1 là một công cụ tìm kiếm và khám phá các thiết bị có kết nối đến internet. Các thông tin tìm được có thể là:

  • Công ty hosting
  • Vị trí địa lý
  • Loại server và version

Ví dụ về các từ khóa tìm kiếm:

  1. Về server Apache: product:Apache.
  2. Về hostname bất kỳ: hostname:tryhackme.com.
  3. Về lỗ hổng nào đó: vuln:CVE-2014-0160.

Sublist3r

Có một công cụ tự động hóa có tên là Sublist3r.

Cách dùng:

./sublist3r.py -d acmeitsupport.thm

Với -d là để khai báo domain.

Subfinder

Ngoài ra còn có là một công cụ OSINT khác có tên là Subfinder.

Sử dụng tương tự Sublist3r:

subfinder -d DOMAIN

Brute Force

Bởi vì brute force subdomain được xếp vào loại Active Reconnaise, tức là có tương tác với target.

Có hai loại:

  • Brute force thông thường
  • Dùng wordlist.

Khuyến khích nên dùng kiểu thứ hai vì kiểu thứ nhất có ghi lại log.

DNS Recon

Ví dụ sử dụng dnsrecon:

dnsrecon -d acmeitsupport.thm -t brt

Với -d là để khai báo domain và -t là để chọn kiểu scan. Có nhiều kiểu scan khác nhau, ví dụ như là std (standard) hay là brt (brute force).

Knockpy

Công cụ Knockpy cũng giúp quét subdomain và ta cũng có thể dùng wordlist để chạy công cụ này.

Cú pháp:

python3 knockpy.py domain.com

Virtual Host

Web server có thể host nhiều trang web cùng lúc. Server sẽ phản hồi lại trang web mà user cần dựa trên trường HOST ở trong header. Bằng cách thay đổi trường này trong request, ta có thể tìm ra được nhiều subdomain khác nhau.

Công cụ để thực hiện công việc này là Ffuf.

Ví dụ sử dụng:

ffuf -w /path/to/DNS/namelist.txt -H "Host: FUZZ.domain.com" -u <URL>

Với:

  • -w là để khai báo wordlist.
  • -H là để thêm/custom header của giao thức HTTP, trong đó chuỗi FUZZ đóng vai trò như là placeholder để thế các từ ở trong wordlist vào.
  • -u là để khai báo URL của domain, có thể là địa chỉ IP (chẳng hạn như http://1.1.1.1).

Chúng ta có thể dùng -fs để lọc ra những responses có kích thước nhỏ hơn hoặc bằng một ngưỡng nhất định.

Trong ví dụ bên dưới, các response có kích thước dưới 200 bytes sẽ bị bỏ qua:

ffuf -w /path/to/DNS/subdomains.txt -H "Host: FUZZ.domain.com" -u <URL> -fs 200

Checking Domains

Không phải tất cả các subdomain mà ta tìm được đều là web service. Chúng ta có thể lưu các domain này vào một file, giả sử hosts.txt và dùng tool HTTPX để kiểm tra.

Cú pháp như sau:

cat hosts.txt | httpx

Output của câu lệnh này sẽ là các URL của các domain đang chạy web service.

list
from outgoing([[Subdomain Enumeration]])
sort file.ctime asc

Resources

Footnotes

  1. Tham khảo thêm Search Query Examples