Recon Otomasyonu, bug bounty ve pentest süreçlerinde manuel olarak yapılan tüm keşif aşamalarını otomatikleştiren script ve araç zincirleridir. Bu sayede saatler süren işlemler dakikalara iner.
Domain → Subdomain Enumeration → Live Host Detection → URL Discovery → Parameter Discovery → Vulnerability Scanning → Reporting
#!/bin/bash
# Full Recon Automation Pipeline
DOMAIN=$1
OUTPUT_DIR="recon_$DOMAIN"
mkdir -p $OUTPUT_DIR
echo "[1] Subdomain Enumeration"
subfinder -d $DOMAIN -silent > $OUTPUT_DIR/subdomains.txt
amass enum -d $DOMAIN -o $OUTPUT_DIR/subdomains_amass.txt
assetfinder --subs-only $DOMAIN >> $OUTPUT_DIR/subdomains.txt
cat $OUTPUT_DIR/*.txt | sort -u > $OUTPUT_DIR/all_subdomains.txt
echo "[2] Live Host Detection"
httpx -l $OUTPUT_DIR/all_subdomains.txt -silent -o $OUTPUT_DIR/live_hosts.txt -title -tech-detect -status-code
echo "[3] URL Discovery"
cat $OUTPUT_DIR/live_hosts.txt | while read url; do
echo $url | gau --subs >> $OUTPUT_DIR/all_urls.txt
echo $url | waybackurls >> $OUTPUT_DIR/all_urls.txt
done
cat $OUTPUT_DIR/all_urls.txt | sort -u > $OUTPUT_DIR/unique_urls.txt
echo "[4] Parameter Discovery"
cat $OUTPUT_DIR/unique_urls.txt | grep '?' | unfurl keys | sort -u > $OUTPUT_DIR/parameters.txt
echo "[5] JavaScript Discovery"
cat $OUTPUT_DIR/unique_urls.txt | grep '\.js' > $OUTPUT_DIR/js_files.txt
echo "[6] Vulnerability Scanning"
nuclei -l $OUTPUT_DIR/live_hosts.txt -t cves/ -t exposures/ -t misconfiguration/ -severity critical,high -o $OUTPUT_DIR/nuclei_results.txt
echo "[7] Reporting"
echo "Recon Complete for $DOMAIN"
echo "Subdomains: $(cat $OUTPUT_DIR/all_subdomains.txt | wc -l)"
echo "Live Hosts: $(cat $OUTPUT_DIR/live_hosts.txt | wc -l)"
echo "URLs: $(cat $OUTPUT_DIR/unique_urls.txt | wc -l)"
echo "Parameters: $(cat $OUTPUT_DIR/parameters.txt | wc -l)"
echo "JS Files: $(cat $OUTPUT_DIR/js_files.txt | wc -l)"
echo "Vulnerabilities: $(cat $OUTPUT_DIR/nuclei_results.txt | wc -l)"
#!/usr/bin/env python3
# Recon Automation - NotAlone Style
import subprocess
import os
import sys
class ReconAutomation:
def __init__(self, domain):
self.domain = domain
self.output_dir = f"recon_{domain}"
os.makedirs(self.output_dir, exist_ok=True)
def subdomain_enumeration(self):
print("[1] Subdomain Enumeration")
subprocess.run(f"subfinder -d {self.domain} -silent > {self.output_dir}/subdomains.txt", shell=True)
subprocess.run(f"assetfinder --subs-only {self.domain} >> {self.output_dir}/subdomains.txt", shell=True)
subprocess.run(f"cat {self.output_dir}/subdomains.txt | sort -u > {self.output_dir}/all_subdomains.txt", shell=True)
def live_host_detection(self):
print("[2] Live Host Detection")
subprocess.run(f"httpx -l {self.output_dir}/all_subdomains.txt -silent -o {self.output_dir}/live_hosts.txt", shell=True)
def url_discovery(self):
print("[3] URL Discovery")
with open(f"{self.output_dir}/live_hosts.txt", "r") as f:
for url in f:
subprocess.run(f"echo {url} | gau --subs >> {self.output_dir}/all_urls.txt", shell=True)
subprocess.run(f"echo {url} | waybackurls >> {self.output_dir}/all_urls.txt", shell=True)
subprocess.run(f"cat {self.output_dir}/all_urls.txt | sort -u > {self.output_dir}/unique_urls.txt", shell=True)
def parameter_discovery(self):
print("[4] Parameter Discovery")
subprocess.run(f"cat {self.output_dir}/unique_urls.txt | grep '?' | unfurl keys | sort -u > {self.output_dir}/parameters.txt", shell=True)
def vulnerability_scanning(self):
print("[5] Vulnerability Scanning")
subprocess.run(f"nuclei -l {self.output_dir}/live_hosts.txt -t cves/ -t exposures/ -severity critical,high -o {self.output_dir}/nuclei_results.txt", shell=True)
def report(self):
print("[6] Report")
subdomains = len(open(f"{self.output_dir}/all_subdomains.txt").readlines())
live_hosts = len(open(f"{self.output_dir}/live_hosts.txt").readlines())
urls = len(open(f"{self.output_dir}/unique_urls.txt").readlines())
parameters = len(open(f"{self.output_dir}/parameters.txt").readlines())
vulnerabilities = len(open(f"{self.output_dir}/nuclei_results.txt").readlines())
print(f"Subdomains: {subdomains}")
print(f"Live Hosts: {live_hosts}")
print(f"URLs: {urls}")
print(f"Parameters: {parameters}")
print(f"Vulnerabilities: {vulnerabilities}")
def run(self):
self.subdomain_enumeration()
self.live_host_detection()
self.url_discovery()
self.parameter_discovery()
self.vulnerability_scanning()
self.report()
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python recon.py <domain>")
sys.exit(1)
recon = ReconAutomation(sys.argv[1])
recon.run()
Recon Otomasyonu Neden Önemlidir?
- Zaman Tasarrufu: Manuel işlemleri otomatikleştirir.
- Tutarlılık: Her hedef için aynı adımları tekrarlar.
- Kapsam: Daha fazla hedefi tarama imkanı.
- Tekrar Edilebilirlik: Aynı sonuçları elde etme.
Temel Recon Pipeline
textDomain → Subdomain Enumeration → Live Host Detection → URL Discovery → Parameter Discovery → Vulnerability Scanning → Reporting
Full Recon Automation Script (Bash)
bash#!/bin/bash
# Full Recon Automation Pipeline
DOMAIN=$1
OUTPUT_DIR="recon_$DOMAIN"
mkdir -p $OUTPUT_DIR
echo "[1] Subdomain Enumeration"
subfinder -d $DOMAIN -silent > $OUTPUT_DIR/subdomains.txt
amass enum -d $DOMAIN -o $OUTPUT_DIR/subdomains_amass.txt
assetfinder --subs-only $DOMAIN >> $OUTPUT_DIR/subdomains.txt
cat $OUTPUT_DIR/*.txt | sort -u > $OUTPUT_DIR/all_subdomains.txt
echo "[2] Live Host Detection"
httpx -l $OUTPUT_DIR/all_subdomains.txt -silent -o $OUTPUT_DIR/live_hosts.txt -title -tech-detect -status-code
echo "[3] URL Discovery"
cat $OUTPUT_DIR/live_hosts.txt | while read url; do
echo $url | gau --subs >> $OUTPUT_DIR/all_urls.txt
echo $url | waybackurls >> $OUTPUT_DIR/all_urls.txt
done
cat $OUTPUT_DIR/all_urls.txt | sort -u > $OUTPUT_DIR/unique_urls.txt
echo "[4] Parameter Discovery"
cat $OUTPUT_DIR/unique_urls.txt | grep '?' | unfurl keys | sort -u > $OUTPUT_DIR/parameters.txt
echo "[5] JavaScript Discovery"
cat $OUTPUT_DIR/unique_urls.txt | grep '\.js' > $OUTPUT_DIR/js_files.txt
echo "[6] Vulnerability Scanning"
nuclei -l $OUTPUT_DIR/live_hosts.txt -t cves/ -t exposures/ -t misconfiguration/ -severity critical,high -o $OUTPUT_DIR/nuclei_results.txt
echo "[7] Reporting"
echo "Recon Complete for $DOMAIN"
echo "Subdomains: $(cat $OUTPUT_DIR/all_subdomains.txt | wc -l)"
echo "Live Hosts: $(cat $OUTPUT_DIR/live_hosts.txt | wc -l)"
echo "URLs: $(cat $OUTPUT_DIR/unique_urls.txt | wc -l)"
echo "Parameters: $(cat $OUTPUT_DIR/parameters.txt | wc -l)"
echo "JS Files: $(cat $OUTPUT_DIR/js_files.txt | wc -l)"
echo "Vulnerabilities: $(cat $OUTPUT_DIR/nuclei_results.txt | wc -l)"
Gelişmiş Recon Automation (NotAlone - Python)
python#!/usr/bin/env python3
# Recon Automation - NotAlone Style
import subprocess
import os
import sys
class ReconAutomation:
def __init__(self, domain):
self.domain = domain
self.output_dir = f"recon_{domain}"
os.makedirs(self.output_dir, exist_ok=True)
def subdomain_enumeration(self):
print("[1] Subdomain Enumeration")
subprocess.run(f"subfinder -d {self.domain} -silent > {self.output_dir}/subdomains.txt", shell=True)
subprocess.run(f"assetfinder --subs-only {self.domain} >> {self.output_dir}/subdomains.txt", shell=True)
subprocess.run(f"cat {self.output_dir}/subdomains.txt | sort -u > {self.output_dir}/all_subdomains.txt", shell=True)
def live_host_detection(self):
print("[2] Live Host Detection")
subprocess.run(f"httpx -l {self.output_dir}/all_subdomains.txt -silent -o {self.output_dir}/live_hosts.txt", shell=True)
def url_discovery(self):
print("[3] URL Discovery")
with open(f"{self.output_dir}/live_hosts.txt", "r") as f:
for url in f:
subprocess.run(f"echo {url} | gau --subs >> {self.output_dir}/all_urls.txt", shell=True)
subprocess.run(f"echo {url} | waybackurls >> {self.output_dir}/all_urls.txt", shell=True)
subprocess.run(f"cat {self.output_dir}/all_urls.txt | sort -u > {self.output_dir}/unique_urls.txt", shell=True)
def parameter_discovery(self):
print("[4] Parameter Discovery")
subprocess.run(f"cat {self.output_dir}/unique_urls.txt | grep '?' | unfurl keys | sort -u > {self.output_dir}/parameters.txt", shell=True)
def vulnerability_scanning(self):
print("[5] Vulnerability Scanning")
subprocess.run(f"nuclei -l {self.output_dir}/live_hosts.txt -t cves/ -t exposures/ -severity critical,high -o {self.output_dir}/nuclei_results.txt", shell=True)
def report(self):
print("[6] Report")
subdomains = len(open(f"{self.output_dir}/all_subdomains.txt").readlines())
live_hosts = len(open(f"{self.output_dir}/live_hosts.txt").readlines())
urls = len(open(f"{self.output_dir}/unique_urls.txt").readlines())
parameters = len(open(f"{self.output_dir}/parameters.txt").readlines())
vulnerabilities = len(open(f"{self.output_dir}/nuclei_results.txt").readlines())
print(f"Subdomains: {subdomains}")
print(f"Live Hosts: {live_hosts}")
print(f"URLs: {urls}")
print(f"Parameters: {parameters}")
print(f"Vulnerabilities: {vulnerabilities}")
def run(self):
self.subdomain_enumeration()
self.live_host_detection()
self.url_discovery()
self.parameter_discovery()
self.vulnerability_scanning()
self.report()
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python recon.py <domain>")
sys.exit(1)
recon = ReconAutomation(sys.argv[1])
recon.run()
Recon Otomasyonu İpuçları
- Rate Limiting: Hedef sistemi zorlamamak için istek hızını ayarlayın.
- Scope Yönetimi: Sadece hedef domain'leri tarayın.
- Çıktı Formatı: JSON veya CSV kullanarak raporlamayı kolaylaştırın.
- Paralel İşlem: Birden fazla hedefi aynı anda tarayın.
- Log Yönetimi: Tüm işlemleri loglayın (debug için).
- Hata Yönetimi: Hata durumlarını yakalayın ve devam edin.
🔒 Bu içeriği görmek için giriş yapın