Mencari Encryption Key dengan bantuan ChatGPT

Aminudin
5 min readSep 19, 2023

--

Pernah ga kalian ketika mau melakukan pentesting pada website dan coba melakukan sniffing http dan ketika coba melakukan request sesuatu, contoh saja POST dan dibodynya ternyata datanya ter encrypt seperti dibawah ini :

kalau kalian liat mirip seperti base64 tapi ketika kalian coba decode muncul huruf huruf aneh seperti dibawah

Kemungkinan base64 nya itu di encrypt pakai AES dan tidak bisa di decrypt kecuali kalian punya keynya atau Private Key nya.

Pada tulisan kali ini saya akan menulis bagaimana cara saya menemukan Private Key pada sebuah website yang ketika melakukan request HTTP payload nya di encrypt.

Pertama kalian check dulu source webnya, dengan cara inspect element lalu ke sources lalu di folder map website kalian coba search salah satu endpointnya misal “get-redacted” atau apapun yang menandakan request dari ke API tersebut entah headersnya atau apapun perhatikan hal kecil misal cari dengan kata kunc “get-” saja dll jadi harus sabar kalau misal sudah ketemu mari lanjutkan

kalau ga ketemu coba cari saja sampai ketemu karena beberapa website ada yang obfuscated nya sampe stringpun tidak bisa dibaca , kalau seperti diatas masih bisa terbaca kaya headersnya, methodnya itu masih keliatan atau kita masih maksud atau masih tau itu apa.

Nah sekarang saat nya kita cari dimana si letak encryptnya ? karena kalau diliat dari ss diatas kita tahu bahwa variable M itu berisi object untuk payload, lalu ada variable g yang karakteristiknya mirip dengan sesuatu yang kita temui pada saat sniffing tadi yaitu berupa object dan memiliki property data, tapi… kalau kalian liat di script diatas kita hanya melihat bahwa si property data ini valuenya adalah hasil JSON.stringify dari variable M, tidak sesuai dengan payload yang kita temukan diawal yaitu berupa kata acak didalam string di property data.

Lalu setelah kalian perhatikan data data dibawah ini hanya berupa variable dan tidak ada aksi apapun

 var w = "POST" // method
, V = "https://redacted.com/get-redacted" // endpoint
, R = {}
, I = {
"headers-redacted": mt("headers-redacted") // headers
}
, M = {
redacted1: "redacted",
redacted2: f."redacted",
redacted3: f."redacted".toLowerCase(),
redacted4: f."redacted",
redacted5: redacted(),
redacted6: redacted()
} // object data
, g = {
data: JSON.stringify(M) // payload M
};

Dan variable variable diatas dikirim ke function Se()

yang dimana berarti request tidak dilakukan di fungsi diatas tapi di fungsi si Se() ini, kemungkinan kita bisa tahu keynya dari dalam fungsi tersebut, lanjut mari kita cari isi dari function Se() ini.

Setelah lama dicari cari akhirnya saya tau bahwa si fungsi Se ini di import dari script lain

pantes saya keliling keliling di script Form-redacted.js tidak ketemu ketemu, ok sekarang lanjut kita hunting fungsi Se() ini di file ./api-redacted.js

Akhirnya ketemu! Tapi….. kalau di liat liat si function Se() ini tidak menerima parameter apapun ya ? jadi dari sini kita tahu bahwa penamaan fungsinya keacak dan di script “api-redacted.js” ini nama fungsinya bukan Se().

Jadi, lanjut kita cari tapi bukan dengan nama fungsi yang sama tapi dengan identifikasi seperti banyaknya parameter yang diterima dan filling.

Lalu setelah sekian purnama saya mencari scroll sampe bawah sampe bawah saya menemukan juga yang menurut saya itu adalah fungsinya

Fungsi tersebut bernama et() setelah saya hitung dia menerima 6 Parameter sama dengan dari script “From-redacted.js” yang mengirim ke fungsi Se() dengan jumlah 6 Parameter, dan diperkuat juga dimana variable O ada kondisi pengecekan bahwa method yang dikirim itu adalah GET / POST

Bisa kalian check diatas, variable M yang isinya berupa METHOD dikirim ke fungsi Se(_, M….., di parameter kedua lalu di fungsi et(D, O…. dikirim ke parameter kedua dengan penulisan ulang yaitu O lalu didalem fungsi et() terdapat perkondisian yang merujuk bahwa value si O itu bisa berupa “GET” maupun “POST”.

Jadi bisa diambil kesimpulan bahwa fungsi et() ini adalah fungsi yang kita cari. Sekarang, mali lanjut ke hunting secret key / cara enkripsi dari si payload atau kalau sesuai fungsi Se() itu berada di parameter terakhir atau parameter ke 6

Se(_,_,_,_,_, {
data: JSON.stringify(K)
}

Lalu kita tau bahwa si parameter C ini berisi object dan di looping menggunakan for in lalu valuenya dimasukan kedalam fungsi Ve() lalu kita cari fungsi Ve() tersebut

Yaps ketemu dan disini kemungkinan adalah fungsi dari decrypt dan encryptnya, lalu disini kita gunakan chatgpt biar tau jenis encryptnya dan modules apa yang digunakan jadi langsung buatkan perintah seperti dibawah ini

Dan taraa….

Chatgpt membalas dan sekarang kita tau bahwa modules yang digunakan adalah crypto-js lalu kita juga tau kedua fungsi tersebut memiliki dua parameter yang pertama berisi plaintext / text yang sudah ter enkripsi lalu di kedua parameter yaitu keynya yang mana keynya adalah secret keynya.

Lanjut kita hunting secret keynya karena kita sudah melangkah lebih dekat, lalu kalian check penggunaan fungsi rt() dan Ve() tadi lalu kalian lihat diparameter kedua

disini kita bisa tahu bahwa keynya berada di variable ge, sekarang tugas kita adalah mencari dimana letak variable ge tersebut dan isi dari variable ge tersebut

dan boom kita bisa tau bahwa variable ge berisi kombinasi dari variable ye dan Be, lalu kalian copy semua dari variable le sampe ge lalu satukan dengan fungsi rt dan Ve lalu tanya chatgpt lagi

yaps lalu chatgpt membalas lagi dan sudah ditahap akhir langsung kita test saja scriptnya

dan booom!! success!

Pesan : untuk para web developer pastikan obfuscate nya diperkuat lagi dan jangan menyimpan hal hal sensitive di client

Terimakasih banyak semuanya!

--

--