Rumah > Artikel > Operasi dan penyelenggaraan > Cara menjalankan analisis kelemahan APP dompet elektronik
Razer Pay digunakan secara meluas di Singapura dan Malaysia Dalam Tulisan ini, pengarang menggunakan analisis terbalik APP dan penyahpepijatan Frida untuk menemui tandatangan pengguna dalam Razer Pay Ewallet (Tandatangan) menjana kelemahan, yang boleh membaca sejarah sembang daripada pengguna pembayaran Razer, memadamkan akaun bank terikat pengguna dan mencuri maklumat sensitif peribadi pengguna Kerentanan akhirnya menerima ganjaran rasmi hampir $6,000 daripada Razer. Berikut adalah idea penulis tentang penemuan kelemahan, yang hanya boleh digunakan sebagai rujukan untuk pembelajaran postur.
Razer Inc (RΛZΞR) ialah sebuah syarikat peralatan persisian permainan yang diasaskan di Singapura Ia juga dikenali sebagai "Kilang Cahaya Hijau" dan telah mula memasuki pasaran dalam beberapa tahun kebelakangan ini. Dua ibu pejabat Razer terletak di Singapura dan San Diego, Amerika Syarikat. Disenaraikan di Bursa Saham Hong Kong pada November 2017, produknya disasarkan kepada pemain, dan kebanyakan produknya dinamakan sempena haiwan karnivor. Dompet elektronik Razer Pay telah dilancarkan pada 2018. Pada Mei 2020, pengeluaran topeng pembedahan bermula.
Dalam mekanisme kalis gangguan permintaan Razer Pay Ewallet, sebagai tambahan kepada auth_token, tandatangan parameter juga digunakan untuk melakukan pengesahan tandatangan atas permintaan daripada pengguna yang berbeza Setiap satu daripada perkhidmatan GET dan POST permintaan akan disertakan dengan nilai parameter tandatangan yang dikodkan dan ID pengguna, seperti yang ditunjukkan dalam rajah berikut:
Oleh itu, sebarang percubaan untuk mengganggu mana-mana parameter permintaan dan menghantarnya semula akan mengakibatkan Tidak sah, tetapi analisis terbalik APK mendapati bahawa Razer Pay Ewallet mempunyai kelemahan penjanaan tandatangan pengguna (Tandatangan) Digabungkan dengan analisis dan penggunaan Frida, ia secara automatik boleh mengira dan menjana tandatangan pengguna baharu (Tandatangan), yang boleh membawa kepada banyak The. masalah ultra vires (IDOR).
Apabila saya menggunakan Burp untuk menangkap permintaan rangkaian APP Pembayaran Razer, saya mendapati bahawa disebabkan oleh perlindungan tandatangan pengguna (Tandatangan) dalam permintaan, banyak parameter tidak boleh diusik. Saya mula-mula terfikir untuk mendaftarkan pengguna pembayaran Razer yang lain untuk ujian, tetapi dalam senario di mana dua pengguna membuat permintaan yang sama, selepas sesi Payload diganti, pelaksanaannya adalah tidak sah kerana sesi itu mempunyai tandatangan pengguna (Tandatangan). . Minta perlindungan.
Saya memutuskan untuk menganalisis mekanisme penjanaan tandatangan pengguna (Tandatangan Dengan bantuan penyahkompiunan apktool dan Jadx-Gui, saya mendapat pemahaman tahap kod tentang pengendalian APP, dan mendapati bahawa terdapatnya. adalah nama di dalamnya. Ia adalah fungsi kaedah "MD5Encode". Seperti yang anda lihat dari namanya, ia menggunakan algoritma penyulitan MD5. Selepas menggabungkan beberapa muatan parameter, saya memutuskan untuk mencuba untuk menjana tandatangan pengguna (Tandatangan), tetapi tidak kira betapa sukarnya saya mencuba, saya tidak dapat menjana tandatangan pengguna yang betul, saya meneka bahawa parameter mungkin dalam susunan yang salah, atau ia mungkin penyulitan MD5 yang tidak konvensional.
Jangan tinggalkan atau berputus asa, saya menyalin semua kod berkaitan yang terlibat dalam penjanaan tandatangan pengguna, dan kemudian digunakan Alat penyahpepijatan IDE IntelliJ IDEA telah digunakan untuk cuba menjananya Akhirnya, dalam penggunaan kaedah "MD5Encode", saya menggabungkan susunan parameter yang betul Walau bagaimanapun, disebabkan kekeliruan kod, beberapa penalaan halus diperlukan tidak terlalu sukar. Akhir sekali, masukkan nilai parameter yang betul ke dalam badan permintaan yang dijana sebelum ini, dan gunakan kod di atas untuk menjana rentetan tandatangan pengguna (Tandatangan) yang betul!
(Editor menganalisis bahawa dalam proses penjanaan beberapa tandatangan pengguna berikut, token pengguna sendiri digunakan, yang merupakan salah satu parameter. Kemudian melalui kaedah MD5Encode, ID pengguna berbeza yang sepadan dengan berbilang pengguna boleh dijana. Tandatangan pengguna, iaitu, setiap tandatangan pengguna Tandatangan yang diberikan kepada berbilang pengguna oleh pelayan Razer boleh berjaya dijana)
Oleh itu , Perkara pertama yang saya fikirkan adalah untuk menguji kelemahan akses tanpa kebenaran (IDOR) Saya memilih antara muka API/deleteBankAccount yang agak sensitif, iaitu operasi memadam akaun bank yang terikat kepada pengguna , ia telah berjaya dipadamkan Akaun bank yang dipautkan oleh pengguna Razer Pay yang lain!
Pada ketika ini, saya rasa mesti ada antara muka API lain yang dilindungi oleh Tandatangan yang mempunyai isu penggantian IDOR Saya cuba melakukan gelombang ujian menggunakan kaedah di atas, tetapi tidak menemui apa-apa. Selain itu, antara muka API lain menggunakan kaedah pengeliruan kod yang berbeza, yang menyebabkan saya menghabiskan banyak masa untuk menyelidik dan menganalisisnya. Apabila anda tidak tahu, cuba gunakan Frida adalah alat penyahpepijatan yang sangat mudah digunakan dompet kod, anda juga boleh menggunakan kaedah dan fungsi ini untuk menjana tandatangan pengguna baharu yang betul.
Fungsi yang dilaksanakan oleh kod frida.js berikut adalah untuk menjana tandatangan pengguna baharu untuk pengguna semasa menyertai kumpulan sembang yang dibuat oleh pengguna lain:
<br>
<code>// frida.js - Use this for recalculating signature for adding user to other people's chatgroup
<code>console.log("Starting...")<code><code>console.log("Starting...")
<code>Java.perform(function () {<code><code>Java.perform(function () {
<code>var MD5 = Java.use('com.mol.molwallet.view.MD5')<code><code>var MD5 = Java.use('com.mol.molwallet.view.MD5')
<code> MD5.MD5Encode.implementation = fungsi (arg)<code><code>MD5.MD5Encode.implementation = function (arg)
<code>{
<code>console.log("Hooking class MD5 - method MD5Encode")
<code>//Extra step - calculate new signature
var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")<code><code>var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")
<code>console. log ("[+] signature= " + ret_value)<code><code>console.log("[+] signature= " + ret_value)
<code>//Kaedah panggilan dengan hujah asal supaya apl tidak ranap ..<code><code>//Call method with original arguments so app doesn't crash ..
<code>var ret_value = this.MD5Encode(arg) //nilai asal<code><code>var ret_value = this.MD5Encode(arg) //original value
<code>console.log("original ARG : " + arg) <code><code>console.log("original ARG: " + arg)
<code>return ret_value;
<code>}
<code>})
Tetapi untuk menjalankan Frida, akses peringkat akar diperlukan. Nasib baik, saya mendapati kelemahan bahagian pelayan itu membenarkan Penyerang melakukan operasi pada peranti mudah alih yang di-root Berikut ialah arahan untuk memulakan perkhidmatan Frida pada peranti mudah alih:
<br>
$ adb shell<code>$ adb shell
# /data/local/tmp/frida-server<code># /data/local/tmp/frida-server
Selepas itu, dalam tetingkap terminal lain, jalankan arahan berikut:
$ frida -l frida.js -U com.mol.molwallet
Kemudian, pada peranti mudah alih, saya membuka APP Pembayaran Razer, dan sebarang operasi yang memanggil kaedah cangkuk "MD5Encode" akan melaksanakan skrip frida.js di atas, dan akhirnya saya boleh menyasarkan Permintaan kepada pengguna tertentu menjana tandatangan pengguna yang sah dan betul Kes ujian di sini ialah saya boleh menjana tandatangan pengguna untuk diri saya sendiri dan menggunakannya sebagai bukti kelayakan untuk menyertai kumpulan sembang yang dibuat oleh pengguna lain, anda boleh menyertai kumpulan tanpa mengetahuinya, dan kemudian dapatkan kandungan sembang orang lain, atau klik untuk menerima dan mencuri sampul merah yang dihantar oleh orang lain.
Menggunakan kaedah di atas, saya mengalih keluar semua antara muka API lain yang terjejas oleh Signature After ujian, saya mendapati bahawa jumlah sampul merah yang dikongsi oleh pengguna dalam sembang kumpulan boleh diperoleh daripada antara muka API ini Selain itu, rekod pemindahan dan maklumat peribadi pengguna lain boleh diubah suai dan dilihat.
Atas ialah kandungan terperinci Cara menjalankan analisis kelemahan APP dompet elektronik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!