June 13, 2026
Bir Domain’in Arkasında Neler Var? Bash ile Otomatik OSINT
Açık kaynak istihbaratı (OSINT), bir hedef hakkında yalnızca herkese açık kaynakları kullanarak bilgi toplama sürecidir. Güvenlik…
Znurkiraz
2 min read
Açık kaynak istihbaratı (OSINT), bir hedef hakkında yalnızca herkese açık kaynakları kullanarak bilgi toplama sürecidir. Güvenlik araştırmalarında alan adı analizleri genellikle WHOIS kayıtları, DNS bilgileri, HTTP başlıkları ve alt alan adlarının (subdomain) incelenmesiyle başlar.
Bu projede Kali Linux üzerinde Bash scripting kullanarak belirli bir domain hakkında otomatik veri toplayan ve sonuçları okunabilir bir rapora dönüştüren "Gölge Avcısı" isimli bir araç geliştirdim.
Proje Neler Yapıyor?
- WHOIS kayıtlarını toplar.
- DNS kayıtlarını analiz eder.
- Ters DNS (PTR) sorgusu gerçekleştirir.
- HTTP başlıklarını inceler.
- Temel subdomain keşfi yapar.
- crt.sh üzerinden sertifika tabanlı subdomain keşfi gerçekleştirir.
- Tarih damgalı rapor üretir.
- Sonuçları TXT formatında saklar.
Gerekli Araçları Kur
Terminali aç ve şu komutu çalıştır:
sudo apt update && sudo apt install -y whois dnsutils curl nmapsudo apt update && sudo apt install -y whois dnsutils curl nmapHer aracın çalıştığını tek satırda kontrol et:
whois --version && dig -v &&
nslookup -version && curl --versionwhois --version && dig -v &&
nslookup -version && curl --versionÇalışma Klasörü Oluştur
mkdir -p ~/osint-tool && cd ~/osint-tool
touch golge_avci.sh && chmod +x osınt-test.shmkdir -p ~/osint-tool && cd ~/osint-tool
touch golge_avci.sh && chmod +x osınt-test.shBash Scriptinin Oluşturulması
nano veya vim ile dosyayı aç:
nano ~/osint-tool/ osınt-test.shnano ~/osint-tool/ osınt-test.shİlk bölümü yaz:
#!/bin/bash
# ================================================
# Otomatik OSINT Aracı
# Kullanim: ./ osınt-test.sh <domain>
# ================================================
DOMAIN=$1
TARIH=$(date +%Y-%m-%d_%H-%M)
RAPOR="osint_${DOMAIN}_${TARIH}.txt"
if [ -z "$DOMAIN" ]; then
echo "[!] Kullanim: $0 <domain>"
exit 1
fi#!/bin/bash
# ================================================
# Otomatik OSINT Aracı
# Kullanim: ./ osınt-test.sh <domain>
# ================================================
DOMAIN=$1
TARIH=$(date +%Y-%m-%d_%H-%M)
RAPOR="osint_${DOMAIN}_${TARIH}.txt"
if [ -z "$DOMAIN" ]; then
echo "[!] Kullanim: $0 <domain>"
exit 1
fiBanner Fonksiyonu
banner() {
echo "========================================" >> $RAPOR
echo " $1" >> $RAPOR
echo "========================================" >> $RAPOR
}banner() {
echo "========================================" >> $RAPOR
echo " $1" >> $RAPOR
echo "========================================" >> $RAPOR
}WHOIS Taraması
banner '[ 1 ] WHOIS KAYITLARI'
whois $DOMAIN 2>/dev/null | grep -E \
"Registrar|Creation|Expiry|Name Server|DNSSEC" >> $RAPORbanner '[ 1 ] WHOIS KAYITLARI'
whois $DOMAIN 2>/dev/null | grep -E \
"Registrar|Creation|Expiry|Name Server|DNSSEC" >> $RAPORDNS Kayıtları (dig)
banner '[ 2 ] DNS KAYITLARI'
for TIP in A AAAA MX NS TXT SOA CNAME; do
echo "--- $TIP ---" >> $RAPOR
dig $DOMAIN $TIP +short 2>/dev/null >> $RAPOR
donebanner '[ 2 ] DNS KAYITLARI'
for TIP in A AAAA MX NS TXT SOA CNAME; do
echo "--- $TIP ---" >> $RAPOR
dig $DOMAIN $TIP +short 2>/dev/null >> $RAPOR
doneTers DNS Sorgusu (nslookup)
banner '[ 3 ] TERS DNS (PTR)'
IP=$(dig $DOMAIN A +short | head -1)
if [ -n "$IP" ]; then
nslookup $IP 2>/dev/null >> $RAPOR
fibanner '[ 3 ] TERS DNS (PTR)'
IP=$(dig $DOMAIN A +short | head -1)
if [ -n "$IP" ]; then
nslookup $IP 2>/dev/null >> $RAPOR
fiHTTP Başlık Bilgisi (curl)
banner '[ 4 ] HTTP BASLIKLARI'
curl -sI --max-time 10 https://$DOMAIN 2>/dev/null \
| grep -iE 'server|x-powered|content-type|strict' >> $RAPORbanner '[ 4 ] HTTP BASLIKLARI'
curl -sI --max-time 10 https://$DOMAIN 2>/dev/null \
| grep -iE 'server|x-powered|content-type|strict' >> $RAPORSubdomain Keşfi (DNS Bruteforce)
banner '[ 5 ] SUBDOMAIN KESFI'
SUBLAR="www mail ftp ssh admin api dev test vpn staging"
for SUB in $SUBLAR; do
SONUC=$(dig ${SUB}.${DOMAIN} A +short 2>/dev/null)
if [ -n "$SONUC" ]; then
echo "[+] ${SUB}.${DOMAIN} -> $SONUC" >> $RAPOR
fi
donebanner '[ 5 ] SUBDOMAIN KESFI'
SUBLAR="www mail ftp ssh admin api dev test vpn staging"
for SUB in $SUBLAR; do
SONUC=$(dig ${SUB}.${DOMAIN} A +short 2>/dev/null)
if [ -n "$SONUC" ]; then
echo "[+] ${SUB}.${DOMAIN} -> $SONUC" >> $RAPOR
fi
doneÖzet ve Bitiş Mesajı
banner '[ TARAMA TAMAMLANDI ]'
echo "Alan Adi : $DOMAIN" >> $RAPOR
echo "Tarih : $(date)" >> $RAPOR
echo "Rapor : $RAPOR" >> $RAPOR
echo ""
echo "[✓] Tarama bitti! Rapor: $RAPOR"banner '[ TARAMA TAMAMLANDI ]'
echo "Alan Adi : $DOMAIN" >> $RAPOR
echo "Tarih : $(date)" >> $RAPOR
echo "Rapor : $RAPOR" >> $RAPOR
echo ""
echo "[✓] Tarama bitti! Rapor: $RAPOR"crt.sh — Sertifika Tabanlı Subdomain Keşfi
Mevcut brute-force subdomain taramaının yanına aşağıdaki bloğu ekle. Bu yöntem, sertifika şeffaflık loglarını sorgulayarak tahmine dayalı listeden çok daha fazla subdomain bulur.
banner '[ 6 ] CRT.SH - SERTIFIKA TABANLI SUBDOMAIN KESFI'
echo "[*] crt.sh sorgulanıyor: $DOMAIN" >> $RAPOR
CRTSH=$(curl -s "https://crt.sh/?q=%25.$DOMAIN&output=json" 2>/dev/null)
if [ -n "$CRTSH" ]; then
echo "$CRTSH" \
| grep -oP '"name_value":"\K[^"]+' \
| sed 's/\\n/\n/g' | sort -u | grep -v "^\*\." >> $RAPOR
COUNT=$(echo "$CRTSH" | grep -oP '"name_value":"\K[^"]+' \
| sort -u | grep -v "^\*\." | wc -l)
echo "[+] $COUNT adet subdomain bulundu (crt.sh)" >> $RAPOR
else
echo "[-] crt.sh'e ulaşılamadı." >> $RAPOR
fibanner '[ 6 ] CRT.SH - SERTIFIKA TABANLI SUBDOMAIN KESFI'
echo "[*] crt.sh sorgulanıyor: $DOMAIN" >> $RAPOR
CRTSH=$(curl -s "https://crt.sh/?q=%25.$DOMAIN&output=json" 2>/dev/null)
if [ -n "$CRTSH" ]; then
echo "$CRTSH" \
| grep -oP '"name_value":"\K[^"]+' \
| sed 's/\\n/\n/g' | sort -u | grep -v "^\*\." >> $RAPOR
COUNT=$(echo "$CRTSH" | grep -oP '"name_value":"\K[^"]+' \
| sort -u | grep -v "^\*\." | wc -l)
echo "[+] $COUNT adet subdomain bulundu (crt.sh)" >> $RAPOR
else
echo "[-] crt.sh'e ulaşılamadı." >> $RAPOR
fiRenk Kodlu Terminal Çıktısı
Aşağıdaki renk tanımlarını scriptin en başına (DOMAIN= satırından önce) ekle:
# === RENK TANIMLARI ===
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m' # Rengi sıfırla# === RENK TANIMLARI ===
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m' # Rengi sıfırlaScripti Çalıştırma
Çalıştırma İzni Ver
chmod +x ~/osint-tool/osınt-test.shchmod +x ~/osint-tool/osınt-test.shBir Domain Tara
cd ~/osint-tool
./ osınt-test.sh example.comcd ~/osint-tool
./ osınt-test.sh example.comRaporu Oku
cat osint_example.com_*.txt
# veya sayfalı okuma için:
less osint_example.com_*.txtcat osint_example.com_*.txt
# veya sayfalı okuma için:
less osint_example.com_*.txt
⚠ ÖNEMLİ:
- Bu aracı yalnızca kendi sahip olduğunuz veya yazılı izin aldığınız sistemlerde kullanın.
- OSINT araçları legal olmakla birlikte, izinsiz sistemlere yönelik kullanım yasadışıdır.
- Öğrenme amacıyla: example.com, testphp.vulnweb.com gibi test hedeflerini kullanın.