[Hacker101 CTF] – TempImage

Difficulty: Moderate

Flag : 2 (4/flag)

Note: disarankan untuk mempelajari curl dan burp suite terlebih dahulu.

Diberikan sebuah website upload image

Dengan hint untuk flag pertama

Dari hint yang diberikan, saya mencoba mengupload gambar capture soal ini.

Ternyata gambar yang saya upload akan di run oleh website tersebut dan filename yang saya upload berubah menjadi terakses ke <url soal>/files/*suatu enkripsi*_<namafile>.png. Kemudian, saya mencoba untuk melakukan upload tanpa memilih file apapun (no file chosen).

Ternyata keluar error yang menyatakan bahwa file yang kita upload akan di run oleh /app/doUpload.php(cannot be empty). Selain itu, dari error tersebut saya melihat bagian network untuk melihat method yang dilakukan php pada web tersebut. Ternyata method yang digunakan adalah method POST dan pada bagian bawah network tersebut terdapat 2 variable (file dan filename).

Dari sini, saya mencoba menggunakan curl untuk method POST (–data) dan dari hint mengganti path. Saya mengganti file name dengan ../ untuk mengubah path ke 1 directory lebih tinggi(https://phpdelusions.net/articles/paths). Untuk pengisian variable, ketika saya mengupload pertama kali(foto soal) output url yang keluar adalah <sesuatu> + filename yang diupload, sehingga pada bagian file saya menginput <sesuatu> dan pada bagian filename saya menginput ../ (untuk mengubah path). Payload saya menjadi curl –data “file=f2d755e42e7d5b19653f9d760a2082ab_&filename=../” http://35.190.155.168/66f5b07bcb/doUpload.php. Keluar flag pertama yang kita cari.

Flag 1 = ^FLAG^733efce8e28569dfb25dccb83b85a3202d7cfb6735a568e61106d23aad4acf19$FLAG$

Untuk flag ke 2 kembali kita lihat hint yang diberikan oleh hacker101.

Note: disarankan untuk membaca PNG chunks terlebih dahulu.

PNG chunks : https://www.w3.org/TR/PNG-Chunks.html

untuk flag kedua ini saya membutuhkan aplikasi burp suite untuk membantu saya mengubah isi PNG saya menjadi sebuah payload. Saya melakukan intercept dengan burp suite ketika mengupload file Soal.png(file png seperti diawal flag 1).

Dari tulisan merah diatas kita hanya membutuhkan header agar file yang kita kirimkan tetap dalam bentuk PNG, setelah itu kita memberikan payload <?php system(“cat *”);?>. Mengapa menggunakan php? Karena pada soal ini, kita membutuhkan RCE pada server sehingga dengan menggunakan php kita dapat menggunakan fungsi system(). Sehingga, file PNG kita sekarang menjadi seperti ini.

Karena kita menggunakan payload php, filename yang kita masukkan juga kita ubah menjadi .php agar kode php kita dapat dijalankan. Dengan menggunakan burp suite, dengan mudahnya kita dapat mempertahankan identifikasi server terhadap file yang kita berikan. Walaupun kita mengubah filename menjadi .php tetapi file tersebut tetap dibaca sebagai PNG karena header file tersebut masih dalam bentuk PNG. Mengapa filename kita yang awalnya ../ menjadi ../../? Karena pada soal ini kita ingin menjalankan kode php kita pada server. Sehingga, seperti yang kita tahu pada error ketika kita memberikan file kosong(/app/doUpload.php) kita tahu bahwa kita harus menaikkin 2 directory diatas kita. Setelah itu, kita melakukan action repeater di burp suite kita untuk mengirimkan payload kita ke website tersebut.

Kita mendapatkan response 302 Found dari website. Sehingga, kita melakukan redirect dengan “follow redirection”.

Payload yang kita berikan berhasil dijalankan oleh server. Dari sini, kita hanya perlu melakukan scroll sedikit untuk menemukan flag pada soal ini.

Flag 2 = ^FLAG^92a87503e9fffaa46bf0d6e07c4d21e587cf77620c7e026ff8a49b7ab7dcb0d0$FLAG$

Leave a Reply

Your email address will not be published. Required fields are marked *