Merhaba ben saldırı timlerinden BUNJO, bu konuda XSS (Cross Site Scripting) web zafiyetini anlatacağım.
XSS Nedir?
XSS, "Cross-Site Scripting" teriminin kısaltmasıdır ve web uygulamalarındaki güvenlik açıklarından biridir.
XSS saldırıları, saldırganın kötü niyetli bir şekilde oluşturduğu veya değiştirdiği bir web sayfasına gömülen,
genellikle JavaScript kodları içeren kötü niyetli kodları içerir.
XSS saldırıları, kullanıcının tarayıcısında çalıştırılan bu kötü niyetli kodlar aracılığıyla saldırganın istediği eylemleri gerçekleştirmesine olanak tanır.
Bu eylemler arasında kullanıcının oturum açma bilgilerini çalma, tarayıcıda kötü niyetli içerik gösterme,
sayfayı değiştirme veya kullanıcının tarayıcısındaki çerezlere müdahale etme gibi potansiyel tehlikeli faaliyetler bulunabilir.
XSS Çeşitleri
XSS için üç ana saldırı stratejisi vardır. Bunlar DOM XSS, reflected XSS ve stored XSS'dir.
Reflected XSS:
XSS saldırılarına karşı alınan önlemlerden filtrelemenin kullanılmamasından dolayı ortaya çıkar.
Dışarıdan alınan parametrenin girilmesi beklenen parametre yerine Javascript kodu girerek ekrana yansıtması
genellikle e-postalarda veya gizli bağlantılılarla hedef kullanıcıya tıklatılır ve kullanıcının oturum bilgileri saldırganın eline geçebilir.
Dışarıdan alınan parametrenin girilmesi beklenen parametre yerine Javascript kodu girerek ekrana yansıtması
genellikle e-postalarda veya gizli bağlantılılarla hedef kullanıcıya tıklatılır ve kullanıcının oturum bilgileri saldırganın eline geçebilir.
Stored/Persistent:
En tehlikeli ve kalıcı olan XSS türüdür. Girilen payloadlar(kötü amaçlı eylemi gerçekleştiren solucanlar veya virüsler gibi kötü amaçlı yazılımın bir parçasıdır.
Veri silme, spam gönderme ve şifreleme amacıyla kullanılır.) anlık olarak yansımaz bir veri tabanında veya sunucularda saklanan komut dosyasıdır.
Reflected XSS ile arasındaki fark buradaki payloadlar kullanıcının görebileceği şekilde bulunur fark edilme oranı yüksektir fakat
stored XSS’te arka planda direkt olarak çalışacak ve kullanıcın fark etmesine izin verilmeyecektir.
Kullanıcı bu siteyi kullanırken bilgiler kolaylıkla çekilir.
Veri silme, spam gönderme ve şifreleme amacıyla kullanılır.) anlık olarak yansımaz bir veri tabanında veya sunucularda saklanan komut dosyasıdır.
Reflected XSS ile arasındaki fark buradaki payloadlar kullanıcının görebileceği şekilde bulunur fark edilme oranı yüksektir fakat
stored XSS’te arka planda direkt olarak çalışacak ve kullanıcın fark etmesine izin verilmeyecektir.
Kullanıcı bu siteyi kullanırken bilgiler kolaylıkla çekilir.
Dom XSS:
DOM (Document Object Model) dolayısıyla kaynaklanan bir XSS türüdür. DOM tarayıcıların çalıştırıldığı zaman yorumladığı her şey DOM kapsar.
DOM XSS de payload enjekte edildiğinde sayfa kaynağında görülmez.
Amacın tanımdan çok pratik olması dolayısıyla tanımlar internetten alınmıştır, Kaynak: XSS (Cross Site Scripting) nedir ? XSS saldırı çeşitleri - Siber Eğitmen
Pratik
Senaryo 1
Bu senaryoda, herhangi bir filtreleme olmaması durumunu göreceğiz.
Siteye giriş yapıyoruz.
Açığın Kaynaklanma Sebebi:
PHP:
DOM XSS de payload enjekte edildiğinde sayfa kaynağında görülmez.
Amacın tanımdan çok pratik olması dolayısıyla tanımlar internetten alınmıştır, Kaynak: XSS (Cross Site Scripting) nedir ? XSS saldırı çeşitleri - Siber Eğitmen
Pratik
Senaryo 1
Bu senaryoda, herhangi bir filtreleme olmaması durumunu göreceğiz.
Siteye giriş yapıyoruz.
Açığın Kaynaklanma Sebebi:
PHP:
PHP:
<?php require_once '../header.php'; ?>
<html>
Hello
<?php
echo $_GET["name"];
?>
<?php require_once '../footer.php'; ?>
URL'e baktığımız zaman "name" ile kullanıcıdan bir GET alınıyor ve php üzerinde çalıştırılıyor.
Herhangi bir filtreleme olmadığından dolayı kullanıcı istediği kodu sitede çalıştırabiliyor.
Şeklinde bir kod çalıştırması yapabiliriz.
Burada anlattıklarım XSS açığını sömürmekten ziyade, bulmak olduğu için anlatımımda alert() fonksiyonunu kullanacağım.
Senaryo 2
Bu senaryoda yetersiz bir filtrelemeyi bypass edeceğiz.
Her şey aynı şekilde kodumu çalıştırmayı deniyorum.
Açığın Kaynaklanma Nedeni:
Herhangi bir filtreleme olmadığından dolayı kullanıcı istediği kodu sitede çalıştırabiliyor.
Şeklinde bir kod çalıştırması yapabiliriz.
Burada anlattıklarım XSS açığını sömürmekten ziyade, bulmak olduğu için anlatımımda alert() fonksiyonunu kullanacağım.
Senaryo 2
Bu senaryoda yetersiz bir filtrelemeyi bypass edeceğiz.
Her şey aynı şekilde kodumu çalıştırmayı deniyorum.
Açığın Kaynaklanma Nedeni:
PHP:
<?php require_once '../header.php'; ?>
Hello
<?php
$name = $_GET["name"];
$name = preg_replace("/<script>/","", $name);
$name = preg_replace("/<\/script>/","", $name);
echo $name;
?>
<?php require_once '../footer.php'; ?>
Burada kodu incelediğimiz zaman sadece "script" içeren kısımlar kaldırılıp işleme devam ediliyor. Kısacası büyük veya küçük harf kontrolü yok.
gördüğünüz gibi "script" kısımı kaldırıldı.
Fakat <SCRIPT>alert("bunjo")</SCRIPT> olarak bir bir kod denersek, "SCRIPT" ile "script" aynı olmadığından dolayı çalışacaktır.
Görüldüğü gibi işe yaradı.
Senaryo 3
Bu senaryoda da yine yetersiz bir filtrelemeyi bypass edeceğiz.
Kodumu çalıştırmaya çalışıyorum fakat işe yaramıyor.
Açığın Kaynaklanma Nedeni:
PHP:
gördüğünüz gibi "script" kısımı kaldırıldı.
Fakat <SCRIPT>alert("bunjo")</SCRIPT> olarak bir bir kod denersek, "SCRIPT" ile "script" aynı olmadığından dolayı çalışacaktır.
Görüldüğü gibi işe yaradı.
Senaryo 3
Bu senaryoda da yine yetersiz bir filtrelemeyi bypass edeceğiz.
Kodumu çalıştırmaya çalışıyorum fakat işe yaramıyor.
Açığın Kaynaklanma Nedeni:
PHP:
PHP:
<?php require_once '../header.php'; ?>
Hello
<?php
$name = $_GET["name"];
$name = preg_replace("/<script>/i","", $name);
$name = preg_replace("/<\/script>/i","", $name);
echo $name;
?>
<?php require_once '../footer.php'; ?>
Burada "script" içeren her kısım kaldırılıyor.
Bu durumda izleyeceğimiz yol:
<sc<script>ript>alert("BUNJO")</sc</script>ript>
Kod karışık gelebilir fakat dikkatlice bakınca, php scriptinin filtreleme yaparken script gördüğü kısımları kaldırdığında
<script>alert("BUNJO")</script>
geriye bizim istediğimiz kodun kaldığını göreceğiz.
Ve başarılı.
İnternetten "XSS Reflected Payloads" adlı arama yaparak diğer payloadlara ulaşabilirsiniz.
Anlatacaklarım bu kadardı, diğer filtreleme seçenekleri içeren senaryoları daha sonra göstereceğim.
Okuyan herkese teşekkür ederim.
Bu durumda izleyeceğimiz yol:
<sc<script>ript>alert("BUNJO")</sc</script>ript>
Kod karışık gelebilir fakat dikkatlice bakınca, php scriptinin filtreleme yaparken script gördüğü kısımları kaldırdığında
<script>alert("BUNJO")</script>
geriye bizim istediğimiz kodun kaldığını göreceğiz.
Ve başarılı.
İnternetten "XSS Reflected Payloads" adlı arama yaparak diğer payloadlara ulaşabilirsiniz.
Anlatacaklarım bu kadardı, diğer filtreleme seçenekleri içeren senaryoları daha sonra göstereceğim.
Okuyan herkese teşekkür ederim.