[Joints 2021] Renge's Blog

ctf, web

Diberikan soal dan sebuah website dengan deskripsi seperti berikut.

Renge’s Blog

Deskripsi
Renge baru mencoba belajar membuat blog dari nol, bantu renge mengecheck keamanan blognya

Pada website yang diberikan terdapat sebuah admin page dengan path /admin yang jika kita buka akan mengembalikan error 403 Access Forbidden. Di saat yang bersamaan juga, page /admin membuat sebuah Cookie token yang berisi JSON Web Token (JWT)

Forbidden

Nah kita dapat mendecode JWT tersebut pada website jwt.io.

JWT.IO

Kita dapat melihat di bagian payload di sebelah kanan, name yang muncul adalah guest1234 dengan akses admin false. Dari situ kita mendapatkan clue bahwa admin page dapat diakses jika user mempunyai akses admin adalah true.

Sebenarnya kita dapat mengubah value dari payload JWT tersebut, tetapi karena JWT tersebut menggunakan algoritma RS256, untuk mengubah valuenya kita harus mempunyai public key dan private key yang digunakan pada JWT tersebut.

Lalu.. bagaimana cara kita mendapatkannya?

Jika kita view-source pada halaman / kita akan mendapatkan clue di mana public key disimpan

view-source

Public key: http://dubwewsub.joints.id:45500/key/public.key

Lalu.. dimana sekarang private key??

Sedikit intermezzo, pada real world case biasanya developer menaruh file-file yang berkaitan satu sama lain pada folder yang sama. Jadi kita dapat melakukan hal tersebut untuk mendapatkan private keynya, kita dapat mengubah file public.key ke private.key dan didapatkan private keynya

Private key: http://dubwewsub.joints.id:45500/key/public.key

Nah, kita dapat menaruh public key dan private key yang kita dapat pada bagian bawah jwt.io tadi. Lalu kita baru bisa mengubah value dari payload JWT.

Ubah JWT

ubah false menjadi true

Copy JWT yang baru lalu lakukan replace cookie pada website

Flag

JOINTS21{H1d3_y0ur_key5}