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ư nslookup
và dig
ở 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:
- Về server Apache:
product:Apache
. - Về hostname bất kỳ:
hostname:tryhackme.com
. - 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ỗiFUZZ
đó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.
Related
list
from outgoing([[Subdomain Enumeration]])
sort file.ctime asc
Resources
- TryHackMe | Subdomain Enumeration
- Passive Reconnaise - TryHackMe
- 『Tự học Web Pentest』#3 - RECON3: Subdomain Enumeration & HTTP (youtube.com)
Footnotes
-
Tham khảo thêm Search Query Examples ↩