3
Teknik Recon dan Pengumpulan Aset
Halaman ini memetakan one-liner recon di README menurut tujuan pengumpulannya. Semua teknik berangkat dari satu placeholder, HOST atau HOSTS.txt, lalu menghasilkan artefak yang menjadi bahan tahap berikutnya. Definisi placeholder itu ada pada bagian Definitions README.md:6-151, dan cara membacanya dibahas di Placeholder dan Konvensi Penulisan One-liner.
Yang membedakan satu teknik recon dari yang lain bukan tool-nya, melainkan sumber data yang dipakai: certificate transparency, API pihak ketiga, wordlist bruteforce, arsip URL, berkas JavaScript, atau routing BGP. Halaman ini menyusun peta itu; perintah lengkapnya dibahas di empat halaman anak.
Enam lapisan recon
Diagram berikut mengelompokkan one-liner recon menurut tujuan, bukan menurut urutan barisnya di README. Satu lapisan boleh dipakai berkali-kali, dan lapisan discovery selalu berjalan lebih dulu.
graph TD
HOST["HOST / HOSTS.txt"] --> L1
SCOPE["Scope: chaos-bugbounty-list, bounty-targets-data"] --> L1
subgraph L1["1. Discovery: nama host"]
CRT["crt.sh + jq -r '.[].name_value'"]
RDNS["RapidDNS / CertSpotter / VirusTotal"]
SUBF["subfinder / assetfinder / amass"]
FFUF["ffuf -u https://FUZZ.HOST -w FILE.txt"]
end
L1 --> L2
subgraph L2["2. Validasi dan perluasan"]
LIVE["httpx -mc 200 / httprobe"]
CURLP["parallel -j50 curl -w Status:%{http_code}"]
VHOST["ffuf -H 'Host: FUZZ'"]
TKO["subjack -w FILE + fingerprints.json"]
end
L2 --> L3
subgraph L3["3. Panen dan ekstraksi URL"]
GAU["gau / waybackurls"]
SM["sitemap.xml + xmllint"]
OTX["gron --ungron + jq"]
LINK["linkfinder.py"]
SWAG["swagger.json + jq"]
PARA["paramspider.py"]
end
L2 --> L4
subgraph L4["4. Wordlist turunan"]
KEYS["unfurl -u keys"]
PATHS["unfurl -u paths"]
TOK["httprobe + curl + tok"]
end
L2 --> L5
subgraph L5["5. Jaringan: IP, ASN, port"]
ASN["whois -h whois.radb.net -i origin -T route"]
CIDR["dig +short + whois CIDR/Organization"]
PORT["nmap -oX + jc --xml + jq"]
NAABU["cf-check + naabu -rate 40000"]
HUNTER["hosthunter.py"]
end
L3 --> OUT["Feed ke Deteksi Kerentanan"]
L4 --> OUT
L5 --> OUT
style HOST fill:#336791,color:#fff
style SCOPE fill:#f59e0b,color:#000
style LIVE fill:#2d7d46,color:#fff
style TKO fill:#dc2626,color:#fff
style GAU fill:#8b5cf6,color:#fff
style SM fill:#8b5cf6,color:#fff
style OTX fill:#8b5cf6,color:#fff
style LINK fill:#8b5cf6,color:#fff
style SWAG fill:#8b5cf6,color:#fff
style PARA fill:#8b5cf6,color:#fff
style KEYS fill:#8b5cf6,color:#fff
style PATHS fill:#8b5cf6,color:#fff
style TOK fill:#8b5cf6,color:#fff
style ASN fill:#2d7d46,color:#fff
style CIDR fill:#2d7d46,color:#fff
style PORT fill:#2d7d46,color:#fff
style NAABU fill:#f59e0b,color:#000
style HUNTER fill:#8b5cf6,color:#fff
style OUT fill:#f59e0b,color:#000
%% fig: Peta lapisan recon menurut tujuan
%% desc: One-liner recon di README dikelompokkan menjadi lima lapisan, mulai dari discovery nama host sampai pemetaan jaringan, dan semuanya bermuara ke tahap deteksi kerentanan.Lapisan discovery berbasis API hampir selalu berbentuk satu curl yang hasilnya dipotong grep -oP atau jq. Contohnya crt.sh: respons JSON diambil field name_value lalu wildcard * dibuang dengan sed README.md:203-2082. RapidDNS memakai pola lain pada sumber yang sama, yaitu grep -oP '(?<=<td>)[^<]+' untuk mengambil isi sel tabel HTML README.md:114-1193.
Bruteforce hanya masuk akal ketika sumber pasif sudah habis. Dua bentuknya berbeda: ffuf -u https://FUZZ.HOST -w FILE.txt mencetak kolom URL dari tabel keluaran ffuf README.md:217-2224, sedangkan bruteforce lewat DNS-over-HTTPS mengirim satu request ke dns.google.com/resolve per kata dari FILE.txt dengan parallel -j100 README.md:182-1875.
Lapisan validasi memisahkan nama host yang hidup dari yang mati. Bentuk paling ringkas adalah subfinder -d HOST -silent yang disalurkan ke httpx -silent -follow-redirects -mc 200 README.md:372-3776. Bila httpx tidak dipakai, parallel -j50 curl -w mencetak status, ukuran, dan URL efektif per host README.md:277-2827.
Sisi jaringan bergerak dari alamat ke prefix: whois -h whois.radb.net -i origin -T route membalik satu IP menjadi daftar route yang diurutkan dengan sort -n README.md:224-2298. Arah sebaliknya, yaitu nama host dari satu IP, dikerjakan hosthunter.py atas HOSTS.txt README.md:386-3919.
Peta teknik per tujuan
Tabel ini menghubungkan setiap tujuan recon dengan perintah kunci dan halaman yang membahasnya.
| Lapisan | Tujuan | Perintah kunci | Tool | Rujukan | Halaman rinci |
|---|---|---|---|---|---|
| Discovery | Nama host dari certificate transparency | jq -r '.[].name_value' | curl, jq, sed | README.md:203-2082 | Enumerasi Subdomain dan Deteksi Takeover |
| Discovery | Nama host dari API pihak ketiga | rapiddns.io/subdomain/$host?full=1 | curl, grep -oP | README.md:114-1193 | Enumerasi Subdomain dan Deteksi Takeover |
| Discovery | Domain pihak ketiga dari header respons | awk '/^content-security-policy:/' | curl, awk, sed | README.md:393-39810 | Enumerasi Subdomain dan Deteksi Takeover |
| Discovery | Recon pasif berbasis API | api.recon.dev/search?domain=HOST | curl, jg | README.md:365-37011 | Enumerasi Subdomain dan Deteksi Takeover |
| Validasi | Host aktif berstatus 200 | httpx -silent -follow-redirects -mc 200 | subfinder, httpx | README.md:372-3776 | Enumerasi Subdomain dan Deteksi Takeover |
| Validasi | Status massal tanpa httpx | curl -w 'Status:%{http_code}' | parallel, curl | README.md:277-2827 | Enumerasi Subdomain dan Deteksi Takeover |
| Validasi | Vhost dan admin panel tersembunyi | ffuf -c -u URL -H "Host: FUZZ" -w FILE.txt | ffuf | README.md:358-36312 | Enumerasi Subdomain dan Deteksi Takeover |
| Takeover | Subdomain yang bisa diambil alih | subjack -w FILE -t 100 -timeout 30 -ssl | subfinder, assetfinder, amass, subjack | README.md:263-26813 | Enumerasi Subdomain dan Deteksi Takeover |
| Scope | Domain program publik | jq -r '.programs[].domains' | curl, jq | README.md:284-28914 | Aset In-scope, Bruteforce, dan Wordlist |
| Scope | Aset in-scope per platform | .[].targets.in_scope[] | curl, jq | README.md:291-32815 | Aset In-scope, Bruteforce, dan Wordlist |
| Wordlist | Kata kunci dari nama parameter dan path | unfurl -u keys dan unfurl -u paths | gau, unfurl, tok | README.md:245-25416 | Aset In-scope, Bruteforce, dan Wordlist |
| URL | URL unik dari sitemap | xmllint --format - lalu grep -e 'loc' | curl, xmllint | README.md:330-33517 | Pemetaan URL, Berkas JavaScript, dan Endpoint |
| URL | URL historis dari AlienVault OTX | gron --ungron | gron, jq, egrep | README.md:256-26118 | Pemetaan URL, Berkas JavaScript, dan Endpoint |
| URL | Endpoint dari berkas JavaScript | python linkfinder.py -i "$link" -o cli | curl, grep, linkfinder | README.md:337-34219 | Pemetaan URL, Berkas JavaScript, dan Endpoint |
| URL | Path dari definisi swagger | jq mengambil keys dari .paths | curl, jq | README.md:344-34920 | Pemetaan URL, Berkas JavaScript, dan Endpoint |
| URL | URL berparameter per host | python3 paramspider.py -l high -o ./OUT/% -d % | xargs, paramspider | README.md:270-27521 | Pemetaan URL, Berkas JavaScript, dan Endpoint |
| Jaringan | Prefix route dari ASN | whois -h whois.radb.net -i origin -T route | whois, awk, sort | README.md:224-2298 | IP, ASN, dan Pemindaian Port |
| Jaringan | CIDR dan organisasi per host | dig a $HOST +short lalu whois $ip | dig, whois, paste | README.md:106-11222 | IP, ASN, dan Pemindaian Port |
| Jaringan | IP:PORT dari keluaran nmap | nmap -v0 HOST -oX /dev/stdout | nmap, jc, jq, httpx | README.md:400-40523 | IP, ASN, dan Pemindaian Port |
| Jaringan | Port terbuka tanpa host CloudFlare | cf-check lalu naabu -rate 40000 -verify | subfinder, filter-resolved, cf-check, naabu | README.md:238-24324 | IP, ASN, dan Pemindaian Port |
| Jaringan | Nama host dari satu IP | python3 hosthunter.py HOSTS.txt | hosthunter | README.md:386-3919 | IP, ASN, dan Pemindaian Port |
Format sumber menentukan alat parsing
Sumber data recon di README datang dalam empat format, dan format itulah yang memilih tool parsing-nya. Lihat tabel berikut.
| Format sumber | Pola parsing | Contoh nyata | Rujukan |
|---|---|---|---|
| JSON API | jq -r mengambil field | .programs[].domains dari chaos-bugbounty-list.json | README.md:284-28914 |
| HTML | grep -oP dengan lookbehind | (?<=<td>)[^<]+ | README.md:114-1193 |
| XML | xmllint --format - lalu grep -e 'loc' | sitemap.xml | README.md:330-33517 |
| Keluaran nmap | jc --xml lalu jq | -oX /dev/stdout | README.md:400-40523 |
| Berkas JavaScript | grep -oh dengan regex path | "\/[a-zA-Z0-9_/?=&]*" | README.md:99-10425 |
Pola ini menjelaskan mengapa satu-liner recon jarang terdiri atas satu tool. Rantai gron pada OTX termasuk pengecualian: perintah membongkar JSON menjadi baris, menyaring \burl\b, lalu menyusunnya kembali dengan gron --ungron sebelum jq mengambil nilai README.md:256-26118. Untuk berkas JavaScript, grep -oh cukup karena setiap endpoint ditulis sebagai string yang diawali garis miring README.md:99-10425.
Jebakan saat menjalankan recon
⚠️
subjackpada rantai takeover membaca berkas fingerprint di$GOPATH/src/github.com/haccer/subjack/fingerprints.json. Bila path itu tidak ada, tahap takeover tidak menghasilkan apa pun meski pengumpulan subdomain berhasil README.md:263-26813.
⚠️
naabu -rate 40000baru dijalankan setelahfilter-resolveddancf-check. Tanpa penyaringan itu, host di belakang CloudFlare ikut dipindai dan hasil port menjadi palsu README.md:238-24324.
⚠️
ffuf -c -u URL -H "Host: FUZZ" -w FILE.txtmenguji vhost pada satuURLdengan wordlist eksternal. PastikanURLberada di scope program sebelum kata pertama dijalankan README.md:358-36312.
⚠️ One-liner
api.recon.devmemanggiljg, bukanjq. Perintah itu gagal kecualijgtersedia sebagai alias README.md:365-37011.
Bruteforce DNS-over-HTTPS juga perlu dibatasi: perintah memakai parallel -j100, sehingga satu berkas kata berukuran besar berubah menjadi ratusan request serentak ke dns.google.com README.md:182-1875.
Lanjut ke deteksi
Artefak dari kelima lapisan inilah yang dikonsumsi tahap berikutnya. URL berparameter disaring gf, nilainya diganti qsreplace, lalu diuji oleh detektor. Rangkaian itu dibahas di Deteksi Kerentanan, sedangkan penyusunan tool dalam satu alur kerja ada di Alur Pipeline dan Toolchain.