JavaScript Recon, bir web uygulamasında kullanılan JavaScript dosyalarını analiz ederek, gizli endpoint'ler, API anahtarları, parametreler, subdomain'ler ve diğer hassas bilgileri keşfetme sürecidir. Modern web uygulamaları büyük ölçüde JavaScript'e dayandığı için, JS recon bug bounty ve pentest'lerin en kritik aşamalarından biridir.
JavaScript Recon Neden Önemlidir?
Gizli Endpoint'ler: JavaScript'te gömülü API endpoint'leri
API Anahtarları: Hardcoded API keys, secret'lar
Parametreler: Kullanılan parametre isimleri
Subdomain'ler: JavaScript'te referans verilen subdomain'ler
Teknoloji Tespiti: Kullanılan framework ve kütüphaneler
Zafiyet Tespiti: Güvensiz kod pattern'leri
Saldırı Yüzeyi: Unutulmuş veya test endpoint'leri
JavaScript Dosyalarını Toplama Yöntemleri:
1. Web Crawling ile Toplama
Araçlar: katana, hakrawler, gospider
bash
# Katana ile JS dosyalarını topla
katana -u https://hedef.com -jc -c 50 -silent -o js_urls.txt
# Hakrawler ile JS dosyalarını topla
hakrawler -url https://hedef.com -js -subs > js_urls.txt
# Gospider ile JS dosyalarını topla
gospider -s https://hedef.com -o output
2. Wayback Machine'den Toplama
bash
# Waybackurls ile JS dosyaları
waybackurls hedef.com | grep '\.js' > js_urls.txt
# Gau ile JS dosyaları
gau hedef.com | grep '\.js' > js_urls.txt
# CDX API ile JS dosyaları
curl -s "https://web.archive.org/cdx/search/cdx?url=hedef.com/*.js&output=text" | awk '{print $2}'
3. Directory Brute Force ile Toplama
bash
# FFUF ile JS dosyaları
ffuf -u https://hedef.com/FUZZ.js -w wordlist.txt -fs 0
# Gobuster ile JS dosyaları
gobuster dir -u https://hedef.com -w wordlist.txt -x js
JavaScript Dosyalarını Analiz Etme (JavaScript Recon Araçları):
1. SubJS
Açıklama: JavaScript dosyalarından URL, endpoint ve subdomain çıkarma aracı.
Kurulum:
bash
go install github.com/lc/subjs@latest
Kullanım:
bash
# Temel
subjs -l urls.txt
# Çıktı
subjs -l urls.txt -o js_urls.txt
# Thread sayısı
subjs -l urls.txt -t 50
2. JSParser (Python)
Açıklama: JavaScript dosyalarını parse ederek URL'leri ve endpoint'leri çıkarma.
Kurulum:
bash
git clone https://github.com/nahamsec/JSParser
cd JSParser
pip install -r requirements.txt
Kullanım:
bash
python JSParser.py -u https://hedef.com/script.js
python JSParser.py -l js_urls.txt -o output.txt
3. LinkFinder
Açıklama: JavaScript dosyalarından URL, endpoint ve path çıkarma.
Kurulum:
bash
git clone https://github.com/GerbenJavado/LinkFinder
cd LinkFinder
pip install -r requirements.txt
Kullanım:
bash
# Temel
python linkfinder.py -i https://hedef.com/script.js
# Dosyadan
python linkfinder.py -i js_urls.txt -o output.html
# URL çıkar
python linkfinder.py -i script.js -j
Çıktı Formatı:
json
{
"urls": [
"/api/users",
"/api/login",
"https://api.hedef.com/v1/data"
],
"endpoints": [
"/admin/dashboard",
"/user/profile"
],
"params": [
"id", "user", "token"
]
}
4. SecretFinder
Açıklama: JavaScript dosyalarından API key, secret, token, password gibi hassas bilgileri bulma.
Kurulum:
bash
git clone https://github.com/m4ll0k/SecretFinder
cd SecretFinder
pip install -r requirements.txt
Kullanım:
bash
python SecretFinder.py -i https://hedef.com/script.js
python SecretFinder.py -i js_urls.txt -o output.txt
Tespit Ettiği Pattern'ler:
API Keys (Google, AWS, GitHub, Slack, Stripe)
JWT Token'lar
OAuth Client ID/Secret
Database Credentials
SSH Keys
Private Keys
5. GetJS
Açıklama: JavaScript dosyalarını toplayıp içeriklerini birleştiren araç.
Kurulum:
bash
go install github.com/003random/getJS@latest
Kullanım:
bash
# Temel
getJS -url https://hedef.com
# Birden fazla URL
getJS -input urls.txt
# Çıktı
getJS -url https://hedef.com -output script.js
6. JS-Scan
Açıklama: JavaScript dosyalarını tarayarak endpoint, parametre ve hassas bilgileri bulan araç.
Kurulum:
bash
git clone https://github.com/arkadiyt/js-scan
cd js-scan
pip install -r requirements.txt
Kullanım:
bash
python js-scan.py -u https://hedef.com
python js-scan.py -l js_urls.txt -o output.txt
JavaScript Analiz Teknikleri (Manuel):
1. String Arama
bash
# API endpoint'leri
grep -E '"/api/|"/v1/|"/v2/|"/graphql|"/rest"' script.js
# API anahtarları
grep -E 'api[_-]?key|apikey|api_key|secret|token|auth' script.js
# Domain'ler
grep -E '[a-zA-Z0-9-]+\.[a-zA-Z]{2,}' script.js
# URL'ler
grep -E 'https?://[a-zA-Z0-9.-]+' script.js
# E-posta'lar
grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' script.js
# IP adresleri
grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' script.js
2. Regex ile Advanced Pattern Arama
bash
# AWS Access Key
grep -E 'AKIA[0-9A-Z]{16}' script.js
# Google API Key
grep -E 'AIza[0-9A-Za-z\-_]{35}' script.js
# GitHub Token
grep -E 'ghp_[0-9a-zA-Z]{36}' script.js
# JWT Token
grep -E 'eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+' script.js
# Slack Webhook
grep -E 'https://hooks.slack.com/services/[A-Za-z0-9]+/[A-Za-z0-9]+/[A-Za-z0-9]+' script.js
# Stripe API Key
grep -E 'sk_(live|test)_[0-9a-zA-Z]{24}' script.js
# Database Connection String
grep -E 'postgresql://|mysql://|mongodb://' script.js
3. JavaScript Deobfuscation
Araçlar: js-beautify, de4js, jsnice
bash
# js-beautify
npm install -g js-beautify
js-beautify script.js -o script_beautified.js
# De4js (online)
# https://lelinhtinh.github.io/de4js/
# JSNice (online)
# https://jsnice.org/
JavaScript Recon Pipeline (Full Automation):
bash
#!/bin/bash
# Full JavaScript Recon Pipeline
DOMAIN=$1
OUTPUT_DIR="js_recon_$DOMAIN"
mkdir -p $OUTPUT_DIR
echo "[1] JavaScript File Collection"
# Katana
katana -u https://$DOMAIN -jc -c 50 -silent -o $OUTPUT_DIR/katana_js.txt
cat $OUTPUT_DIR/katana_js.txt | grep '\.js' > $OUTPUT_DIR/js_urls.txt
# Waybackurls
waybackurls $DOMAIN | grep '\.js' >> $OUTPUT_DIR/js_urls.txt
# Gau
gau $DOMAIN | grep '\.js' >> $OUTPUT_DIR/js_urls.txt
echo "[2] Download JavaScript Files"
mkdir -p $OUTPUT_DIR/js_files
cat $OUTPUT_DIR/js_urls.txt | sort -u | while read url; do
filename=$(basename $url)
curl -s $url -o $OUTPUT_DIR/js_files/$filename
done
echo "[3] Combine All JavaScript Files"
cat $OUTPUT_DIR/js_files/*.js > $OUTPUT_DIR/all_combined.js
echo "[4] Extract URLs and Endpoints"
# LinkFinder
python linkfinder.py -i $OUTPUT_DIR/all_combined.js -o $OUTPUT_DIR/endpoints.json -j
# SubJS
subjs -l $OUTPUT_DIR/js_urls.txt -o $OUTPUT_DIR/subjs_urls.txt
echo "[5] Extract Sensitive Information"
# SecretFinder
python SecretFinder.py -i $OUTPUT_DIR/all_combined.js -o $OUTPUT_DIR/secrets.txt
echo "[6] Manual Search"
echo "Searching for API keys, tokens, credentials..."
grep -E 'api[_-]?key|apikey|api_key|secret|token|auth' $OUTPUT_DIR/all_combined.js > $OUTPUT_DIR/sensitive_patterns.txt
grep -E 'AKIA[0-9A-Z]{16}|AIza[0-9A-Za-z\-_]{35}|ghp_[0-9a-zA-Z]{36}' $OUTPUT_DIR/all_combined.js >> $OUTPUT_DIR/sensitive_patterns.txt
grep -E 'eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+' $OUTPUT_DIR/all_combined.js >> $OUTPUT_DIR/sensitive_patterns.txt
echo "[7] Result"
echo "JavaScript Files: $(cat $OUTPUT_DIR/js_urls.txt | wc -l)"
echo "Endpoints Found: $(cat $OUTPUT_DIR/endpoints.json | jq '.urls | length')"
echo "Sensitive Patterns: $(cat $OUTPUT_DIR/sensitive_patterns.txt | wc -l)"
JavaScript Recon Kontrol Listesi:
A. JavaScript Toplama:
Katana ile JS dosyaları toplandı mı?
Wayback Machine'den JS dosyaları toplandı mı?
Gau ile JS dosyaları toplandı mı?
Directory brute force ile JS dosyaları arandı mı?
B. JavaScript Analizi:
LinkFinder ile endpoint'ler çıkarıldı mı?
SecretFinder ile hassas bilgiler arandı mı?
SubJS ile subdomain'ler çıkarıldı mı?
Manuel string arama yapıldı mı?
C. Hassas Bilgi Arama:
API Key'ler arandı mı?
Secret'ler arandı mı?
Token'lar arandı mı?
Credential'lar arandı mı?
Database connection string'leri arandı mı?
D. Deobfuscation:
JavaScript dosyaları beautify edildi mi?
Obfuscated kod varsa deobfuscate edildi mi?
JavaScript Recon Best Practices:
Tüm JavaScript dosyalarını indirin (lokal analiz)
Beautify işlemi yapın (okunabilir hale getirin)
Pattern araması yapın (regex ile)
Endpoint'leri test edin (canlı mı?)
Subdomain'leri doğrulayın (canlı mı?)
API anahtarlarını test edin (geçerli mi?)
Zafiyet tespiti yapın (Nuclei ile)
Sonuçları belgelendirin
JavaScript Recon Neden Önemlidir?
Gizli Endpoint'ler: JavaScript'te gömülü API endpoint'leri
API Anahtarları: Hardcoded API keys, secret'lar
Parametreler: Kullanılan parametre isimleri
Subdomain'ler: JavaScript'te referans verilen subdomain'ler
Teknoloji Tespiti: Kullanılan framework ve kütüphaneler
Zafiyet Tespiti: Güvensiz kod pattern'leri
Saldırı Yüzeyi: Unutulmuş veya test endpoint'leri
JavaScript Dosyalarını Toplama Yöntemleri:
1. Web Crawling ile Toplama
Araçlar: katana, hakrawler, gospider
bash
# Katana ile JS dosyalarını topla
katana -u https://hedef.com -jc -c 50 -silent -o js_urls.txt
# Hakrawler ile JS dosyalarını topla
hakrawler -url https://hedef.com -js -subs > js_urls.txt
# Gospider ile JS dosyalarını topla
gospider -s https://hedef.com -o output
2. Wayback Machine'den Toplama
bash
# Waybackurls ile JS dosyaları
waybackurls hedef.com | grep '\.js' > js_urls.txt
# Gau ile JS dosyaları
gau hedef.com | grep '\.js' > js_urls.txt
# CDX API ile JS dosyaları
curl -s "https://web.archive.org/cdx/search/cdx?url=hedef.com/*.js&output=text" | awk '{print $2}'
3. Directory Brute Force ile Toplama
bash
# FFUF ile JS dosyaları
ffuf -u https://hedef.com/FUZZ.js -w wordlist.txt -fs 0
# Gobuster ile JS dosyaları
gobuster dir -u https://hedef.com -w wordlist.txt -x js
JavaScript Dosyalarını Analiz Etme (JavaScript Recon Araçları):
1. SubJS
Açıklama: JavaScript dosyalarından URL, endpoint ve subdomain çıkarma aracı.
Kurulum:
bash
go install github.com/lc/subjs@latest
Kullanım:
bash
# Temel
subjs -l urls.txt
# Çıktı
subjs -l urls.txt -o js_urls.txt
# Thread sayısı
subjs -l urls.txt -t 50
2. JSParser (Python)
Açıklama: JavaScript dosyalarını parse ederek URL'leri ve endpoint'leri çıkarma.
Kurulum:
bash
git clone https://github.com/nahamsec/JSParser
cd JSParser
pip install -r requirements.txt
Kullanım:
bash
python JSParser.py -u https://hedef.com/script.js
python JSParser.py -l js_urls.txt -o output.txt
3. LinkFinder
Açıklama: JavaScript dosyalarından URL, endpoint ve path çıkarma.
Kurulum:
bash
git clone https://github.com/GerbenJavado/LinkFinder
cd LinkFinder
pip install -r requirements.txt
Kullanım:
bash
# Temel
python linkfinder.py -i https://hedef.com/script.js
# Dosyadan
python linkfinder.py -i js_urls.txt -o output.html
# URL çıkar
python linkfinder.py -i script.js -j
Çıktı Formatı:
json
{
"urls": [
"/api/users",
"/api/login",
"https://api.hedef.com/v1/data"
],
"endpoints": [
"/admin/dashboard",
"/user/profile"
],
"params": [
"id", "user", "token"
]
}
4. SecretFinder
Açıklama: JavaScript dosyalarından API key, secret, token, password gibi hassas bilgileri bulma.
Kurulum:
bash
git clone https://github.com/m4ll0k/SecretFinder
cd SecretFinder
pip install -r requirements.txt
Kullanım:
bash
python SecretFinder.py -i https://hedef.com/script.js
python SecretFinder.py -i js_urls.txt -o output.txt
Tespit Ettiği Pattern'ler:
API Keys (Google, AWS, GitHub, Slack, Stripe)
JWT Token'lar
OAuth Client ID/Secret
Database Credentials
SSH Keys
Private Keys
5. GetJS
Açıklama: JavaScript dosyalarını toplayıp içeriklerini birleştiren araç.
Kurulum:
bash
go install github.com/003random/getJS@latest
Kullanım:
bash
# Temel
getJS -url https://hedef.com
# Birden fazla URL
getJS -input urls.txt
# Çıktı
getJS -url https://hedef.com -output script.js
6. JS-Scan
Açıklama: JavaScript dosyalarını tarayarak endpoint, parametre ve hassas bilgileri bulan araç.
Kurulum:
bash
git clone https://github.com/arkadiyt/js-scan
cd js-scan
pip install -r requirements.txt
Kullanım:
bash
python js-scan.py -u https://hedef.com
python js-scan.py -l js_urls.txt -o output.txt
JavaScript Analiz Teknikleri (Manuel):
1. String Arama
bash
# API endpoint'leri
grep -E '"/api/|"/v1/|"/v2/|"/graphql|"/rest"' script.js
# API anahtarları
grep -E 'api[_-]?key|apikey|api_key|secret|token|auth' script.js
# Domain'ler
grep -E '[a-zA-Z0-9-]+\.[a-zA-Z]{2,}' script.js
# URL'ler
grep -E 'https?://[a-zA-Z0-9.-]+' script.js
# E-posta'lar
grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' script.js
# IP adresleri
grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' script.js
2. Regex ile Advanced Pattern Arama
bash
# AWS Access Key
grep -E 'AKIA[0-9A-Z]{16}' script.js
# Google API Key
grep -E 'AIza[0-9A-Za-z\-_]{35}' script.js
# GitHub Token
grep -E 'ghp_[0-9a-zA-Z]{36}' script.js
# JWT Token
grep -E 'eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+' script.js
# Slack Webhook
grep -E 'https://hooks.slack.com/services/[A-Za-z0-9]+/[A-Za-z0-9]+/[A-Za-z0-9]+' script.js
# Stripe API Key
grep -E 'sk_(live|test)_[0-9a-zA-Z]{24}' script.js
# Database Connection String
grep -E 'postgresql://|mysql://|mongodb://' script.js
3. JavaScript Deobfuscation
Araçlar: js-beautify, de4js, jsnice
bash
# js-beautify
npm install -g js-beautify
js-beautify script.js -o script_beautified.js
# De4js (online)
# https://lelinhtinh.github.io/de4js/
# JSNice (online)
# https://jsnice.org/
JavaScript Recon Pipeline (Full Automation):
bash
#!/bin/bash
# Full JavaScript Recon Pipeline
DOMAIN=$1
OUTPUT_DIR="js_recon_$DOMAIN"
mkdir -p $OUTPUT_DIR
echo "[1] JavaScript File Collection"
# Katana
katana -u https://$DOMAIN -jc -c 50 -silent -o $OUTPUT_DIR/katana_js.txt
cat $OUTPUT_DIR/katana_js.txt | grep '\.js' > $OUTPUT_DIR/js_urls.txt
# Waybackurls
waybackurls $DOMAIN | grep '\.js' >> $OUTPUT_DIR/js_urls.txt
# Gau
gau $DOMAIN | grep '\.js' >> $OUTPUT_DIR/js_urls.txt
echo "[2] Download JavaScript Files"
mkdir -p $OUTPUT_DIR/js_files
cat $OUTPUT_DIR/js_urls.txt | sort -u | while read url; do
filename=$(basename $url)
curl -s $url -o $OUTPUT_DIR/js_files/$filename
done
echo "[3] Combine All JavaScript Files"
cat $OUTPUT_DIR/js_files/*.js > $OUTPUT_DIR/all_combined.js
echo "[4] Extract URLs and Endpoints"
# LinkFinder
python linkfinder.py -i $OUTPUT_DIR/all_combined.js -o $OUTPUT_DIR/endpoints.json -j
# SubJS
subjs -l $OUTPUT_DIR/js_urls.txt -o $OUTPUT_DIR/subjs_urls.txt
echo "[5] Extract Sensitive Information"
# SecretFinder
python SecretFinder.py -i $OUTPUT_DIR/all_combined.js -o $OUTPUT_DIR/secrets.txt
echo "[6] Manual Search"
echo "Searching for API keys, tokens, credentials..."
grep -E 'api[_-]?key|apikey|api_key|secret|token|auth' $OUTPUT_DIR/all_combined.js > $OUTPUT_DIR/sensitive_patterns.txt
grep -E 'AKIA[0-9A-Z]{16}|AIza[0-9A-Za-z\-_]{35}|ghp_[0-9a-zA-Z]{36}' $OUTPUT_DIR/all_combined.js >> $OUTPUT_DIR/sensitive_patterns.txt
grep -E 'eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+' $OUTPUT_DIR/all_combined.js >> $OUTPUT_DIR/sensitive_patterns.txt
echo "[7] Result"
echo "JavaScript Files: $(cat $OUTPUT_DIR/js_urls.txt | wc -l)"
echo "Endpoints Found: $(cat $OUTPUT_DIR/endpoints.json | jq '.urls | length')"
echo "Sensitive Patterns: $(cat $OUTPUT_DIR/sensitive_patterns.txt | wc -l)"
JavaScript Recon Kontrol Listesi:
A. JavaScript Toplama:
Katana ile JS dosyaları toplandı mı?
Wayback Machine'den JS dosyaları toplandı mı?
Gau ile JS dosyaları toplandı mı?
Directory brute force ile JS dosyaları arandı mı?
B. JavaScript Analizi:
LinkFinder ile endpoint'ler çıkarıldı mı?
SecretFinder ile hassas bilgiler arandı mı?
SubJS ile subdomain'ler çıkarıldı mı?
Manuel string arama yapıldı mı?
C. Hassas Bilgi Arama:
API Key'ler arandı mı?
Secret'ler arandı mı?
Token'lar arandı mı?
Credential'lar arandı mı?
Database connection string'leri arandı mı?
D. Deobfuscation:
JavaScript dosyaları beautify edildi mi?
Obfuscated kod varsa deobfuscate edildi mi?
JavaScript Recon Best Practices:
Tüm JavaScript dosyalarını indirin (lokal analiz)
Beautify işlemi yapın (okunabilir hale getirin)
Pattern araması yapın (regex ile)
Endpoint'leri test edin (canlı mı?)
Subdomain'leri doğrulayın (canlı mı?)
API anahtarlarını test edin (geçerli mi?)
Zafiyet tespiti yapın (Nuclei ile)
Sonuçları belgelendirin
🔒 Bu içeriği görmek için giriş yapın