[Petir Challenge] – babyphp

Pada soal ini diberikan sebuah web yang memberikan source codenya.

 

Terlihat pada soal menerima beberapa input yaitu “kunci1” dan “kunci2” dengan method GET.

Soal terdiri dari beberapa pengecekan( Validasi ).

Validasi pertama adalah mengecek, apakah salah satu dari syarat benar ( menggunakan OR ). apakah angka dari variable $k1 sama dengan $hoho ( 1337 ) [ karena menggunakan fungsi intval, yang dapat mengambil integer didalam string ][ strict comparison ] atau $k1 benar-benar sama dengan $hoho ( 1337 )[ strict comparison ].

 

Validasi kedua adalah panjang string dari $k2 sama dengan $hehe ( 42 ). Selanjutnya akan divalidasi kembali apakahstring tersebut cocok dengan regex yg sudah ditentukan dan apakah variable $k2 bukanlah integer/angka.

 

Sebelumnya telah ada clue bahwa soal ini memiliki jebakan. setelah diteliti menggunakan regex online[ https://regex101.com ], bahwa dollar pada regex bukanlah dollar yang normal [ dalam regex, dollar artinya wajib diakhiri oleh karakter sebelumnya ], tetapi sebuah character khusus.

 

Sehingga regex hanya wajib diawali oleh angka dan selanjutnya boleh karakter.

selanjutnya akan divalidasi apakah $k2 sama dengan $hoho ( 1337 )[ loose comparison ]. Jika semua validasi berhasil dilewati, maka soal dapat menerima input hoho sebagai variable $hoho.

 

Selanjutnya, variable $k1 dan $k2 ditukar isinya( swap ).

Validasi ketiga adalah mengecek apakah hasil dari substring adalah sama [ strict comparisson ] dengan nilai sha dari $hoho. Disini nilai $hoho adalah nilai dari input kita sebelumnya. Kita dapat membuat validasi ini menjadi TRUE dengan cara membuat nilainya NULL [ substr jika diberikan array maka akan menghasilkan NULL, begitu juga sha1 jika diberikan array maka nilainya akan NULL ]. Selanjutnya, akan terdapat looping.

Looping diatas membuat setiap inputan GET ( $lel => $hack ) dengan menjadikan $lel sebagai nama variable dan $hack sebagai valuenya. [  https://www.php.net/manual/en/language.variables.variable.php ]

 

Validasi keempat adalah mengecek apakah nilai $$a tidak sama dengan nilai $k1. double dollar( $$ ) artinya adalah menjadikan value variable tersebut menjadi nama variable. Contoh berikut ini,

RCE Time!

Fungsi assert dapat kita gunakan sebagai celah masuk kita, karena assert akan melakukan eval pada input didalamnya, sehingga dapat kita isi dengan eval(‘echo $flag’);// [  “//” bertujuan untuk mengkomen baris selanjutnya].

 

sehingga kita dapat membuat inputan dengan metode GET sebagai berikut:

 

Leave a Reply

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