Konsep Penting: XML, DTD, dan XXE
XML (Extensible Markup Language)
XML adalah format yang digunakan untuk mengangkut dan menyimpan data secara terstruktur agar mudah dipahami oleh manusia dan mesin. XML menggunakan tag untuk memberi label dan mengorganisasi data, mirip seperti dokumen dalam folder pada lemari arsip. Contohnya:
<people>
<name>Glitch</name>
<address>Wareville</address>
<email>glitch@wareville.com</email>
<phone>111000</phone>
</people>
Di sini, tag seperti <name> dan <address> menyimpan data terkait, seperti "Glitch" atau "Wareville." XML fleksibel karena pengguna dapat membuat tag sesuai kebutuhan.
DTD (Document Type Definition)
DTD adalah aturan yang menentukan struktur XML. DTD memastikan dokumen XML memiliki elemen dan atribut yang sesuai. Sebagai contoh:
<!DOCTYPE people [
<!ELEMENT people(name, address, email, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
Aturan di atas mendefinisikan bahwa dokumen XML harus memiliki elemen name, address, email, dan phone dengan tipe data teks biasa (#PCDATA).
Entities
Entity dalam XML adalah placeholder yang dapat mereferensikan data besar atau file eksternal. Misalnya:
<!DOCTYPE people [
<!ENTITY ext SYSTEM "http://tryhackme.com/robots.txt">
]>
<people>
<name>Glitch</name>
<address>&ext;</address>
<email>glitch@wareville.com</email>
<phone>111000</phone>
</people>
Dalam contoh ini, entity &ext; mereferensikan data dari sumber eksternal.
XXE (XML External Entity)
XXE adalah serangan yang mengeksploitasi cara parser XML menangani external entity. Ketika aplikasi web memproses file XML yang berisi external entity, parser akan mencoba memuat atau menjalankan sumber daya yang dirujuk oleh entity tersebut. Jika tidak ada sanitasi yang memadai, penyerang dapat mengarahkan entity tersebut ke sumber atau kode berbahaya, menyebabkan aplikasi web berperilaku tidak diinginkan.
Contohnya, penyerang dapat menggunakan entity untuk mengakses file sensitif atau menjalankan perintah berbahaya pada server, yang mengancam keamanan data dan sistem. Oleh karena itu, sanitasi dan validasi data yang ketat sangat penting untuk mencegah serangan XXE.
<!DOCTYPE people[
<!ENTITY thmFile SYSTEM "file:///etc/passwd">
]>
<people>
<name>Glitch</name>
<address>&thmFile;</address>
<email>glitch@wareville.com</email>
<phone>111000</phone>
</people>
Di sini, entity &thmFile; mencoba mengakses file sensitif /etc/passwd. Jika parser XML tidak divalidasi dengan benar, data sensitif tersebut dapat terekspos ke penyerang.