Yansıtılan XSS: Gelişmiş Kullanım Kılavuzu


Siteler arası komut dosyası çalıştırma güvenlik açıkları, şüphesiz uygulamaların uzun süre aklını başından alacak güvenlik açığı türlerinden biridir. Bu kesintisiz ekleme hatası genellikle saldırganların kurban adına kötü niyetli eylemler gerçekleştirmesine veya daha da kötüsü, şifreler veya e-postalar gibi hesap bilgilerini okumak ve değiştirmekten yalnızca dahili kaynaklara erişmeye ve hatta yerel dosyaları okumaya kadar, savunmasız bir sunucu tarafı bileşeni adına kötü niyetli eylemler gerçekleştirmesine olanak tanıyacak şekilde daha da ilerleyebilir.

Bu makalede, yansıtıcı XSS ​​güvenlik açıklarını belirlemek için kanıtlanmış bir metodolojiye bakacağız ve aynı zamanda bazı gelişmiş yararlanma yöntemlerini daha derinlemesine inceleyeceğiz.

Hadi dalalım!

Siteler arası komut dosyası çalıştırma (XSS), saldırganların diğer kullanıcılar tarafından görüntülenen web sayfalarına kötü amaçlı komut dosyaları eklemesine olanak tanıyan bir enjeksiyon güvenlik açığıdır. Yetersiz giriş doğrulamasından ve bu kullanıcı girişinin herhangi bir yansımasının kodlama eksikliğinden yararlanarak çalışır ve saldırganların, tehlikeye atılan sayfayı ziyaret ettikten sonra kurbanların tarayıcılarında çalışan HTML veya JavaScript kodunu eklemesine olanak tanır.

Güvenlik açığı bulunan bileşene bağlı olarak XSS, hem istemci tarafında hem de sunucu tarafında meydana gelebilir. İstemci tarafı XSS ​​yalnızca kurbanın web tarayıcısında gerçekleşir ve saldırganların kurbanın oturumunu ele geçirmesine olanak tanır.

Sunucu tarafı XSS ​​(veya kör XSS olarak da bilinir), güvenlik açığı bulunan bileşen, sterilize edilmemiş girişinizi kullandığında ve bunu örneğin başsız bir web tarayıcısı aracılığıyla sunucu tarafındaki DOM içinde değerlendirdiğinde ortaya çıkar. Bu, saldırganların sunucu adına giden istekleri başlatmak için rastgele JavaScript kodu kullanmasına ve ciddi durumlarda yerel dosyaları bile okumasına (başsız web tarayıcısının dağıtım yapılandırmasına bağlı olarak) olanak tanır.

Şimdi farklı XSS ​​güvenlik açıklarına bir göz atalım.

Yansıyan XSS

Yansıyan XSS (veya bazen yansıtıcı XSS ​​olarak da adlandırılır), kötü niyetli kullanıcı girişinin bir istek özelliği (URL yolu, parça, sorgu/gövde parametresi veya HTTP başlığı gibi) aracılığıyla enjekte edilmesi ve uygun şekilde arındırılmadan hemen kullanıcıya geri yansıtılmasıyla oluşur.

Sunucu, kullanıcı girişini işler ve herhangi bir kodlama olmadan HTTP yanıtına dahil ederek kurbanın tarayıcısının, özel hazırlanmış bir bağlantıyı tıklattığında saldırganın komut dosyasını yürütmesine neden olur.

Saklanan XSS

Saklanan XSS (veya bazen kalıcı XSS ​​olarak da adlandırılır), bir saldırganın kötü amaçlı komut dosyasının hedefin veritabanına, dosya sistemine veya başka herhangi bir depolama hizmeti türüne (AWS S3 gibi) kaydedilmesi durumunda gerçekleşir. Diğer kullanıcılar daha sonra depolanan bu verileri aldığında (örneğin bir yorum bölümünü, genel profili veya forum gönderisini görüntülerken), kötü amaçlı komut dosyası tarayıcılarında çalıştırılır.

Saklanan XSS, yansıtılan XSS’nin aksine, belirli bir bağlantıya tıklamalarına gerek kalmadan birden fazla kurbanı etkileyebileceğinden özellikle tehlikelidir.

DOM tabanlı XSS

DOM tabanlı XSS, güvenli olmayan JavaScript kodu kullanıcı tarafından kontrol edilebilen verileri (DOM kaynağından) işlediğinde ve bunu bir DOM havuzuna aktardığında ortaya çıkar. Bu, saldırganların güvenlik açığı bulunan uygulama tarafından değerlendirilecek JavaScript verileri oluşturmasına olanak tanır.

DOM tabanlı XSS’nin tespit edilmesi, kötü niyetli kullanıcı girişinin hemen HTTP yanıtına yansıtılmaması, bunun yerine bir DOM havuzuna aktarılması nedeniyle daha zordur. DOM tabanlı XSS ​​güvenlik açıklarının tanımlanması ve kullanılması gelecek bir makalede tartışılacaktır.

Bu makale boyunca yalnızca yansıtılmış (veya yansıtıcı) ve depolanmış (kalıcı) XSS’yi ele alacağız çünkü bu türlerin her ikisi de aynı özellikleri paylaşıyor.

Kendi kendine XSS nedir?

Self-XSS, bir saldırganın kurbanı kendi tarayıcısında kötü amaçlı JavaScript çalıştırması için kandırması ve genellikle kurbanı tarayıcının geliştirici konsoluna veya yalnızca kendisinin erişebildiği meşru bir web sitesindeki bir metin alanına (örneğin profilinizdeki adres alanına) kod yapıştırmaya ikna etmesiyle oluşur.

Bu, teknik olarak komut dosyası yürütülmesine neden olsa da, çoğu hata ödül programı ve güvenlik araştırmacısı, self XSS’nin bir güvenlik riski teşkil ettiğini düşünmüyor çünkü bu, kurbanın saldırıyı kendisine karşı aktif olarak gerçekleştirmesini gerektiriyor; bu da, güvenlik açıklarının kapsamlı sosyal mühendislik olmadan kullanılabilir olması gerektiği yönündeki temel güvenlik ilkesini ihlal ediyor.

Self-XSS güvenlik açıklarının zincirlenebileceği ve daha da artırılabileceği durumlar olduğunu unutmayın, ancak bu, gelecek bir makalede daha kapsamlı bir şekilde ele alacağımız bir konudur.

Eğer yeni başlıyorsanız bu kısım çok önemlidir. Bir XSS güvenlik açığı mı bulduğunuzu yoksa basit bir içerik yerleştirmeyle mi uğraştığınızı belirlerken saatlerce tasarruf etmenize yardımcı olabilir. Yansıtılan veya depolanan bir XSS güvenlik açığını tanımlamamıza yardımcı olması için bu 3 adımlı metodolojiyi inceleyelim.

Adım 1: Yansıma

İlk adım, girişinizin uygulamanın yanıtına nereye yansıyacağını belirlemektir. Benzersiz bir dize ekleyin (örneğin intigriti1337test) çeşitli giriş alanlarına, URL parametrelerine, başlıklara veya kullanıcı tarafından kontrol edilebilen diğer veri noktalarına.

Daha sonra, HTTP yanıtında bu dizeyi arayın. Bu, tüm yansıma noktalarının haritasını çıkarmanıza ve girdinizin nerede bittiğini anlamanıza yardımcı olur; bu, istismarın mümkün olup olmadığını ve ne tür bir enjeksiyonla uğraştığınızı belirlemek için çok önemlidir.

Siteler arası komut dosyası çalıştırma (XSS) yansıma noktası aranıyor

Gizli giriş parametrelerini bulma

(Gizli) parametreleri numaralandırmak, XSS dahil her türlü enjeksiyon güvenlik açığını keşfetmenize yardımcı olabilir! Ayrıntılı kılavuzumuzda gizli parametreleri keşfetmenin 5 yolunu özetledik. Bugün makaleyi okuyun.

https://www.intigriti.com/researchers/blog/hacking-tools/finding-hidden-input-parameters

Adım 2: Enjeksiyon

Bir yansıma noktası bulduğunuzda, aşağıdaki gibi basit bir HTML etiketi enjekte ederek mevcut bağlamdan çıkıp çıkamayacağınızı test edin: intigriti1337test ve uygulamanın bunu nasıl ele aldığını gözlemleyin.

JavaScript bağlamındaki yansımalar için (içinde herhangi bir yer)

Veya:

Yukarıda bahsedilen her iki yük de herhangi bir etiketin dışına çıkmaya gerek kalmadan çalışacaktır. Bu, yeni başlayanlar için en kolay senaryodur; JavaScript yürütmeyi destekleyen hemen hemen her HTML etiketini kullanabilirsiniz. , , , or event handler attributes on self-closing tags.

Cross-site scripting (XSS) in HTML page (generic)

HTML attribute (inline HTML)

When your reflection appears inside an HTML attribute (like veya ), you’ll need to break out of the attribute context first before injecting your payload.

You can either close the attribute with a quote, close the entire tag with >ve ardından aşağıdaki gibi yeni bir kötü amaçlı etiket enjekte edin: ">gibi bir olay işleyicisi ekleyerek aynı etikette kalın " onload=alert(1) x=".

Önemli olan, özelliği sarmak için hangi alıntı türünün (tek veya çift) kullanıldığını ve uygulamanın bağlamdan kaçmamızı engelleyebilecek diğer karakterleri filtreleyip filtrelemediğini anlamaktır.

Bir HTML özelliğinde (satır içi HTML) siteler arası komut dosyası oluşturma (XSS)

JavaScript bloğu

Girişiniz içeriye yansıdığında