Yavuzlar/Vulnlab XSS Çözümleri

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18
Akın Şengezer tarafından yazılmıştır.

Herkese merhaba! Ben Akın Şengezer. Bugün sizlerle Yavuzlar ekibinin hazırlamış olduğu Vulnlab makinesinin XSS Zafiyetinin çözümlerini yapacağız. Şimdiden hepinize keyifli okumalar diliyorum. Ve hepinizin Kurban Bayramı Mübarek Olsun!

xss-1.webp




1.)Giriş​


İlgili makineyi “https://github.com/Yavuzlar/VulnLab” adresinden DOCKER yardımı ile kurmanız gerekmektedir. Kurduktan sonra “ adresinden makineye ulaşabilir ve çözmeye başlayabilirsiniz. Vulnlab makinesini seri şeklinde yapacağım. Her Zafiyetli Lab’ın çözümlerine buradan ulaşabileceksiniz!

Ekran-goruntusu-2022-07-11-180348.png




Makineyi Docker yardımı ile kurduktan sonra şu şekilde bir Anasayfa ile karşılaşacaksınız.

WhatsApp-Image-2022-07-08-at-11.22.25-2.jpeg


2.) Basic Reflected​


WhatsApp-Image-2022-07-08-at-11.22.25-3.jpeg


İlk Lab olan Basic Reflected ile başlıyoruz. Burada sayfaya ilk girdiğimde dikkatimizi çeken kullanıcı inputu alan arama butonu tarzı bir alan vardı. Önce düz kelimeler aratarak çıktısını inceledik.

aa.png


Arama sonuçlarına baktığımız zaman aradığımız kelimeyi <b> etiketlerine arasına aldığını gördük. XSS Payloadlarında kullandığımız <>,(),;,/ vb… işaretleri ve kelimeleri aratarak bu sefer filtreleme oluyor mu diye test ettik ve hiç bir filtreleme ile karşılaşmadığımızı fark ettik.

WhatsApp-Image-2022-07-08-at-11.22.25-7.jpeg


Buradan sonrası farklı gördüğüm bir payload ile: <noembed><img src=”</noembed><iframe onload=alert(“PwnLabMe”)>” /></noembed>payloadını kullanarak tamamlamak kaldı.

WhatsApp-Image-2022-07-08-at-11.22.25-6.jpeg


a-3.png

Sizler de buradan farklı teknikler deneyebilirsiniz.

2.2) Basic Stored​


Sisteme girmek için bize verdikleri username ve password kullanarak giriş yapıyoruz. Karşımıza bir Chat uygulaması çıkıyor. Lab’ın isminden de anlaşılacağı gibi STORED XSS Arıyoruz.

WhatsApp-Image-2022-07-08-at-11.22.21-15.jpeg


Uygulamayı girdiğim zaman önce düz bir kelime aratıyoruz.

WhatsApp-Image-2022-07-08-at-11.22.21-13.jpeg


Arattığımız kelime sadece <div> etiketi altına alındığını gördükten sonra yine bizi engelleyecek herhangi bir filtreleme olmadığını tespit edip <body onload=’alert(“PwnLabMe”);’> payloadını yollayıp tamamlıyoruz.

WhatsApp-Image-2022-07-08-at-11.22.21-11.jpeg




a.png


2.3) Basic Dom-Based​


Lab’a girdiğimiz zaman bizi üçgenin alanını hesaplayan bir Javascript uygulaması veriliyor. Taban Ve Yükseklik istenmiş. Önce rakamlar girip uygulamanın çalışmasını kontrol ettik. Ve üçgen alanı hesaplayan Javascript kodunu inceledik.

a-1.png


Tekrardan “”,(),<>,script,alert kelime ve simgelerini yollayarak herhangi bir filtreleme var mı onu kontrol ediyoruz. Ve herhangi bir filtreleme ile karşılaşmadık.

WhatsApp-Image-2022-07-08-at-11.22.21-4.jpeg


Buradan sonra Lab ismine bakaran DOM XSS üzerinden gitmemiz gerektiğini zaten bizlere söylüyor. İlk başta payload girerek direk sistem üzerinden alert verdiremezsiniz. DOM XSS’de sistem ile HTML dönen yanıt aynı olur. Bu yüzden öncelik olarak kelime gönderip ardına payload yollayarak sistem üzerinde bir nevi atlatma sağlayabiliyoruz.

a-2.png


PwnLabMe yazısını yolladıktan sonra arkasına PwnLabMe<script>confirm(1);</script> payloadını yollayıp tamamlıyoruz.

b.png


2.4) HTML Manipülasyonu​


Giriş ekranı olarak film bileti alabileceğimiz ve kullanıcıdan input alan bir alan ile karşılaştık. Buraya düz bir metin girerek kaynak kodda durumu görüntüledik.

1.png


Kaynak kodlarda incelediğimizde <a href=ticket.php?name=> tagı’nın içine alındığını görüyoruz. Payload oluştururken kafamızda az çok neler yazmamız gerektiği oluşmuştur. Düz bir biçimde XSS Payloadı gönderdiğimiz zaman tagın içerisinden çıkamadığını fark ettik. Bunun üzerine ” işareti kullanarak Manipüle etmemiz gerektiği belli oldu.

3.png
2.png


Bilet ismini görüntülemek için verilen “Bileti Görüntüle” Butonunu manipüle etmeyi düşünmemiz gerekli. Bunun üzerine, mouse yazının üzerine geldiği zaman alert verdirecek şu payloadı kullandık.

X”<a href=”x” onmouseover=’alert(“PwnLabMe”);’>Bileti Görmek İçin Tıkla</a>

Bu sayede bileti görüntülemek için butona geldiğim zaman alert yazısı ile karşılaştık.

1-1.png


2.5) Galerimize Hoş Geldiniz​


Bizleri bu sefer resim galerisi tarzında bir sayfa karşıladı. İlk olarak resimlere teker teker tıklayıp baktıktan sonra Url tarafı dikkatimi çekti. Çünkü resimler “?img=” altında numaralandırılıyordu. Demek ki bizim XSS İnput yerimiz burası olacak.

1-2.png


“?img=PwnLabMe” isteği göndererek Nasıl yorumlandığını kaynak kodlarında inceledikten sonra gönderdiğimiz ismin “JPG” Formatına dönüştürüldüğünü gördük. Fakat düz metin yolladığımız zaman her zaman JPG olarak yorumlanacak. ” Kaçış elemanını kullanarak Text haline dönüştürüp JPG olarak yorumlanmasını engelledikten sonra Payloadı oluşturma aşamasına geçtik.

WhatsApp-Image-2022-07-08-at-11.22.21-8.jpeg


WhatsApp-Image-2022-07-08-at-11.22.21-9-1.jpeg


İMG Etiketi altına aldığı için XSS Payloadı oluştururken buradan yürümemiz gerekiyor. Bu Yüzden; ” <img src=”x” onerror=’prompt(“PwnLabMe”);’> kullanarak tamamlamış olduk.

2-1.png


2.6) User Agent​


Bizleri ilk karşılayan Login ekranında verilen bilgiler ile giriş yapıyoruz. Arkasına bizleri admin’nin User Agent bilgilerini depoladığını ve nasıl göründüğünü görmemizi istediği sayfa ile karşılaştıktan sonra görüntülüyoruz.

1-3.png


Bizlere belirli User Agent sunduktan sonra hepsini siliyoruz. Ve artık buraya kadar Burp Suite kullanmadan geldiğimiz yetti :). Burp Suite aracını açarak isteği dinlemeye alıyoruz ve gözlemlemeye başlıyoruz.

2-2.png


User-Agent kısmını silip bir metin yollayıp Browser üzerindeki yorumunu inceledikten sonra, User-Agent kısmına ne yazarsanız yazın Log’layıp sizlere sunuyor.

WhatsApp-Image-2022-07-08-at-11.22.23-1.jpeg


PwnLabMe metini gönderdikten sonra sayfayı yenileyip tekrar bakıyoruz.

WhatsApp-Image-2022-07-08-at-11.22.23-2.jpeg


Yapmamız gereken tek şey; “<script>prompt(“PwnLabMe”);</script>” payloadı yollayarak Lab’ı tamamlamak.

WhatsApp-Image-2022-07-08-at-11.22.25-1.jpeg


1-4.png


2.7) Haberler​


Girdikten sonra Kullanıcıdan 2 tane input alan “News Title” ve “News Url” bölümleri ile karşılaşıyoruz. Önce düz metinler göndererek yorumlanmasını kaynak kodlardan inceliyoruz.

newsxss1.png


News Url bölümüne gönderdiğimiz metinin “<a href=” etiketi içerisine alınıp News Title bölümüne gönderdiğimiz metinin ise <a href=> tagının text kısmında yorumlandığını görüyoruz.

Kaynak kodlarda düz payload gönderikten sonra <>; işaretlerinin encode edildiğini görüyoruz. Bu yüzden payload oluştururken <>,; vb… işaretler kullanmamamız gerekli.

newsxss3.png


javascript:alert(“PwnLabMe”); payload’ı kullanarak <>,;,/ işaretlere gerek kalmadan sistem üzerinde alert verdirerek tamamlıyoruz.

newsxss4.png


2.8) Dosya Yükleme​


İlk girdiğimiz zaman bizlere dosya yüklememize imkan sağlayan bir alan ile karşılaşıyoruz. Kaynak kodları okuduktan sonra sadece jpeg ,png, gif dosya türlerine yani resim yüklememize imkan sağlanıyor.

1-5.png


Kaynak Kod:

1.5.png


Buradan sonra 3 olanak mevcut. Ya dosya ismini XSS Payloadı yapıp yükleyeceğiz, ya Metadata üzerinde XSS Payloadı yapıp yükleyeceğiz ya da SVG Dosyası içine XSS Payloadı yapıp yüklemeliyiz. Ama zaten otomatik olarak kaynak kodlar sayesinde 3. seçenek elenmiş oldu. Exiftool ile Metadata içinde Comment içine XSS Payloadı yazıp upload ettiğimiz zaman tamamlanmadı. Demek oluyor ki 1. yöntem çözüm yolumuz.

2-3.png


Linux ortamında dosya ismini “><img src=x onerror=alert(“PwnLabMe”)>.png şeklinde hazırladım. Ve sistem üzerinde upload ettiğim zaman Lab tamamlanmış oldu.

3-1.png


Tüm çözümler bu kadardı. Umarım sizlere faydalı olmuştur. Herkese keyifli günler dilerim!



Kaynakça:



https://portswigger.net/web-security/cross-site-scripting/dom-based

https://owasp.org/www-community/attacks/xss/





Teşekkür:

Veli Oğuzcan Akdağ

Muhammet Şahin Adibaş
 
Moderatör tarafında düzenlendi:
Geri
Üst