Lompat ke konten
dokumentasi.id
Commit 89c41b0
v1
Star3,2 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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-15, 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.
Fig. 1: Peta lapisan recon menurut tujuanOne-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-208. RapidDNS memakai pola lain pada sumber yang sama, yaitu grep -oP '(?<=<td>)[^<]+' untuk mengambil isi sel tabel HTML README.md:114-119.

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-222, 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-187.

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-377. Bila httpx tidak dipakai, parallel -j50 curl -w mencetak status, ukuran, dan URL efektif per host README.md:277-282.

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-229. Arah sebaliknya, yaitu nama host dari satu IP, dikerjakan hosthunter.py atas HOSTS.txt README.md:386-391.

Peta teknik per tujuan

Tabel ini menghubungkan setiap tujuan recon dengan perintah kunci dan halaman yang membahasnya.

LapisanTujuanPerintah kunciToolRujukanHalaman rinci
DiscoveryNama host dari certificate transparencyjq -r '.[].name_value'curl, jq, sedREADME.md:203-208Enumerasi Subdomain dan Deteksi Takeover
DiscoveryNama host dari API pihak ketigarapiddns.io/subdomain/$host?full=1curl, grep -oPREADME.md:114-119Enumerasi Subdomain dan Deteksi Takeover
DiscoveryDomain pihak ketiga dari header responsawk '/^content-security-policy:/'curl, awk, sedREADME.md:393-398Enumerasi Subdomain dan Deteksi Takeover
DiscoveryRecon pasif berbasis APIapi.recon.dev/search?domain=HOSTcurl, jgREADME.md:365-370Enumerasi Subdomain dan Deteksi Takeover
ValidasiHost aktif berstatus 200httpx -silent -follow-redirects -mc 200subfinder, httpxREADME.md:372-377Enumerasi Subdomain dan Deteksi Takeover
ValidasiStatus massal tanpa httpxcurl -w 'Status:%{http_code}'parallel, curlREADME.md:277-282Enumerasi Subdomain dan Deteksi Takeover
ValidasiVhost dan admin panel tersembunyiffuf -c -u URL -H "Host: FUZZ" -w FILE.txtffufREADME.md:358-363Enumerasi Subdomain dan Deteksi Takeover
TakeoverSubdomain yang bisa diambil alihsubjack -w FILE -t 100 -timeout 30 -sslsubfinder, assetfinder, amass, subjackREADME.md:263-268Enumerasi Subdomain dan Deteksi Takeover
ScopeDomain program publikjq -r '.programs[].domains'curl, jqREADME.md:284-289Aset In-scope, Bruteforce, dan Wordlist
ScopeAset in-scope per platform.[].targets.in_scope[]curl, jqREADME.md:291-328Aset In-scope, Bruteforce, dan Wordlist
WordlistKata kunci dari nama parameter dan pathunfurl -u keys dan unfurl -u pathsgau, unfurl, tokREADME.md:245-254Aset In-scope, Bruteforce, dan Wordlist
URLURL unik dari sitemapxmllint --format - lalu grep -e 'loc'curl, xmllintREADME.md:330-335Pemetaan URL, Berkas JavaScript, dan Endpoint
URLURL historis dari AlienVault OTXgron --ungrongron, jq, egrepREADME.md:256-261Pemetaan URL, Berkas JavaScript, dan Endpoint
URLEndpoint dari berkas JavaScriptpython linkfinder.py -i "$link" -o clicurl, grep, linkfinderREADME.md:337-342Pemetaan URL, Berkas JavaScript, dan Endpoint
URLPath dari definisi swaggerjq mengambil keys dari .pathscurl, jqREADME.md:344-349Pemetaan URL, Berkas JavaScript, dan Endpoint
URLURL berparameter per hostpython3 paramspider.py -l high -o ./OUT/% -d %xargs, paramspiderREADME.md:270-275Pemetaan URL, Berkas JavaScript, dan Endpoint
JaringanPrefix route dari ASNwhois -h whois.radb.net -i origin -T routewhois, awk, sortREADME.md:224-229IP, ASN, dan Pemindaian Port
JaringanCIDR dan organisasi per hostdig a $HOST +short lalu whois $ipdig, whois, pasteREADME.md:106-112IP, ASN, dan Pemindaian Port
JaringanIP:PORT dari keluaran nmapnmap -v0 HOST -oX /dev/stdoutnmap, jc, jq, httpxREADME.md:400-405IP, ASN, dan Pemindaian Port
JaringanPort terbuka tanpa host CloudFlarecf-check lalu naabu -rate 40000 -verifysubfinder, filter-resolved, cf-check, naabuREADME.md:238-243IP, ASN, dan Pemindaian Port
JaringanNama host dari satu IPpython3 hosthunter.py HOSTS.txthosthunterREADME.md:386-391IP, 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 sumberPola parsingContoh nyataRujukan
JSON APIjq -r mengambil field.programs[].domains dari chaos-bugbounty-list.jsonREADME.md:284-289
HTMLgrep -oP dengan lookbehind(?<=<td>)[^<]+README.md:114-119
XMLxmllint --format - lalu grep -e 'loc'sitemap.xmlREADME.md:330-335
Keluaran nmapjc --xml lalu jq-oX /dev/stdoutREADME.md:400-405
Berkas JavaScriptgrep -oh dengan regex path"\/[a-zA-Z0-9_/?=&]*"README.md:99-104

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-261. Untuk berkas JavaScript, grep -oh cukup karena setiap endpoint ditulis sebagai string yang diawali garis miring README.md:99-104.

Jebakan saat menjalankan recon

⚠️ subjack pada 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-268.

⚠️ naabu -rate 40000 baru dijalankan setelah filter-resolved dan cf-check. Tanpa penyaringan itu, host di belakang CloudFlare ikut dipindai dan hasil port menjadi palsu README.md:238-243.

⚠️ ffuf -c -u URL -H "Host: FUZZ" -w FILE.txt menguji vhost pada satu URL dengan wordlist eksternal. Pastikan URL berada di scope program sebelum kata pertama dijalankan README.md:358-363.

⚠️ One-liner api.recon.dev memanggil jg, bukan jq. Perintah itu gagal kecuali jg tersedia sebagai alias README.md:365-370.

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-187.

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.