İçeriğe atla
0 XP 0
15 dkderinleşmeyle 16 dk45 XP9 etkinlik

İçerik keşfi: gizli yolları bulmak

Bu derste
  • İçerik keşfi, bir web sunucusunda bağlantısı verilmemiş yolları elle, OSINT ve sözlükle bulup gürültüyü eleme becerisidir.
  • ffuf sözlükteki her satırı FUZZ yer tutucusuna koyar ve yanıtları filtreler.
  • Asıl beceri istek atmak değil, gürültüyü eleyip anlamlı yanıtı görmektir.

Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +45 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.

Bir web uygulamasının menüsü yüzeyin tamamı değildir. Yedek dosyalar, eski yönetim panelleri, sürüm kontrol klasörleri ve yapılandırma dosyaları bağlantısız durur. Kimse onlara bağlantı vermez ama sunucu istenirse yine de sunar. İçerik keşfi bu görünmez yolları ortaya çıkarır.

Üç yöntem birlikte çalışır: elle keşif, açık kaynak (OSINT) ve otomatik sözlük taraması. Üçünü sırayla kullanmak, tek bir araca güvenmekten çok daha geniş bir harita verir. Sıra da önemlidir: önce elle bakıp uygulamayı tanır, sonra açık kaynaklardan yol toplar, en son otomatik taramayı bu bilgiyle yönlendirirsin.

Elle keşif ve açık kaynak

Otomatik araca geçmeden önce uygulamayı elle gezmek keşfi yönlendirir. Menüleri dolaşır, form alanlarını görür ve adres desenini öğrenirsin. Bu on dakika, sözlük seçimini ve filtre değerlerini doğrudan belirler. Sunucunun kendi ipuçları da bedavadır.

robots.txt tarayıcılara yasak dediği yolları listeler; bu satırlar aynı zamanda gizli tutulmak istenen dizinlerin adresini de verir. sitemap.xml yayımlanmış adresleri sıralar. HTTP yanıt başlıkları sunucu ve çatı bilgisini sızdırır. Bir hata sayfasının biçimi ya da favicon'un özeti bile arkada hangi ürünün çalıştığını ele verebilir.

Sayfa kaynağı ayrı bir hazinedir. HTML yorum satırları, betik dosyalarındaki uç adresleri ve yapılandırma değişkenleri görünür durur. Çoğu zaman sözlüğün asla bulamayacağı yollar oradadır, çünkü bunlar tahmin edilemeyecek kadar özeldir.

Bir betik dosyasında geçen '/api/v3/internal/report' gibi bir uç, kaba kuvvetle değil ancak kaynağı okuyarak bulunur. Bu yüzden ilk on dakikayı sayfa kaynağını ve ağ isteklerini okumaya ayırmak, sonraki taramanın yönünü baştan belirler.

İkinci yöntem açık kaynak istihbarattır. Uygulamaya hiç istek atmadan da yol bulabilirsin. Arama motoru operatörleri dizinlenmiş sayfaları getirir. Wappalyzer benzeri araçlar çalışan çatıyı ve kütüphaneleri tanır.

web.archive.org eski sürümlerdeki kaldırılmış yolları saklar. Genel kod depoları ve yanlış yapılandırılmış S3 kovaları, iç uç adreslerini ya da yapılandırma dosyalarını sızdırabilir. Bu kaynaklar hedefin logunda iz bırakmaz ve otomatik taramadan önce iyi bir harita verir.

Elle keşfin en somut çıktısı sözlük seçimidir. Genel amaçlı liste hızlı bir başlangıç verir, ama teknoloji yığınını biliyorsan hedefli liste çok daha çok iş görür. Yanıt başlığında bir Java uygulama sunucusu görüyorsan .php uzantısı denemek boşa istek üretir; bir PHP uygulamasında ise yapılandırma ve yedek dosyalarının adları değişir.

Sözlüğü hedefe göre daraltmak hem tarama süresini hem hedefe binen yükü düşürür. Aynı istek bütçesiyle daha çok gerçek yolu denemiş olursun.

API uçlarında keşif bambaşka bir sözlük ister. Klasik dosya adları işe yaramaz; bunun yerine sürüm etiketleri, kaynak adları ve şema uçları denenir.

Bir arayüz tanımı ya da şema ucu bulursan, uçları tek tek tahmin etmek yerine doğrudan listeden okursun. Bu hem daha hızlıdır hem de gereksiz istek üretmez. HTTP yöntemini değiştirmek de yüzey açar: GET kapalı bir yol POST ile yanıt verebilir, izin verilen yöntemleri öğrenmek yalnız adres denemekten hızlı sonuç getirir.

Etkinlik 1 / 9

Java tabanlı bir uygulamada .php uzantılı yolları denemek neden zaman kaybıdır?

ffuf ve filtre mantığı

Otomatik keşfin belkemiği ffuf'tur ve çalışma mantığı basittir. Adreste FUZZ yer tutucusu yazarsın, araç sözlüğün her satırını oraya koyup istek atar. Zor olan kısım istek atmak değil, dönen binlerce yanıtı süzmektir.

ffuf varsayılan olarak 200-299, 301, 302, 307, 401, 403, 405 ve 500 kodlarını eşleşme sayar ve 40 iş parçacığıyla çalışır. Çıktının her satırında adres, durum kodu ve yanıt boyutu, sözcük ve satır sayısı görünür.

$ ffuf -u https://hedef.example/FUZZ -w liste.txt -fc 404 -t 20
$ ffuf -u https://hedef.example/FUZZ -w liste.txt -fs 1204
$ ffuf -u https://hedef.example/yedek/FUZZ -w liste.txt -e .zip,.bak,.old
Kod filtresi, boyut filtresi ve uzantı genişletme: üç ayrı süzme modu.

Üç satır aynı aracı farklı süzme moduyla çalıştırır. -fc verilen durum kodunu gizler; ilk satır 404'leri eler ve var olan yolları bırakır. -fs verilen bayt boyutundaki yanıtları gizler; sunucu her yola 200 dönüyorsa bu filtre yumuşak 404 sayfalarını temizler. -e ise aynı kelimeyi birden çok uzantıyla dener.

Karar ağacı nettir: önce -fc ile dene, kod ayırt etmiyorsa -fs ya da -fw ile boyuta veya sözcük sayısına geç, hangi filtrenin işe yaradığını tek denemeyle gör. Filtreyi ters çevirmek de mümkün: -mc yalnız istediğin kodları eşler, geri kalanı hiç göstermez.

Etkinlik 2 / 9

ffuf ile https://hedef.example adresinde dizin keşfi yap, 404 yanıtlarını gizle.

ogrenci@lab

FUZZ yer tutucusunun gücü, tek bir adreste binlerce olasılığı denemesidir. Ama filtre kadar önemli olan, neyi denediğindir. Yalnız dizin adı değil, dosya adları da denenir.

En verimli anlardan biri, bilinen bir klasörün altında yedek uzantılarını taramaktır. Geliştiriciler dosyaları düzenlerken sık sık .bak ya da .old kopyaları bırakır. Sunucu bu uzantıları kod olarak çalıştırmaz, düz metin ya da indirilebilir dosya olarak sunar; kaynak kod ve içindeki bağlantı bilgileri böyle sızar.

Etkinlik 3 / 9

Bu komut ne yapar?

Önce kodu oku, sonra çıktıyı seç.

$ ffuf -u https://hedef.example/yedek/FUZZ -w liste.txt -e .zip,.bak,.old

Çıktıyı okumak: kod ve boyut

Bulduğun yolun değeri yanıt koduna bağlıdır ve kodu anlamıyla okumak gerekir. 401 ve 403, yolun var olduğunu ama yetki istediğini söyler; bu yüzden değerlidir, çünkü orada korunması gereken bir şey vardır. 302 yönlendirme genelde giriş ekranına çıkan bir paneldir.

Boş bir 200 ise çoğu zaman gürültüdür. 500 kodu da ilgi ister: sunucu beklemediği bir istekle karşılaşmış ve hata vermiştir. Bu hata sayfası bazen çatı adını ve sürümünü de ele verir.

.git/config ve .env gibi dosyalar ayrı bir sınıftır. .git/config kaynak kodu geçmişine giden kapıyı, .env dosyası ise veritabanı parolası ve API anahtarı gibi sırları açar. Bunları rapora yazarken yalnız erişilebilirliği kanıtlarsın: durum kodunu, boyutu ve gerekiyorsa maskelenmiş tek bir satırı koyarsın.

Dosyayı gereksiz yere indirmezsin. Müşteri için asıl acil iş, sızan sırrı hemen değiştirmektir. Erişimi kapatmak tek başına yetmez, çünkü sır çoktan okunmuş olabilir.

Etkinlik 4 / 9

Her içerik keşfi bulgusunu değerine göre ayır.

Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.

0/5 seçenek yerleşti.

Yanıt kodunu okumak bir bulgunun değerini belirler, ama kanıt satırın kendisidir. Uzun bir tarama çıktısında hangi satırların ilgi çektiğini hızlı ayırmak, boş yollarda saatler harcamaktan kurtarır. Boyut sütunu burada büyük ipucudur.

Birkaç yüz baytlık bir yapılandırma dosyası da, birkaç megabaytlık bir arşiv de dikkat ister. Sıfır baytlık 301 satırları ise çoğu zaman yalnız sonuna eğik çizgi ekleyen klasör yönlendirmeleridir. Bu yüzden çıktıyı önce boyuta göre sıralayıp aykırı satırlara bakmak iyi bir alışkanlıktır.

Etkinlik 5 / 9

İçerik keşfi çıktısında ilgi çeken satırları işaretle.

Şüpheli satırlara tıkla. Birden fazla olabilir.

Yumuşak 404 ve sanal konak

Bazı sunucular var olmayan bir yola 404 yerine 200 döner ve kibar bir hata sayfası gösterir. Buna yumuşak 404 denir. Böyle bir hedefte durum kodu tek başına yetmez: çıktıda yüzlerce yol 200 döner ve hepsi anlamlı görünür. O zaman ölçütü koddan yanıtın boyutuna ya da sözcük sayısına taşırsın.

Gerçek bir dosyayla sahte bir sayfa arasındaki fark çoğu zaman büyüklükte saklanır. Bu yüzden bir hedefte ilk iş, bilerek var olmayan bir yol isteyip sunucunun ne döndürdüğünü ölçmektir.

Bir web sunucusu tek bir IP adresinde birden çok siteyi barındırabilir. Hangi siteyi döneceğini istekteki Host başlığından anlar. Bu, adres çubuğundan görünmeyen iç uygulamaların aynı sunucuda gizli kalmasına yol açar: adı bilmeyen kişi o siteyi hiç göremez, çünkü doğru Host başlığını göndermez.

Sanal konak (vhost) keşfi tam da bunu hedefler ve içerik keşfinin sık atlanan bir katmanıdır. Aynı ölçüm mantığı burada da işe yarar.

Yöntem basittir: FUZZ yer tutucusunu adres yerine Host başlığına koyarsın ve sözlükteki her adı aynı IP'ye karşı denersin. Aşağıdaki komut bunu yapar. Tarama yalnız kapsam belgesinde yazan IP'ye ve alan adına yönelir; başka bir kurumun barındırıldığı ortak bir sunucuda bu ayrım daha da önemlidir.

-ac seçeneği sahte yanıtın imzasını taramanın başında kendisi öğrenir. Bulunan bir sanal konak ayrı bir uygulamadır ve içerik keşfi onun için baştan yapılır.

$ ffuf -u https://192.0.2.10/ -H 'Host: FUZZ.hedef.example' -w liste.txt -ac
Host başlığında FUZZ: aynı IP'de gizlenen iç uygulamaları bulur.

Etkinlik 6 / 9

Sunucu her yolda 200 dönerse dizin keşfi nasıl anlamlı kalır?

Sunucu tanımadığı her Host için aynı varsayılan sayfayı döner. Bu sayfanın boyutunu bir kez ölçer ve filtreye yazarsın; geriye kalan farklı boyutlu ya da farklı başlıklı yanıtlar, aynı IP'de yaşayan ayrı uygulamaları gösterir. Yumuşak 404 için de durum aynıdır: sahte sayfa hep aynı boyutta döndüğü için tek bir boyut filtresi yüzlerce satırı temizler. Otomatik ayar bu ölçümü kendisi yapar, ama değeri elle bilirsen sonucu da kendin denetlersin.

Etkinlik 7 / 9

ffuf çıktısında aynı boyutta yüzlerce sonucu elemek için kullanılan bayrak: ____

Derinleş:Yumuşak 404 ve otomatik ayar

Bir sunucu var olmayan bir yola 404 yerine 200 dönüp kibar bir 'sayfa bulunamadı' ekranı gösteriyorsa buna yumuşak 404 denir. Durum kodu artık ayırt edici değildir, çünkü var olan ve olmayan yol aynı kodu döner. İki çıkış yolu var. Birincisi elle filtre: sahte sayfanın bayt boyutunu ya da sözcük sayısını görüp -fs veya -fw ile eler.

İkincisi otomatik ayar: ffuf'un -ac (auto-calibrate) seçeneği, tarama başında bilerek var olmayan birkaç yol ister, dönen sahte yanıtın imzasını öğrenir ve o imzaya uyan sonuçları kendiliğinden gizler. Bu, her hedefte filtre değerini elle bulma zahmetini ortadan kaldırır ve yanlış pozitifleri baştan keser. Yine de otomatik ayarın öğrendiği imzayı tarama sonunda gözle doğrulamak iyi bir alışkanlıktır.

Özyineleme, savunma ve raporlama

Özyinelemeli keşif ikinci turda devreye girer: bulunan bir klasörün altında aynı sözlüğü yeniden koşturursun. Derinlik arttıkça istek sayısı hızla patlar, bu yüzden özyinelemeyi -recursion-depth ile sınırlı tutar ve yalnız umut veren dallarda kullanırsın. -t ile iş parçacığı sayısını, -rate ile saniyedeki istek sayısını kapsam belgesindeki sınıra göre ayarlarsın.

Servisi yavaşlatan bir keşif, bulduğu şeyin değerini aşan bir zarar doğurur. Hız ayarını taramadan önce yaparsın, alarm çaldıktan sonra değil.

Bir hesap yapalım. Beş bin satırlık bir sözlük tek turda beş bin istek atar.

İki seviye özyineleme açar ve her turda üç yeni klasör bulursan, istek sayısı katlanarak on binleri geçer. Bu yük hem hedefi zorlar hem de izleme sistemlerinde hemen alarm çaldırır. Bu yüzden özyinelemeyi elle yönetir, yalnız 401 ya da 403 dönen umut veren dallarda derinleşir, geri kalan klasörleri tek seviyeyle bırakırsın. -recursion-depth 1 gibi dar bir sınır, bu dengeyi kurmanın en kolay yoludur.

Savunma tarafı bu yüzeyi birkaç adımda daraltır. Dizin listelemeyi kapatmak, sunucunun bir klasörün içeriğini otomatik sıralamasını engeller. Yedek dosyaları, .git klasörünü ve .env dosyasını web köküne asla koymamak sızıntı kaynağını kurutur. WAF ve hız sınırı kaba kuvvet taramasını yavaşlatır.

En önemlisi: hassas bir yolu adresini gizleyerek değil, yetkilendirmeyle korursun. Gizlilik yoluyla güvenlik, adres bir kez sızınca çöker. Arama motorlarını uzak tutmak için yazılan kurallar da gizlilik sağlamaz, çünkü o dosyayı herkes okuyabilir.

Etkinlik 8 / 9

Doğru mu, yanlış mı?

robots.txt dosyası gizli yolları saklamak için uygun bir yöntemdir.

Gerçek testlerde içerik keşfi genelde en çok bulgu üreten adımdır, ama en çok yanlış pozitif de burada çıkar. Bir aracı körü körüne çalıştırıp ham çıktısını rapora dökmek, müşteriyi yüzlerce anlamsız satıra boğar ve gerçek riski gölgeler. İyi bir test, hangi yolun gerçek risk taşıdığını ayırır.

Açık bir yedek dosyası ya da erişilebilir bir .env dosyası doğrudan bulgudur. Yönlendirme yapan bir klasör ya da boş bir sayfa genelde yalnız bilgidir ve raporun ek bölümünde kalır. Keşif, istek atmak değil, gürültüden anlamı süzmektir.

Etkinlik 9 / 9

Yetkili bir testte keşif adımlarını doğru sıraya koy.

Sürükleyip doğru sıraya koy.

Bir öğeye odaklan, yukarı ve aşağı ok tuşlarıyla taşı. Home tuşu en üste, End tuşu en alta alır.

  • 1Canlı web köklerinde içerik keşfi yap
  • 2Port ve servis taraması yap
  • 3Canlı olanları süz
  • 4Kapsam belgesindeki alan adlarını çıkar
  • 5Pasif kaynaklardan alt alan topla

Bu derste bir hata mı gördün? Bildir