Pendahuluan
Reconnaissance dan Enumeration adalah dua tahap awal yang sangat penting dalam kegiatan offensive security, seperti penetration testing, bug hunting, dan red teaming.
Hasil dari recon dan enum ini menjadi dasar untuk aktivitas selanjutnya, mulai dari eksploitasi hingga eskalasi.
Berikut beberapa alasan mengapa kegiatan ini krusial:
Menentukan Attack Surface
Tanpa informasi awal seperti domain, subdomain, dan IP, arah serangan menjadi tidak jelas.Efisiensi Eksploitasi
Dengan informasi yang akurat, kita bisa langsung fokus pada celah potensial tanpa membuang waktu pada hal-hal yang tidak relevan.Mencegah Target Terlewat
Banyak celah tidak ditemukan bukan karena teknik yang salah, melainkan karena target tidak terdeteksi sejak awal.Dasar untuk Langkah Berikutnya
Tahap seperti eksploitasi, pivoting, atau eskalasi sangat bergantung pada hasil recon dan enum.
Artikel ini sengaja saya tulis sebagai catatan online pribadi mengenai proses recon dan enum pada target web, yang mungkin juga bermanfaat bagi pembaca.
Artikel ini bersifat seperti live document, sehingga akan terus saya perbarui seiring berjalannya waktu.
Cheatsheet
Catatan:
- Sebelum menggunakan cheatsheet ini, pastikan konfigurasi API pada setiap tool sudah dilakukan.
- Perbedaan versi pada tool dapat menyebabkan perbedaan hasil dan perintah yang digunakan.
1. Menyiapkan Folder Proyek
# 1. Membuat direktori proyek dengan format {tahun}/{target}mkdir -p 2025/target.comcd 2025/target.com
# 2. Membuat direktori untuk hasil recon dan enummkdir subdomainsmkdir portsmkdir dirs
2. Root Domain
Terkadang target memliki lebih dari satu domain selain domain utamanya.
# 1. Masuk ke direktori subdomainscd subdomains
# 2. Melihat ASN dan IP publik berdasarkan nama organisasi# Catatan: Periksa manual output file, terkadang tidak ada hasilamass intel -org "{nama_organisasi}" -o asn.txt -config /opt/Tools/OSINT/amass/config.yaml
# 2.1. Alternatif (lebih cepat)# Akses: https://bgp.he.net/ --> https://bgp.he.net/ASXXXX#_prefixes
# 3. Jika sudah tahu ASN-nya, cari semua domain/infrastruktur berdasarkan ASNamass intel -asn "{asn}" -o asn-subnet.txt -config /opt/Tools/OSINT/amass/config.yaml
# 3.1. Alternatif (lebih cepat)# Akses: https://ipinfo.io/ASXXXXX (login)# Simpan list subnet di subnets.txt
# 4. Cari ASN berdasarkan domain:# Catatan: Bisa dilakukan jika domain tidak menggunakan WAFdig +short target.com# 4.1. Hasil IP, lalu:curl https://ipinfo.io/{ip}/json
# 5. Melihat informasi dasar domainwhois {IP}# 5.1. Jika butuh histori domain (sebelum era regulasi privasi seperti GDPR)# Akses: https://whois-history.whoisxmlapi.com/
3. Subdomain Enumeration
# 1. Buat variabel untuk root domaindomain='target.com'
# 2. Dapatkan subdomain dengan OSINT## 2.1. subfindersubfinder -d "$domain" -o domain-ip-subfinder.txt -active -ipawk -F"," '{print $1}' domain-ip-subfinder.txt > domain-subfinder.txtawk -F"," '{print $2}' domain-ip-subfinder.txt > ip-subfinder.txt
## 2.2. amassamass enum -d "$domain" -active -oA domain-ip-amass -config /opt/Tools/OSINT/amass/config.yamlsed 's/\x1B\[[0-9;]*[mK]//g' domain-ip-amass.txt | grep -Eo "([a-zA-Z0-9_-]+\.)+${domain}" | sort -u > domain-amass.txtgrep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' domain-ip-amass.txt | sort -u > ip-amass.txtgrep -oE '([0-9a-fA-F:]{3,39})' domain-ip-amass.txt | grep ':' | sort -u > ip6-amass.txt
# 3. Dapatkan subdomain dengan brute-force (gobuster >= 3.8.0)gobuster dns --do "$domain" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -o domain-ip-brute.txt --resolver 1.1.1.1 --delay 100ms --timeout 5ssed 's/\x1B\[[0-9;]*[mK]//g' domain-ip-brute.txt | awk '{print $1}' | sort -u > domain-brute.txtsed 's/\x1B\[[0-9;]*[mK]//g' domain-ip-brute.txt | awk '{print $2}' | tr ',' '\n' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u > ip-brute.txtsed 's/\x1B\[[0-9;]*[mK]//g' domain-ip-brute.txt | awk '{print $2}' | tr ',' '\n' | grep ':' | sort -u > ip6-brute.txt
# 4. Gabungkan semua subdomain dan ipcat domain-amass.txt domain-brute.txt domain-subfinder.txt | sort -u > all-subdomains.txtcat ip-amass.txt ip-brute.txt ip-subfinder.txt | sort -u > all-ip.txt
# 5. Generate permutasi dari semua subdomaindnsgen all-subdomains.txt > permutations-temp.txtcat all-subdomains.txt permutations-temp.txt | sort -u > permutations.txtrm permutations-temp.txt
# 6. Validasi hasil permutation dengan DNS resolverdnsx -l permutations.txt -o valid-subdomains.txt -stats -silent -r 1.1.1.1echo "$domain" >> valid-subdomains.txt
4. Port Scanning
# 1. Masuk ke direktori portscd ../ports
# 2. Melakukan pasif scanning port (shodan)## Catatan: Karena nrich tidak menggunakan token API, jika terlalu banyak dan cepat akan terkena limitcat ../subdomains/all-ip.txt | xargs -I{} -n1 sh -c 'echo {} | nrich -; sleep 2' > shodan-ips.txtxargs -n1 prips < ../subdomains/subnets.txt | xargs -I{} sh -c 'echo {} | nrich -; sleep 2' > shodan-asn.txtxargs -n1 prips < ../subdomains/subnets.txt | nrich - > shodan-asn.txt
# 3. Melakukan aktif scanning port (pastikan bukan IP WAF)# 3.1. Naabuecho "ASXXXX" | naabu -top-ports 100 -o naabu-asn.txt # ASNnaabu -l ../subdomains/all-ip.txt -top-ports 100 -o naabu-ips.txt
# 3.2. Nmapnmap -p- -oN {ip/domain}-allports.nmap {ip/domain} -vvnmap -sV -sC --script vuln -p{specific_port} -oN {ip/domain}.nmap {ip/domain} -vv
# 3.2. Nessus (manual)
5. Filtering Live Domains (HTTP)
# 1. Melihat list server web yang aktif pada subdomainscat ../subdomains/valid-subdomains.txt | httpx -o http.txt -title -status-code -tech-detect
# 2. Melihat list server web yang aktif pada IPscat ../subdomains/all-ip.txt | httpx -o http-ip.txt -title -status-code -tech-detect
# 3. Melihat list server web yang aktif pada subnet ASNxargs -n1 prips < ../subdomains/subnets.txt | httpx -o http-asn.txt -title -status-code -tech-detect
# 4. Mengabungkan list server web yang aktifcat http-asn.txt http-ip.txt http.txt | sort -u > http-all.txtawk '{print $1}' http-all.txt > http-all-clean.txt
# 5. Screenshot semua halaman utama server webgowitness scan file -f http-all-clean.txt
6. WAF Detection
# 1. Masuk ke direktori dirs (buat direktori baru jika ada banyak target)cd ../dirs
# 2. Deteksi WAFwafw00f https://target.com/ | tee waf.txt
6.1. Bypass WAF via Origin IP
Web Application Firewall (WAF) berfungsi sebagai lapisan pertahanan terdepan dari aplikasi web. Tugasnya memfilter request berbahaya seperti SQLi, XSS, dan command injection sebelum mencapai server aslinya (origin).
Namun, proteksi ini hanya efektif jika semua traffic dipaksa melewati WAF. Kalau ternyata server origin masih bisa diakses langsung, maka WAF bisa dilewati (bypass).
Berikut beberapa pendekatan yang bisa dicoba untuk menemukan IP origin:
Riwayat DNS (A Record):
Cek record DNS lama di SecurityTrails.Bandingkan IP yang ditemukan dengan hasil enumerasi (
all-ip.txt
) atau subnet ASN milik organisasi target.Jika ada kecocokan, besar kemungkinan IP tersebut adalah origin server.
Bandingkan Hasil Live Hosts:
Gunakan hasil Filtering Live Domains (HTTP) darigowitness
untuk target IP.Cari host yang menampilkan tampilan web identik atau mirip dengan aplikasi target.
Virtual Host Enumeration: Satu server web bisa saja menjalankan beberapa virtual host yang tidak terlihat langsung.
Lakukan vhost enumeration terhadap aset IP atau ASN menggunakan kombinasi
ffuf
(untuk brute-force host header) dangowitness
(untuk verifikasi visual).
Jika berhasil ditemukan, arahkan domain ke IP tersebut di /etc/hosts
:
echo "203.0.113.50 target.com" | sudo tee -a /etc/hostscurl -i http://target.com
6.2. Security Best Practice
Dari sisi keamanan, seharusnya origin hanya menerima koneksi dari WAF. Dengan konfigurasi whitelist seperti ini, meskipun IP asli bocor, penyerang tetap tidak bisa mengakses aplikasi tanpa melalui WAF.
Jika ditemukan ada origin yang masih bisa diakses tanpa melalui WAF, itu tanda misconfiguration. Berikan rekomendasi terhadap organisasi untuk membatasi akses origin hanya dari IP WAF.
7. Content Discovery
# Passive discoveryecho "https://target.com" | gau > gau.txt && echo "https://target.com" | waybackurls > waybackurls.txt | cat gau.txt waybackurls.txt | sort -u > osint-url.txt
# Active Discovery# 1. dirsearchdirsearch -u "https://target.com/" -o dirsearch.txtdirsearch -r -u "https://target.com/" -o dirsearch-recursive.txt
# 2. gobuster# Wordlist:# - /usr/share/dirb/wordlists/common.txt# - /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt# - /usr/share/seclists/Discovery/Web-Content/raft-large-files.txtgobuster dir -u https://target.com/ --db -w /usr/share/dirb/wordlists/common.txt -o gobuster-common.txtgobuster dir -u https://target.com/ --db -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt -o gobuster-raftdir.txtgobuster dir -u https://target.com/ --db -w /usr/share/seclists/Discovery/Web-Content/raft-large-files.txt -o gobuster-raftfile.txt
# 3. katanakatana -d 4 -jc -u https://target.com -o katana.txtkatana -d 4 -jc -u https://target.com -H 'Cookie: sessionid=abc123; csrftoken=xyz789' -o katana.txt
# list parametercat osint-url.txt | grep "="grep -oP '(?<=\?).*' osint-url.txt | tr '&' '\n' | cut -d= -f1 | sort -ugrep -oP '(?<=\?).*' osint-url.txt | tr '&' '\n' | sort -u
gospider -s http://target.com/ --subs --sitemap --robots
# Google OSINTsite:target.comsite:target.com ext:php,docs,xlsx,pdf inurl:login
# finding parameterparamspider -d target.comarjun -u https://target.com
8. SSL Check
# 1. Masuk ke direktori sslcd ../ssl
# 2. nmapnmap --script "ssl*" -p443 -oN ssl.nmap "$domain"
# 3. testssl.shtestssl.sh "$domain" | tee testssl.txt
Penutup
Masih banyak hal yang belum saya masukkan dalam cheatsheet ini, sehinga masih perlu saya kembangkan.
Beri tahu saya jika ada teknik yang bagus untuk saya pelajari.
Terima kasih, semoga bermanfaat!