NETCOMP 2.0
Last updated
Last updated
Webfuscate
Web Exploitation
Obfuscation
TMP Storage
Web Exploitation
Race, File Upload, RCE
FunNotes
Web Exploitation
Bad Logic, File Write, Cookie
What is this?
Sebuah challenge website dimana setiap baris kode nya merupakan diobfuscate sehingga tidak mudah dibaca. Pada challenge ini merupakan obfuscate dari kode PHP, dimana nantinya harus dapat membaca kode tersebut dan bisa mendapatkan RCE, dari setiap kode yang telah diobfuscate yaitu melalui argument call.
Saat pertama kali diakses, target website akan memberikan sebuah highlight file dari website tersebut, yaitu sebagai berikut
Dari kode tersebut, coba kita analisa satu persatu bagiannya, pertama bagian condition
Pada kode ini mengecek pada value dari $_GET yang dikirim dari yaitu, $_GET[0] - $_GET[6], jika value tersebut tidak dipenuhi maka akan melakukan highlight source file tersebut.
Selanjutnya adalah bagian kode utama dari source tersebut, yaitu pada bagian berikut
Terdapat variable $Cyto
dan $Lix
dan disini kita belum mengetahui arti dari variable tersebut, namun jika dilihat terdapat kode eval yang melakukan statement pada variable $Cyto
.
Setelah melakukan analisa ternyata hasil dari statement tersebut adalah seperti berikut
Ternyata maksud dari variable $Cyto
adalah seperti diatas, yaitu melakukan operasi statement lagi pada variable $Lix
, kita analisa manual kembali, dan mendapatkan hasil sebagai berikut
Dan hasilnya adalah seperti diatas, dimana ternyata maksud dari source website tersebut sebenarnya adalah membentuk sebuah pola execution dari params $_GET, dimana value ini dapat di kontrol oleh user.
Oke, setelah mengetahui maksud tersebut, langsung saja kita lakukan exploit untuk dapat memenuhi dan membentuk pola execution yang valid.
Berikut, adalah solver dan pola yang ditemukan untuk bisa mendapatkan flag yang ada.
Read Directory
Read flag
netcomp{easy_php_obfuscation_shell}
If i rename the extension of uploaded file, my web can't be hacked, right ?
Vulnerable terdapat ketika melakukan upload file, dimana file akan distore ke dalam temporary folder yang dimana isi dan ekstensi file tidak diubah (sesuai yang diupload), dan pada selisih 1 detik file tersebut akan dipindah ke real directory dengan secure name nya dan lalu temp file akan dihapus, dengan mekanisme tersebut terdapat vulnerability Race Condition untuk bisa mengakses file temporary dan mendapatkan RCE dengan mengupload file PHP.
Diberikan source code dari web tersebut, yaitu sebagai berikut
Jika dilihat dari source code diatas, bisa diketahui terdapat mekanisme temporary store file, dimana dari file yang diupload hanya dirubah namanya, namun ekstensi dan isi filenya tidak diubah
Namun, sebelum temp file tersebut disimpan, akan ada pengecekan terhadap kriteria file yang diupload
Terdapat 4 pengecekan, yaitu
Get image size
Ini dilakukan untuk memastikan yang diupload adalah file gambar yang memiliki width dan height, namun dapat dibypass dengan menggukan header dari file gif GIF89a;
File exists Make sure bahwa file yang diupload belum ada, namun tidak perlu kawatir karena nama file akan mengikuti current unix timestamp
Size file Kriteria file yang diupload tidak boleh lebih dari 500kb
Cek ekstensi Make sure bahwa ekstensi file yang diupload bukanlah php, namun disini masih bisa dibypass dengan mencoba menggunakan common name file yang dapat melakukan eksekusi php, seperti phtml, php5, php7, phar, dll.
Setelah pengecekan berhasil, maka temp file tersebut akan disimpan dan akan menunggu terlebih dahulu 1 detik, lalu memindahkan file tersebut ke real directory dengan mengubah ekstensi file tersebut menjadi jpg, lalu kemudian temp file akan dihapus
Oke, dari sini kemudian kita dapat membuat exploit untuk web tersebut dengan memanfaatkan vulnerability file upload dan race condition, lalu untuk melakukan bypass ekstensi file php dapat menggunakan ekstensi file phtml.
Berikut solver scriptnya
Kemudian jalankan kode solver.py
*jika tidak langsung mendapatkan flag, jalankan lagi hingga mendapatkan flag
netcomp{aku_adalah_kecepatan_dan_kecepatan_adalah_aku}
You can share your notes here with us!
Vulnerability pada challenge ini adalah terdapat broken code yang dibuat, dimana untuk penyimpanan datanya hanya menggunakan sebuah file, seperti penyimpanan user hanya menggunakan file txt dimana karena hal tersebut dan tidak ada filtering pada input maka user dapat melakukan abuse input untuk mendapatkan role yang diinginkan. Lainnya yaitu terdapat insecure cookie, dimana cookie yang dapat di kontrol oleh user dapat menyebabkan terjadinya arbitrary file write, untuk dimanfaatkan user mendapatkan RCE dari file yang di kontrol.
Pada website ini merupakan algoritma MVC, dimana tiap - tiap bagian dari logic akan disimpan sesuai peruntukkannya, untuk melihat route yang terdapat pada folder Routes dan file index.php
Pertama terdapat vulnerability pada saat melakukan registrasi user, yaitu pada contoller HomeController dan pada action function goSignup
Pada action tersebut memanggil model User dan melakukan save, berikut implementasi kode save tersebut
Tidak ada sanitasi apapun, ini dapat dilakukan untuk bisa melakukan abusing value yang disimpan, misal untuk bisa mengubah role menjadi mod, value dari password bisa diisikan dengan inipassword:mod:
dengan hal tersebut maka role yang digunakan adalah mod.
Setelah melakukan analisa yang cukup panjang, ternyata ada hal menarik pada fiutr export notes
Ternyata pada saat melakukan export terdapat pengecekan cache dari cookie user yaitu pada key lastExport. Dan jika dilihat pada bagian yang lain terdapat kode
Dimana kode tersebut melakukan penyimpanan file di /var/www/html/public
dan nama file yang disimpan sesuai dengan $token->filepath
lalu isi filenya adalah value json dari $outputNotes
dimana ini jika diekstrak dari value $token->notes
.
Karena cookie dapat dikontrol oleh user, sepertinya ini bisa menjadi vulnerability insecure cookie. Namun sebelumnya value cookie lastExport akan digunakan untuk mengambil value dari function get_progress. Oke mari telusuri function tersebut
Bisa dilihat bahwa return dari function tersebut ternyata tidak mengubah value $filepath
menjadi value lain, namun hanya saja terdapat penyesuaian value notes sesuai sesuai dengan value $token
apakah sudah ada di cache progress. Tentu hal itu tidak masalah bisa kita lakukan request dengan beberapa kali dengan value notes yang mengandung arbitrary code php untuk melakukan arbitrary code execution
Lalu jika dilihat pada bagian lain, kita bisa mengetahui bagaiman struktur cookie yang harus disimpan, yaitu ada pada kode berikut
Dari situ bisa mendapatkan acuan bagaimana cara untuk menyimpan value kode nya.
Oke, saatnya melakukan exploit, yaitu dengan mengisi value filepath dengan ekstensi file php, lalu untuk token nya bisa random, ini hanya digunakan untuk melakukan cache progressnya, namun tentu saja harus dengan mengirimkan note yang isinya adalah untuk melakukan arbitrary code execution.
Setelah berhasil, kita bisa akses lokasi file yang ada sesuai dengan value filepath yang diberikan.
Berikut automation script solver dari challenge ini
Kode tersebut harus dijalankan minimal 2 kali jika tidak langsung keluar flag, dengan value token yang sebelumnya tidak ada pada cache websitenya, karena harus mendapatkan cache terlebih dahulu. Berikut hasilnya ketika dijalankan
netcomp{playing_note_is_fun_r1ght?!?}