Tekil Mesaj gösterimi
Alt 23.06.2016, 01:40   #1 (permalink)
-X-
Frav frivlbehz.

Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
Standart Üşengeç Geliştiricileri Avlamak | ibProArcade XSS Vulnerability

Üşengeç Geliştiricileri Avlamak | ibProArcade XSS Vulnerability


Merhabalar bugünkü konum bir php projesi yazarken gözden kaçan ya da tembellik sonucunda ihmal edilmiş bir kodun sebep olduğu XSS açığı olacak. Bulduğum açık bir Stored XSS. Kısaca veritabanına kayıt oluyor ve sayfa her yüklendiğinde tarayıcı tarafında filtre yoksa çalışıyor. Bunun için otomatize araçlar kullanmak yukarda bahsettiğim tembelliğe kaçar ve eğer araştırılacak açık bir 0-day ise otomatize araçlar çoğu zaman tespit edemez. Bu durumda açık yok der ve bu bir false information'dır.

Araçlar;

Sanal makine
vBulletin yazılımı
ibProArcade v2.7.3+
Tamper Data

Av Zamanı!

Oyun eklerken, Game Name alanına XSS Vektörlerinden birini yazınca veritabanında ne adla kayıt olduğunu öğrenmek için Tamper Data eklentisini kullanabiliriz. Pek tabiki Burp Suite, OWASP ZAP gibi proxy araçlar da kullanabilirsiniz.



Artık belirtilen inputun veritabanına 'gtitle' olarak yazılacağını biliyoruz.

Oyun ekleme verisinin gönderilirken /admincp/arcade.php?do=do_add işlemi ile gerçekleştiğini biliyoruz. İlgili dosyanın belirtilen parametresine bakalım;



Yukarıdaki satırlar dikkat çekmektedir. "2293." satıra baktığımızda herhangi bir filtreleme olmadığını, 'gtitle' alanına ne girilmişse aynı şekilde veritabanına eklendiği açık. Bu durumda oyun her çağırıldığında XSS atağına maruz kalınacaktır.

Kullanıcı etkileşimi;




Admin etkileşimi;



Booom XSS'ed.

Game Name alanına eklenen vektör sonucu hem oyuncuların hem de admin alanının bu ataktan etkilendiğini görüyoruz.

Şimdi bir de veritabanına bakalım.

Kod:
mysql > select gtitle from games_list;

sorgusu ile games_list tablosundaki gtitle kolonunu görüyoruz.



Görüldüğü üzere gtitle kolonunda vektörümüz gönderildiği gibi yazılmış.

Ayrıca açık tetiklendikten sonra sayfanın kaynak koduna bakacak olursak özel karakterlerin filtreden geçmeden yazıldığını da görebiliriz.



Fix

PHP- Kodu:
$checks = array(     'gtitle'       => $IN['gtitle'], // Güvenli olmayan kod.

$checks = array(     'gtitle'       => htmlspecialchars($IN['gtitle']), // Güvenli kod. 

şeklinde değiştirilirse veritabanına yazılırken karakterler filtrelenecek ve veritabanından çağırılma durumunda XSS atağı önlenecektir.



Veritabanına tekrar bakacak olursak;



Yukarıdaki ekran görüntüsünde açığın kapatıldıktan sonra veritabanına yeni vektör yazılırken karakterlerin filtrelendiğini görebilirsiniz. Ayrıca sayfanın kaynak kodunda da yine filtrelemenin olduğu görülecektir. 0-day'iniz hayırlı olsun



Admin authentication isteyen bir işlem olduğu için gerçek hayat senaryosunda site sahibi tarafından kötü amaçlı olmadığı sürece kullanılabilecek bir atak olmadığını belirtmek isterim.

Exploit etmek için hazırlanan dosyanın admin kullanıcısına tıklatılması durumunda bile CSRF korumasının ilgili kodları önleyeceğini bilmek gerek. Vektör olarak zararlı js kodları kullanılacak olursa durumun ciddiyeti artacaktır.

Kullandığınız yazılım ne kadar güvenli olursa olsun kurduğunuz eklentiler sistemi tehlikeye sokabilir. ibProArcade'in son sürümünde bulmuş olduğum bu 0-day ( artık değil ) bir önceki sürümde de mevcuttur. Daha önceki sürümleri kontrol etmedim. Güvenli günler dilerim.

g0ts_on_Security

__________________
life over comp. sci.
-X- isimli Üye şimdilik offline konumundadır Alıntı ile Cevapla