XXE VULNERABILITY
Bu zafiyet xml dosyalarından-paketlerinden kaynaklandığından dolayı öncelikle xml nedir buna değinelim.
XML NEDİR?
XML (Extensible Markup Language) html ile benzerlik gösterir. Fakat html dışında yapı bakımından tagleri geliştiricilerin oluşturduğu (örneğin xml ile <allsafe>x<allsafe> şeklinde de tag oluşturulabilir.) ve verileri c#, php, python, java gibi birçok dille kullanmamızı sağlayan veri iletim ve veri depolama arayüzü diyebiliriz. Yani örnek vermek gerekirse kullanıcının girdiği bir dizeden php diline girdi gelmesi gerekiyor, XML’in “simplexml_load_string()”
Şeklinde dizeden xml bilgi alınabilir. Ayrıca android uygulamalarında da xml arayüz kullanılmakta.
XXE Injection Nedir?
Xml dosyalarının-kodlarının kullanıldığı bölümlerde araya kendi xml kodlarımızı ekleyerek web sitenin önemli bilgilerini elde etmemiz olarak açıklayabiliriz. XXE zafiyetini incelerken sadece mevcut xml paketlerine bakmamız yeterli olmayabilir bunun yanında dosya yükleme zafiyetini de göz önünde bulundurarak xml uzantılı bir dosya yükleyebilirsek yine bir xxe zafiyetine ulaşmış olacağız.
NASIL TEST EDİLİR?
XML içeren paketlere kendi xml kodumuzu ekleyebiliriz. Url, kullanıcının girdilerini xml paketiyle kaydediyorsa injection uygulayabiliriz. Bir dosya yükleme açığı ile beraber bu zafiyet de tespit edilebilir ya da Out of Band Attack dediğimiz saldırı ile saldırı yapılan web sitede xml kodu çalışır ve bize ait olan bir sunucuya- web sitesine istek attırmış oluruz. PowerShell gibi programlarla log kayıtlarını inceleyerek saldırı yapılan web sitesinden istediğimiz veri elde edilmiş olur. Bu bölümde örneklere başlamadan belirtmek istediğim şey BurpSuite aracında paketlerle oynama yaparken Repeater üzerinden yapacağız. Bunun sebebi bulunan zafiyet web sitesinde direkt olarak gözükmeyebilir. Fakat response bölümünde bize istediğimiz sayfayı gösterebilir yani blind xxe olabilir. Bu yüzden gerçek bir web sitesinde de bu zafiyeti incelerken Repeater özelliğini kullanmaya özen göstermeliyiz.
Repeater kullanımı hakkında kısa bir bilgi:
İstediğimiz paket üzerinde sağ click >send to Repeater veya Ctrl+R yaparsak Repater sayfasına ulaşacağız. (Test aşamasında da kullanımı göreceğiz)
İlk örnekte bWAPP xxe çözeceğiz. Bize gelen pakette xml kodunu kullanarak robots.txt dosyasını görmüş olacağız.
Yukarıdaki sayfada Any bugs? Butonuna tıkladığımızda karşımıza aşağıda işaretlediğim gibi xml kullanıldığını anladığımız bir paket geliyor.
Yukarıdaki Paketi Repeater’a yolluyoruz. Ve aşağıdaki gibi xml kodunu ekliyoruz.
Burada gördüğümüz gibi xml çalışan bir pakette parametrelerin altına xml kodunu yerleştirdik ve <login>bee</login> kodunu <login>&allsafe;</login> yaparak parametreyi çağırmış olduk ve sol üst kısımda bulunan send butonuna tıklıyoruz.
Bu şekilde xxe injection yaparak robots.txt dosyasını görmeyi başardık.
Şimdi de PortSwigger’ın bir labını çözelim. Bu sefer önem taşıyan /etc/passwd dosyasına ulaşmaya çalışacağız.
Karşımıza çıkan bu sayfada BurpSuite ile xml çalıştıran paket bulmaya çalışacağız. Sayfalarda gezmeye ve paketleri incelemeye başlıyoruz.