Base64 Encode Dosya Yükleme Fonksiyonunda Stored XSS

Merhabalar, bu yazımda gerçekleştirdiğim sızma testinde Base64 Encode ile avatar yükleme fonksiyonunda bulduğum Stored XSS zafiyetinin exploit (sömürme) adımlarını kısaca anlatmaya çalışacağım.

Web uygulaması içerisinde bulunan avatar yükleme fonksiyonunu test ederken sunucuya giden istekleri incelediğimde, avatar olarak yüklemek istenilen fotoğraf dosyasının Base64 ile encode edildikten sonra web sunucusuna iletildiğini ve web sunucusunun yüklenen bu fotoğrafı hangi URL’e yazdığını HTTP yanıtlarında gösterdiğini gözlemledim.

Bu fonksiyonda Base64 encode bir payload ile XSS tetiklemek mümkün olabilir mi diye düşünerek konu üzerine biraz araştırma yaptım. Sonrasında bir .txt dosyası içerisine aşağıdaki XSS payloadını yazarak bu dosyayı .png formatında olacak şekilde kayıt ettim.

<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg onload="alert(document.cookie)" xmlns="http://www.w3.org/2000/svg"><defs><font id="x"><font-face font-family="y"/></font></defs></svg>

Sonrasında Image to Base64 işlemini gerçekleştirecek web uygulamasını kullanarak içerisinde XSS payloadı yazan test.png dosyasını Base64 formatına dönüştürdüm.

Sonrasında normal bir fotoğraf dosyası yüklenirken web sunucusuna giden isteği BurpSuite ile keserek aslında olması gereken Base64 kodunu, içerisinde XSS payloadı yazan test.png dosyasının Base64 hali ile değiştirdikten sonra HTTP isteğinin bozulmaması için aşağıdaki ekran görüntüsünde de gözüktüğü üzere Key karakterleri URL-Encode haline getirmek amacı ile değiştirdiğim kod parçacığının tamamını seçerek ” Convert Selection > URL > URL-encode key characters ” yaptım ve isteği web sunucusuna ilettim. Web sunucusunun yanıtında da gözüktüğü üzere evet dosya sorunsuz olarak bir URL’e yüklenmiş.

Sonrasında web sunucusunun oluşturduğu URL olan https://x.net/logo/0690c006ee47b32456ba02f690298573.jpg adresine baktığımızda istediğimiz XSS tetiklenmiş (:

Ayrıca yaptığım bir kaç kontrol sonrasında tetiklemiş olduğum XSS sebebiyle, https://x.net/logo/ URL’inde nereye erişmek istersem yani /logo/ sonrasında ne yazarsam yazayım artık XSS’in tetiklendiğini gözlemledim.

Yani /logo/ URL’inden sonra yazdığım herhangi bir değer ile de normalde sunucuda böyle bir veri veya URL var olmasada XSS’in tetiklendiğini yani bu XSS’in aslında Stored XSS olduğunu anladım.

0x040

Yorum bırakın

WordPress.com'da bir web sitesi veya blog oluşturun

Yukarı ↑