XXL-JOB ialah platform penjadualan tugas teragih yang ringan Matlamat reka bentuk terasnya ialah pembangunan pesat, pembelajaran mudah, ringan dan pengembangan yang mudah. Kod sumber kini dibuka dan disambungkan ke barisan produk dalam talian banyak syarikat, sedia untuk digunakan di luar kotak.
Isu utama kerentanan ini ialah mod GLUE. XXL-JOB menyokong tugasan berbilang bahasa dan skrip melalui "mod GLUE". Ciri tugasan mod ini adalah seperti berikut:
● Sokongan berbilang bahasa: menyokong Java, Shell, Python, NodeJS, PHP, PowerShell...dsb.
● IDE Web: Tugasan dikekalkan di pusat penghantaran dalam bentuk kod sumber, dan pembangunan dan penyelenggaraan dalam talian disokong melalui IDE Web.
● Kesan dinamik: Kod tugas yang dibangunkan oleh pengguna dalam talian melalui IDE Web ditolak ke pelaksana dari jauh dan dimuatkan dalam masa nyata untuk pelaksanaan.
Seperti yang ditunjukkan dalam rajah di atas, jika anda menulis kod serangan dalam kod tugas mod GLUE dan menolaknya ke pelaksana untuk pelaksanaan, anda boleh menyebabkan serangan jauh .
[Perihalan Kerentanan]
Antara muka Restful API XXL-JOB atau antara muka RPC tidak dikonfigurasikan dengan langkah pengesahan Penyerang tanpa kebenaran boleh membina permintaan berniat jahat dan menyebabkan pelaksanaan jauh
[Penilaian kerentanan]
Risiko tinggi
[Versi terjejas]
XXL-JOB < ;= 2.2.0
Idea keseluruhan: Muat turun kod sumber->Kebergantungan pemasangan Maven->Konfigurasi dan penggunaan "Pusat Penjadualan"- >Konfigurasikan dan gunakan "projek pelaksana" ->Selesaikan penggunaan
Persekitaran pembangunan setempat: Java8+Maven3.6
1 ://github.com/xuxueli/xxl-job/releases/tag/v2.2.0
2. Maven memuat turun dependensi yang diperlukanIdea membuka kod sumber yang dinyahmampat dan secara automatik memasang kebergantungan yang berkaitan dalam pom Anda juga boleh menggunakan perintah maven dalam terminal untuk memuat turun kebergantungan yang diperlukan
3 >Lokasi skrip SQL permulaan pangkalan data penjadualan ialah:
/xxl-job/doc/db/tables_xxl_job.sqlOleh kerana Mysql tempatan tidak dipasang, jadi gunakan docker untuk memasangnya.
a) docker pull mysql:5.7b) sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7Gunakan navicat untuk menyambung ke pangkalan dataAnda boleh klik pada sudut kiri bawah untuk melengkapkan ujian sambungan. Klik kanan pangkalan data yang diimport, pilih Jalankan fail SQL, dan klik Mula untuk melengkapkan import pangkalan data.
4 Konfigurasikan dan gunakan "Pusat Penjadualan" Projek pusat penjadualan: xxl-job-admin<.> Fungsi: Pengurusan bersatu penjadualan tugas pada platform penjadualan tugas, bertanggungjawab untuk mencetuskan pelaksanaan penjadualan dan menyediakan platform pengurusan tugas. Anda boleh mengubah suai konfigurasi pangkalan data dalam application.properties mengikut situasi sebenar
Laksanakan XxlJobAdminApplication untuk memulakan pusat penghantaranKami menggunakan yang disyorkan Springboot untuk menguruskan pelaksanaan Semak fail konfigurasi dengan
dan cari parameter xxl.job.executor.logpath Kami boleh mencipta atau mengubah suai laluan untuk mengelakkan masalah dengan pelaksanaan program. Laluan data tidak wujud dalam sistem Mac baharu didapati bahawa menggunakan mkdir untuk mencipta laluan ini adalah kerana Sip dimatikan dalam sistem Mac. Jalankan XxlJobExecutorApplication untuk memulakan pelaksana. Buka //localhost:8080/ dalam penyemak imbas dan lihat antara muka log masuk Pastikan permulaan akaun log masuk lalai ialah "admin/123456"
Nota:
Adalah disyorkan untuk mencipta /data/applogs/xxl-job dahulu, dan menggunakan laluan ini untuk banyak fail konfigurasi dalam programUbah suai konfigurasi pangkalan data pusat penghantaran
Linux/Unix boleh menggunakan lsof untuk menyemak penghunian port , untuk mengelakkan kegagalan permulaan
Pusat penghantaran dan pelaksana boleh digunakan secara berasingan mengikut situasi sebenar
Lihat dokumentasi rasmi dan anda boleh melihat tugasan. dicetuskan dalam huraian executor RESTful API Interface
Mod jalankan tugas adalah seperti berikut
Lihat kod sumber GulueTypeEnum
Jadi kami menggunakan Burpsuite untuk membina POC kami
Petua:
Apabila mengubah suai glueSource, jika pelaksanaan tidak berkuat kuasa, sila ubah suai jobId
Apabila memulakan semula projek, didapati port bermula secara tidak normal , sila tutup BurpSuite
Memandangkan versi rasmi XXL-JOB disertakan dengan komponen pengesahan asli, ia boleh memastikan keselamatan komunikasi asas sistem apabila dihidupkan. Pengarang XXL-JOB menyatakan bahawa dalam keadaan biasa, komunikasi asas antara pusat penghantaran dan pelaksana adalah selamat, dan tiada kelemahan arahan jauh. Walau bagaimanapun, jika token akses tidak didayakan pada pelaksana, permintaan penjadualan haram tidak boleh dikenal pasti dan dipintas. Peminta hasad boleh menggunakan mod GLUE untuk menolak kod serangan hasad untuk mencapai serangan jauh. Oleh itu, pengarang XXL-JOB percaya bahawa masalah ini bukan sifat "kelemahan" Versi laman web rasmi menyediakan komponen pengesahan, yang boleh dihidupkan untuk perlindungan.
1 Hidupkan komponen pengesahan yang disertakan dengan XXL-JOB: Cari "xxl.job.accessToken" dalam dokumentasi rasmi dan. ikut arahan dokumentasi Hanya dayakannya.
2. Sekatan akses port: Dengan mengkonfigurasi sekatan kumpulan keselamatan, hanya IP tertentu boleh mengakses port
Atas ialah kandungan terperinci Cara menghasilkan semula kerentanan RCE terhadap akses tanpa kebenaran kepada antara muka API XXL-JOB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!