XSS(Cross Site Scripting) Nedir? ve XSS Lab Uygulaması (Web for Pentester)

Cross site scripting (XSS), bilgisayar güvenlik açığı. HTML kodlarının arasına istemci tabanlı kod gömülmesi yoluyla kullanıcının tarayıcısında istenen istemci tabanlı kodun çalıştırılabilmesi olarak tanımlanır.

 

Cross-Site Scripting (XSS) OWASP Top 10 listesinde bulunmaktadır.Bu yazımda Web for Pentester uygulamasının XSS Bölümlerini çözeceğim. https://pentesterlab.com/exercises/web_for_pentester/ Linkinden ISO dosyasını indirerek sanal makinenizde açarak sanal makinanın IP adresi ile tarayıcınızdan uygulamaya erişebilirsiniz.

1-0

Web for Pentesterın ana sayfası görüldüğü gibidir.Bir çok web zaafiyetini öğretmek için hazırlanmıştır.Sonraki yazılarımda diğer zaafiyetlerede değinmeye çalışacağım.Bu yazı için XSS de bulunan 9 örneği çözeceğiz.

XSS Türleri:

Başlamadan önce XSS Türleri hakkında kısaca bilgi vereyim.3 Çeşit XSS Türü vardır.1- Reflected XSS 2- Stored/Persistent XSS 3- Dom XSS

  1. Reflected XSS: Kullanıcının girilmesi beklenen parametre yerine Javascript  kodu girerek bunu ekrana yansıtması ile tespit edilebilen XSS çeşitidir.
  2. Stored/Persistent XSS: Adında anlaşılacağı üzere kalıcı XSS türüdür.Bu sefer girilen payloadlar anlık olarak yansımaz bir veritabanına yada başka bir yere kayıt edilir daha sonradan ziyaret edildiğinde çalışan XSS çeşitidir.
  3. Dom XSS: Dom (Document Object Model) XSS Dom lardan kaynaklanan XSS dir.Gemelde # işaretinden sonra payload denenmesi ve sayfa yenilendiğinde alert alındığında DOM XSS var denilen XSS açıklığıdır.İşin teorik bilgisi DOM nesnesinden kaynaklandığı için en tehlikeli XSS türü olarak anılmaktadır.Derinlemesine öğrenmek için Ömer‘in http://omercitak.com/dom-based-xssi-anlamak/ yazısına mutlaka göz atın derim güzel bir yazı olmuş.

XSS ile Neler Yapılabilir?

XSS ile javascript kodları çalıştırabilmekteyiz.Burada zararlı kodlar kullanıldığında  Cookie çalma,sayfanın içinde başka sayfaya yönlendirme.Sitemize zararlı kodlar gömerek istedikleri başka saldırılar gerçekleştirebilirler.Web dünyasında önemli ve kritik açıklıklar arasında yer almaktadır.BeEF (The Browser Exploitation Framework Project) ile XSS açıklıklarını sömürebilirsiniz.

Gelelim şimdi uygulama kısmına XSS Tespit edilmesi ve sayfada alert görmek hedefimiz.Bunun için Web for Pentesterın XSS bölümlerine başlıyoruz.

 

Example 1:

1-1

 

Kullanıcıdan beklenen name parametesi için bir deneme yaptık.Bizim payload yazarken kullanacağımız herhangi bir şey filtrelenmiş mi diye baktık ve hiç biri bu örnek için filtrelenmemiş.Buraya bir payload yazarak  XSS tespiti var mı yok mu karar verebiliriz.

1-2

Burada <script>alert(1)</script> payloadımızı girerek ekrana alerti bastırarak XSS imizi bulmuş bulunmaktayız.alertin içine isim yazı yazmak isterseniz <script>alert(“XSS”)</script> tarzında yazabilirsiniz.Fakat bazen tırnak işaretlerinin filtrelenmesinden dolayı direk sayı girerek tırnak kullanmadan alert almak daha sağlıklı sonuçlar vermektedir.

1-3

 

Sayfa kaynağını görüntüle diyerek yazdığımız payloadın kodlarda nasıl göründüğüne bakarak daha etkili sonuçlar alabiliriz.

Example 2:

2-0

Bir önceki örnekteki  payloadımızı  girdiğimizde alert alamadık ve yazdığımız payloadın script tagları giderek ekrena Hello alert(1) yazdı.Yazılımcı arka tarafta script kodlarını filtrelemiş.

2-1

Bunu sayfa kaynağındada görebilmekteyiz.

2-2

Payload: <SCRIPT>alert(1)</SCRIPT>  olarak yazıp denediğimizde pop-up geldi.Yazılımcı sadece küçük script tagını filtrelemiş biz büyük girdiğimizde alertimizi alabildik.

2-3

Tagı büyük olarak yazıp bypass edebileceğimiz gibi  <sc<script>ript>alert(1)</sc</script>ript> gibi iç içe script payloadı yazarakta çalışmakta.

2-4

Sayfa kaynağında görüldüğü gibi bir script filtrelenirken iç içe yazdığımız için istediğimiz kod haline gelmektedir.script taglar filtrelendiğinde bu şekilde aşabileceğiniz gibi içinde script tagı bulunmayan payloadlarda deneyebilirsiniz.

Example 3:

3-1

Bu örnekte büyük SCRIPT tagınıda engellemiş yazılımcı fakat yine iç içe script tagı yazarak aşabilmekteyiz.

3-2

Bu örnekte script tagları engellendiği için içinde script tagı bulunmayan <svg onload=alert(1)> gibi bir payload girerek yine alert aldırabiliriz.

 

Example 4:

4-1

Bu örnektede  <svg onload=alert(1)> payloadı ile alert alınabilmekte.

Example 5:

5-1

Bu örnekte <svg onload=alert(1)> payloadını girdiğimizde error vermekte.Yazılımcı alert fonksiyonunda hata verdirmiş arkadaşlar.Bunun için bizde alert ile aynı işi gören prompt kullanarak aşacağız.

5-2

Bu örneğide  <svg onload=prompt(1)> payloadı  ile çözülebilmekte.

 

Example 6:

6-1

<svg onload=alert(1)> payloadımızı girdiğimizde bir hata yada ekrana bir pop-up oluşmadı.

6-2

Sayfa kaynağını görüntülediğimizde ise girdiğimiz değişkeni bir değişkene atandığını görmekteyiz.Bu yüzden kodlarımız çalışmıyor.

6-3

Fakat payload olarak “; alert(1);” girdiğimizde önce değişkeni kapatıp sonra diğer ” nığı kapatarak syntax hatası almadan alertimizi bastırdık.

6-4

49.satıra dikkatli bakarsak payloadımızı ve yazılımcının filtresini nasıl bypass ettiğimizi görebilirsiniz.

 

Example 7:

7-1

Bu örnekte sayfa kaynağını görüntülediğimizde bir önceki gibi olduğunun sadece çift tırnak yerine tek tırnak kullanıldığı görülmektedir.

7-2

 

Payload olarak  ‘; alert(1);’ girdiğimizde yine hedefimize ulaşmış olmaktayız.

7-3

Sayfa kaynağında 50.satırda bunu görebilmekteyiz.

 

Example 8:

Bu örnekte durum farklı artık bir parametreye değilde html form a payload girmemiz gerekiyor.Sayfanın kaynağını görüntüleyip inceliyoruz./xss/example8.php bağlantısı sayfa içinde yineleniyor.

8-0

Payload olarak /” onmouseover=”alert(1); girildiğinde mouse ile üstüne geldiğimizde pop-upımız açılacaktır.

8-1

 

Example 9:

9-1

 

# işaretinden sonra <script>alert(1)</script>  payloadı girerek sayfayı yenilediğimizde alert ekrana yansıyacaktır.Bu yazının başında değindiğim Dom XSS türüdür.

 

Genel olarak XSS i tanıyarak bir kaç bypass yolunu örneklerle inceledik.İnşallah faydalı olmuştur.Bir çok XSS payloadı bulunmakta ve türemekte duruma koda göre BugBounty (Bugcrowd,HackerOne vb.)  ile uğraşan arkadaşlar kendilerini geliştirip çok farklı payloadlar bulmaktadır.Bir çok XSS Payloadına https://packetstormsecurity.com/files/112152/Cross-Site-Scripting-Payloads.html adresinden ulaşabilirsiniz.

XSS i Nasıl Engelleyebiliriz?

Birde buradaki örnekte gördüğünüz gibi Blacklist yöntemi ile XSS den korunmaya çalışılmış.Siz neyi filtrelerseniz filtreleyin saldırgan bir şekilde bypass edebilmekte.Bunun için Whitelist  metodu kullanılarak ne gerekli ise o alınmalı onun dışındaki her şey engellenmelidir.

Başka bir yazıda görüşmek üzere 🙂

Ahmet Gürel

Cyber Security Researcher | Penetration Tester

Leave a Reply