bypass ssl pinning flutter didevice x86_64 (avd)
Bismillah, Kegiatan ini awalnya niat membantu teman di telegram, dia mengalami kesusahan dalam membypass SSL pinning aplikasi berbasis platform flutter. Tujuannya untuk mendapatkan semua API endpoint dari apps tersebut untuk dicari bugnya. Untuk contoh bypass ini menggunakan apk dari sini buatan dari NVISO security.
Setelah diskusi kasusnya ternyata dia menggunakan emulator android AVD manager. untuk tipe emulatornya sendiri pilih yang tidak ada logo google playstore supaya bisa root tanpa harus di rooting.
kemudian klik next, pilih image yang x86_64 seperti dibawah ini
kemudian klik next dan kemudian run avd tersebut. Langkah selanjutnya adalah persiapkan burp dan install cert ke avd tersebut caranya ikuti langkahnya disini . kemudian install frida di laptop anda caranya ikuti disini
pastikan anda sudah menginstall adb. langkah — langkahnya bisa mengikuti tutorial disini
cek versi frida yang sudah terinstall di laptop.
$frida — version
14.2.14
kemudian download frida-server-14.2.14-android_x86_64 disini. dan extract filenya dan ubah namanya menjadi frida-server. Langkah selanjutnya upload file frida-server ke avd di folder /data/local/tmp. Caranya buka terminal
$adb push frida-server /data/local/tmp/
$adb shell
emulator64_x86_64_arm64:/ $su
emulator64_x86_64_arm64:/ #cd /data/local/tmp/
emulator64_x86_64_arm64:/ #chown root:root frida-server
emulator64_x86_64_arm64:/ #chmod 700 frida-server
emulator64_x86_64_arm64:/ #frida-server &
buka tab terminal baru kemudian persiapkan script hook pada frida. Script ini sebenarnya sudah dijelaskan dan siap pakai pada tulisan Jeroen Beckers armv7 dan arm64_v8 namun untuk x86_64 kita belum nemu script hook yang pas.
yuk kita bikin hooknya. caranya awal install ghidra bisa download disini
kemudian ambil file library flutter yang akan kita ubah return value supaya bypass SSL pinning.
$apktool d android.apk
$cd android/lib/x86_64/
$cp libflutter.so ke_folder_untuk_didekompilasi_dg_ghidra
buka aplikasi ghidra kemudian buat project baru, klik kiri File ->New project > Non-shared Project ->Project Name -> tulis flutter
klik pada gambar naga berwarna hijau, setelah terload sempurna klik import file->pilih libflutter.so diatas, kemudian pilih analyze, tunggu untuk semua dianalisa kemudian akan tampil dekompilasi. klik search->for Strings
tulis x509.cc.
Pendekatan untuk mencari fungsi SSL pinning untuk diganti nilai returnnya bisa baca dari Zulfikar horangi
setalah klik search kemudian tunggu sampai tampilan seperti dibawah ini
klik kanan pada location -> copy ->copy current column didapat nilai 001cfe28. tutup menu search kemudian pada menu panel klik Navigation->go to
setelah di klik OK akan menuju lokasi dari alamat diatas, berikut tampilannya
klik pada tulisan xref[10] sehingga akan tampil seperti ini
tugas kita mencari fungsi yang mirip dengan fungsi sebelumnya dari NVISO
dari gambar xref dari lokasi x509.cc no 3 dari bawah kemudian ditarik ke atas fungsi utamanya hasilnya seperti ini
fungsinya sangat mirip dengan gambar fungsi acuan untuk armv7 dan armv8 yaitu fungsi dengan 3 parameter dan alurnyapun mirip.
pada bytes awal kita ambil yaitu 55 41 57 41 56 41 55 41 54 53 48 81 ec f8 00 00 00 c6 02
kita cari hex nya dengan binwalk
binwalk -R “\x55\x41\x57\x41\x56\x41\x55\x41\x54\x53\x48\x81\xec\xf8\x00\x00\x00\xc6\x02” libflutter.so
hasilnya 0x62D055
masukkan menjadi script hook.js isinya sebagai berikut
function hook_ssl_verify_result(address)
{
Interceptor.attach(address, {
onEnter: function(args) {
console.log(“Disabling SSL validation”)
},
onLeave: function(retval)
{
console.log(“Retval: “ + retval)
retval.replace(0x1);
}
});
}function disablePinning(){
var address = Module.findBaseAddress(‘libflutter.so’).add(0x62D055);
hook_ssl_verify_result(address);
}
setTimeout(disablePinning, 1000);
kemudian jalankan frida dengan
$frida -U be.nviso.flutter_app -l hook.js — no-pause
jalankan burp suite dengan mengaktifkan proxy ke ip address dan port misal 192.168.100.17 port 8080 dan aktifkan Support invisible proxying
o yaa kita wajib mengarahkan proxy, kalau untuk device hp kita install proxyDroid tapi karena emulator maka tambahkan dengan iptables
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination BURP_HOST:BURP_PORT
iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination BURP_HOST:BURP_PORT
ganti BURP_HOST dan BURP_POST
klik aplikasi saat diklik HTTPS Request bisa terlihat request ke URL API endpoint
pada tab terminal yang menjalankan frida akan terlihat seperti ini saat aplikasi di klik HTTPS Request
berhasil membypass SSL pinning pada flutter di emulator avd x86_64. semoga membantu mencari bugs2 aplikasi flutter. Alhamdulillah
referensi :