Zafiyetleri Birleştirmek(Sqli-Xss-Csrf)

Merhabalar, Atış Alanı’nın ilk atışlarına hoş geldiniz 🙂 Sabah dalmışken aklıma gelen bir kaç zafiyetleri birleştirme senaryosundan bahsetmek istiyorum. Bir haber sayfası düşünün arka planda MySql kullanıyor ve sql injection açığı var ayrıca yorumları kaydediyor. Ve javascript kodları çatır çatır çalışıyor (yani xss var). Aynı zamanda da siteyi yazan yazılımcı csrf-token(csrf için bir önlem) den bi haber. Bakıyorsunuz sizin yaptığınız şeyleri başkaları adınıza yapabiliyor(arka planda-bkz:csrf). Senaryomuz şöyle öncelikle normal kullanıcı olarak sorguya pek müdahele edemediğimizi yetkilerimizin kısıtlı olduğunu düşünün. İlk kısımda verileri çekmek istiyoruz ama yetkimiz yok. Ne yapacağız ki ? Sqli+CSRF ‘i kullanmaya çalışacağız öncelikle. Admin amcamız için ufak bir yem ayarlayacağız, admin amcamız bizim yerimize sorguyu çalıştıracak veri kendisine gelecek ama arka planda veriyi kendimize çekeceğiz.

İkinci senaryoda da XSS’i ekleyelim. Sitemizde yorumlar kaydediliyor demiştik. Birde yetkimiz sınırlı demiştik.Birde yetmedi filtrelendiğimizi düşünün ama filtreleme adminde yapılmıyor. Adam admin çünkü daha ne 🙂 Öncelikle sql incection ile sitenin veritabanına yorum eklememiz gerek. örnek vermek gerekirse “http://site.com/page.php?pageid=20 ‘; insert into Table_Name (ad,soyad,yorum) values (ad,soyad,<paylaod>); ” şimdide bunu keylogger olarak kullanmak için ayarlayalım(Teknik olarak yazmayacağım çok uzamasını istemiyorum). Örnek payloadlar için http://www.xss-payloads.com dan payload bulabilirsiniz. Bizde burdaki keylogger kısmından kullandığımızı düşünelim. Ve ilk aşamalarımız tamamdır. Şimdi CSRF ile kendimize yapılan filtreleri kıralım. Admin amcamıza herhangi başka bir xss olan siteye girmesini isteyebilirsiniz. “http://site2.com” da bir stored xss olduğunu düşünün, <iframe width=”0″ height=”0″ src=”http://site.com/page.php?pageid=20 ‘; insert into Table_Name (ad,soyad,yorum) values (ad,soyad,<paylaod>); “> bu şekilde bi yorumu da site2’ye bıraktınız. Sıra admin amcamızın linke tıklamasında. Bundan sonrasını sosyal mühendislik yeteneklerinize bırakıyorum. Sonucu birlikte inceleyelim. Admin linke tıkladığı anda bizim iframe tagımız içindeki url’ye istek yollayıp açmaya çalışacak, width ve height değerleri 0 olduğu için iframe gözükmeyecek ve adminimiz bir şey anlamayacak. Adminin yolladığı istek sonucu sql cümlesi çalışacak ve veritabanına ad,soyad,yorum kolonlarına ad,soyad ve bizim payload’ımız veri olarak eklenecek. Payloadımız bir js koduydu ve sayfa bunu çalıştırabiliyordu demiştik. Veritabanından yorumumuzu çektiği her zaman js kodumun gömülecek ve kodumuz tarayıcı tarafından çalıştırılacak.(NOT: Tarayıcılar kendi girdiğimiz xss’i anlayıp bloklayabilse bile stored xss’i sunucudan gelen herhangi bir kodmuş gibi çalıştıracaktır. Tarayıcı işinide çözmüş olduk :)) Normal bir kullanıcı girdiğinde yorumumuz(kodumuz) orada olacak yani çalışacak. Bu demek oluyor ki giren her kullanıcı için keylogger’ımız bize verileri gönderecek. Sadece keylogger olarakta düşünmeyin Beef’ide işin içine katıp kurban toplamaya başlarsak bir çok işlemi beef ile kolayca yapabiliriz. Veya isterseniz kendi js kodlarınız ile çoğu şeyi yaptırabilmeniz mümkün. Peki ya sizce kimler bu tehlikelerin farkında ?..

Başka atışlarda görüşmek üzere :))

ARAŞTIRMA KONULARI: Sql Injection, sql, javascript, xss, beef framework,csrf