“xssFinder” XSS Tespit Aracı

Merhaba,

Geçenlerde Linux Yaz Kampı‘nda neler yaptığımızdan kısaca bahsetmiştim. Ayrıca “xssFinder” adında ufak bir tool da yazmıştık. Bu yazıda xssFinder’dan bahsedeceğim.

xssFinder; amatörce 2 saatte yazılmış, bir sistemdeki XSS zafiyetlerini tespit edebilmenizi sağlayan tool. xssFinder‘in aynı veya daha fazlasını yapabilecek, yok yetenekli toollar bolca var. Amacımız ortaya çok iyi birşey çıkarmak değil. Linux Yaz Kampı sırasında tüm eğitimi “tool’u kullanan olma tool’u yazan ol” mottosu ile geçirdiğimizden 2 saatte böyle ufak bir tool yazdım. Yazmışken yayınlamak istedim.

Bu blogpost u yazmamın sebebi ise xssFinder’ın arkaplanda yürüttüğü adımlar. İncelediğim kadarı ile XSS üzerine yazılan toollar payloadların olduğu bir wordlist üzerinden brute-force ile birşeyler elde etmeye çalışıyor. Ne kadar sağlıklı? Bence çok sağlıksız. Bizde burada wordlist yerine kritik karakterlerin kontrolünü yapan ve eğer sonuç pozitif ise “XSS Bulduk!” değil “XSS Olma İhtimali Yüksek!” gibi sonuç üreten bir tool yazdım.

Adım 1: Sistemdeki Tüm Linklerin Crawling Edilmesi

Bu adım için recursive bir fonksiyon yazdım. Linkleri crawl ederken dışarıya olan linkleri de gidip crawl etmesin diye host tabanlı crawl edecek bir kod yazdım. Sadece aynı hosttaki linkleri crawl ediyor.

Adım 2: Crawl Edilen Sayfalardaki Formların Tespiti

Bu adım için PHP ile yazılmış “simple_html_dom” librarysini kullandım. Aslında regex ile de halledilebilir ancak simple_html_dom, regex’e göre bu işlemi daha rahat halledebiliyor. Aynı şekilde formların action’ı, method’u içindeki inputlar vs hepsi için ayrı ayrı regex yazmaktansa simple_html_dom ile halletmek daha kolay geldi.

(Aslında benim kafamda regex kullanmak vardı ama zeki katılımcılardan Ahmet Erşin simple_html_dom kullanmakta ısrar etti. İyiki etmiş.)

Adım 3: Kritik Karakterler

XSS saldırılarında (çok spesifik saldırılar hariç) 4 temel kritik karakter vardır;

  • ‘ (tek tırnak)
  • ” (çift tırnak)
  • < (küçüktür)
  • > (büyüktür)

Eğer bu 4 karakterden bazıları filtrelenmemiş ise yüksek ihtimal ile XSS saldırısına maruz kalınıyordur. E tamam yapacağımız işlem belli; bir request te bulunacağız. Gelen response da bu 4 karakterden bazıları var ise sonucu bildireceğiz. E ama bu 4 karakter HTML’in de en ana 4 karakteri. Sayfa içerisinde onlarca, yüzlerce bu karakterlerden olabilir. xssFinder’ın false-positive vermesini istemeyiz.

Adım 4: Karakterlere Prefix Eklenmesi

Bizim requestimizde gönderdiğimiz karakterin; sayfanın kendisinin ürettiği karakter olup olmadığını anlamak için karakterlere prefix eklemeye karar verdik. Böylede response içerisinde prefixli olarak arama yaparken çıktıdaki karakterin bizim gönderdiğimiz karakter mi yoksa sayfanın kendi ürettiği bir karakter mi olu olmadığını analiz edebilmiş olacaktık.

Adım 5: Atak

Yukarıdaki 4 adım sonucunda elde edilen formlara; tüm inputlara payloadımızı yerleştirerek istekte bulunuyoruz. Dönen response içerisinde payload analizi yaparak hangi karakterlerin encode edilip edilmediğini tespit ediyoruz. Eğer ktirik karakterlerden herhangi biri veya birileri encode edilmemiş ise “XSS Olabilir” diye çıktı basıyoruz.

 

xssFinder’ın nasıl kullanılacağı ve kodları GitHub’da mevcut. Aşağıdaki GitHub repo linkinden xssFinder’a ulaşabilirsiniz.

GitHub reposu şu: https://github.com/Om3rCitak/xssFinder/

Pull-requestlerinizi eksik etmeyin.

Görüşmek üzere!

xssFinder

Comments on this post

  1. Umut

    Merhaba,
    Bir siteyenin index sayfasını değiştirmek (hani meşur hacked yazısını yazmak) için sitede öncelikle hangi açıkları aramamız gerek ve/veya hangi açıklar bu işi yapmamızı kolaylaştırır/olanak sağlar?

Leave a Reply

Your email address will not be published. Required fields are marked *

Trackbacks and Pinbacks

No trackbacks.

TrackBack URL