[Ringzer0]: Don’t mess with Noemie; she hates admin!

DID YOU HECKIN MISS ME??

Call me phoenix bcs I’m back from death.


Okeh kali ini kita ambil soal dari Ringzer0, tempat fevorit saya karena saya jadi trendsetter di komunitas ini gara gara ringzero.

Jadi soalnya seperti ini:

Informasi yang kita dapat adalah:

1. Usernamenya bukan admin

2. … gak ada lagi sih…

Dan kalau kita F12 alias inspect element pun gak ada yang janggal di codenya.

TAPI KATEGORI CHALLENGENYA SQL INJECTION JADI PASTI SQL INJECTION KAN? YA KAN?

Okeh, walaupun poinnya besar (yang berarti soalnya pasti susah punya) kita coba dulu cara klasik SQL injection, yaitu OR ‘1’ = ‘1’.

Kenapa OR ‘1’=’1′? Good Question. Saatnya mengembalikan sesi “WHAT THE HECK IS”.

 

———————————-WHAT THE HECK IS OR ‘1’ = ‘1’——————————————-

Jadi password dan username kita disimpan di dalam database dalam bentuk table. Common sense. Lalu, kenapa identitas kita gak tertukar dengan orang lain saat login? Karena username dan password kita dicek dulu kesamaannya dengan yang ada di database (yang kita masukkan saat register). Query yang digunakan untuk mengecek kesamaannya adalah :

Potongan query di atas berarti “weh database, cariin dong dari tabel user yang usernamenya ‘ini’ dan passwordnya ‘itu'”

Nah, misalkan kita masukkan OR ‘1’ = ‘1’ ke dalam username, apa yang terjadi?

Pertama, 1=1 adalah true. Dan ingat kan kalau false OR true hasilnya true? Jadi maksudnya adalah walaupun username yang kita masukkan salah, itu tidak masalah karena pasti hasilnya jadi true. Therefore, SQL ijection.

————————–END OF WHAT THE HECK IS SESSION—————————————–

 

Dah ngerti? Cool. Oke sip, mari masukkin OR ‘1’=’1′ nya.

Kalau sudah begini, passwordnya bisa diisi apa saja.

Sekarang, tekan login.

Nah, ini dia challengenya. Katanya illegal characters detected. Berarti simbol simbol kita ada yang direject. Ini normal di website untuk mencegah adanya SQL injection. Tapi kategori challengenya masih SQL injection kok :> jadi kita cobain aja dulu masuk – masukkan beberapa simbol yang kita curigai kena detect. Misalnya “, ‘, OR, AND, =, >, <, &, atau |. Caranya tinggal masukkan saja di usernamenya dan lihat ada illegal characters detected atau nggak.

Dan setelah dicek, ternyata hanya = doang sih yang direject. Berarti kita pakai cara lain untuk buat usernamenya jadi TRUE, tapi passwordnya di OR hingga tidak perlu TRUE, jadi bisa menghasilkan TRUE.

Dengan logika itu, coba masukkan 1′ OR 1 OR’. Kenapa 1′ OR 1 OR’ ? Kenapa petiknya harus banget petik satu dan kenapa posisinya harus di sana?

 

————————WHAT THE HECK IS 1′ OR 1 OR’—————————————————–

Seperti yang tadi sudah saya jelaskan, bahwa potongan query di database untuk autentikasi adalah:

Nah, kita coba mengertikan kalau kita masukkan 1′ OR 1 OR’:

Nah, untuk mengerti bagaimana cara jalannya query ini, kita harus mengerti yang mana yang bakal dijalankan duluan karena cara baca querynya bukan simply dari samping kiri ke kanan, melainkan seperti hitung matematika.

Misalnya: 2+4*2

Yang akan kita hitung adalah yang * dulu kan? Nah, di PHP juga ada peraturan seperti itu. Untuk itu, kita coba buka: https://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html

di sana ada ditulis:

Apa ini? Ini adalah urutan ‘duluan siapa yang diexecute’ misalnya coba kita bandingkan OR dan AND. AND ada di atas OR berarti di satu potongan query, AND bakal jalan duluan sebelum OR.

Balik lagi ke query yang tadi:

Sebelum itu, coba kita kurung kurungin dulu ya supaya baca petiknya gak bingung.

Nah, bacanya dari AND kan, berarti baca dari passwordnya dulu. Itu passwordnya sama saja seperti nyari yang bikin passwordnya kosong. Ya tapi siapa yang mau jadi admin ngisi password kosong kan? Jadi pasti passwordnya jadi FALSE.

Nah, setelah itu baru bisa dibaca seperti biasa. username = ‘1’ itu berarti literally kita cari yang usernamenya 1. Tapi pasti gak ada dong, jadi itu pasti FALSE juga. Tapi mau itu jadi TRUE juga gak masalah sih.

Kurungan yang di  depan FALSE  itu bisa kita abaikan karena itu cuma supaya petiknya gak ada yang jomblo.

Berarti sekarang tinggal: FALSE OR 1 OR FALSE dimana 1 diartikan TRUE (jadi sebenernya 1-nya diganti TRUE juga bisa). Coba hitung dulu ya:

(FALSE OR TRUE) OR FALSE

FALSE OR TRUE = TRUE

TRUE OR FALSE = TRUE

Karena hasil akhirnya TRUE, maka harusnya kita bisa masuk.

—————————END OF WHAT THE HECK IS 1′ OR 1 OR’———————————–

Yuk cobain dulu.

Pencet loginnya~

CIHUY, dapet flagnya~

Lesson learned, kalo mau hindarin SQL injection, reject aja semua simbolnya ehehe //digeplak.

 

 

Leave a Reply

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