SQL
Injection gak habis – habis. Setiap hari ada aja situs yang jadi
korban. Entah emang karena adminnya gak ngerti atau apa saya gak tau.
Padahal tutorial untuk bagaimana melakukan dan mencegahnya dah banyak
banget beredar di internet.
Emang agak susah sih apalagi kalo yang model Blind SQL Injection dan beberapa variasi yang banyak banget. Sedangkan kita tahu, beberapa CMS terkenal pun sering jadi korban.
Sebagai contoh saya pengguna WordPress. Aman gak WordPress itu? Ya menurut saya sih oke – oke aja cuman bagaimana dengan pluginnya? Facebook pun banyak kasusnya yang ternyata kelemahannya berada pada Aplikasi – aplikasinya, mungkin game atau apapun itu.
Pada kesempatan kali ini saya hanya akan mencoba melakukan pencegahan dengan predefined atau PHP Superglobal $_SERVER['REQUEST_URI'] yang menangkap nilai pada URL.
Penasaran? Kita praktek aja. Ehmm, karena saya males buat contoh web yang vulnerable kita akan mencoba contoh script yang di buat oleh Om EVA-00 (kemana aja lo Bro?) yang juga sekalian dia menuliskan tutorial bagaimana melakukan Dasar SQL Injection.
Setelah download, buka folder injector lalu ekstrak folder xyb_injector.sql.gz.
Buka phpMyAdmin dan buat database “inject” dan import database yang tadi telah kita ekstrak.
Dan hasilnya kayak gini nanti…
Kembali ke folder injector, buka folder library dan edit file config.php. Masukkan username, password, host dari phpmyadmin dan nama database di dalamnya…
Selesai dan jalankan contoh webnya…
Sampai sini kalian bebas belajar dah bagaimana dasar-dasar SQL Injection dan tutorialnya ada di dalam ebooknya.
Kita hanya stop sampai disini aja…
Sekarang buat file php baru dengan nama antisqli.php lalu masukkan script berikut.
Setelah itu kita melakukan include pada index.php di dalam folder injector tadi.
Di bagian paling atas tinggal tambahkan aja include ‘antisqli.php’;. Setelah itu buka link yang tadi kita sisipkan perintah SQL dan apa yang terjadi?
Keren kan? Oke kita lihat lagi antisqli.php – nya…
Jika variabel di URL lebih dari 255 atau (tanda || dibaca atau) ada kata “concat“, “union” dan “base64“.
Maka akan muncul pesan “Maaf Bro… Apa tuh? Mau Nakal Yah ” kemudian dilanjutkan dibawahnya.
Nah gak hanya cuman union / concat kan jika kita melakukan SQL Injection. Ada select, @@version dan lain – lain. Kan kalian yang lebih jago kalo soal beginian Nantinya kalian tinggal tambahkan aja menjadi.
Jangan lupa tanda || (atau). Oke sekian dulu tutorial dari saya,
semoga berguna dan mohon maaf jika tutorial ini tergolong newbie banget
dan sederhana. Ingat hal besar dimulai dari yang sederhana dulu. Ketemu
lagi di tutorial berikutnya…
Kenapa? Coba, pertama kalo kita masukkan URL seperti ini
Pasti bakalan gak berhasil karena masalahnya si strpos itu mencari
dengan case sensitive alias huruf besar atau kecil dibedain… jadi union
sama UniOn akan dibedakan.
Solusi pertama adalah menggunakan stripos (case insensitive)
Atau menggunakan preg_match
Sekarang union,UNIon,unIoN dan variasi – variasi yang lain pasti gak akan berhasil…
Emang agak susah sih apalagi kalo yang model Blind SQL Injection dan beberapa variasi yang banyak banget. Sedangkan kita tahu, beberapa CMS terkenal pun sering jadi korban.
Sebagai contoh saya pengguna WordPress. Aman gak WordPress itu? Ya menurut saya sih oke – oke aja cuman bagaimana dengan pluginnya? Facebook pun banyak kasusnya yang ternyata kelemahannya berada pada Aplikasi – aplikasinya, mungkin game atau apapun itu.
Pada kesempatan kali ini saya hanya akan mencoba melakukan pencegahan dengan predefined atau PHP Superglobal $_SERVER['REQUEST_URI'] yang menangkap nilai pada URL.
Penasaran? Kita praktek aja. Ehmm, karena saya males buat contoh web yang vulnerable kita akan mencoba contoh script yang di buat oleh Om EVA-00 (kemana aja lo Bro?) yang juga sekalian dia menuliskan tutorial bagaimana melakukan Dasar SQL Injection.
Buka phpMyAdmin dan buat database “inject” dan import database yang tadi telah kita ekstrak.
1
2
3
4
5
6
7
| <?php // This is an example of config.php $dbhost = 'localhost' ; $dbuser = 'root' ; $dbpass = '' ; $dbname = 'inject' ; ?> |
Kita hanya stop sampai disini aja…
1
| http://localhost/cobain/injector/index.php?id=-4+union+select+1,@@version,3,4,5-- |
1
2
3
4
5
6
7
8
9
| <?php if ( strlen ( $_SERVER [ 'REQUEST_URI' ]) > 255 || strpos ( $_SERVER [ 'REQUEST_URI' ], "concat" ) || strpos ( $_SERVER [ 'REQUEST_URI' ], "union" ) || strpos ( $_SERVER [ 'REQUEST_URI' ], "base64" )) { echo "Maaf Bro... Apa tuh? Mau Nakal Yah <img src=" http: //cruzenaldo.com/blog/wp-content/plugins/tango-smileys-extended/tango24/razz.png"
alt="Razz" title="Razz" class="tse-smiley" width="24" height="24">"; @header( "HTTP/1.1 414 Request-URI Too Long" ); @header( "Status: 414 Request-URI Too Long" ); @header( "Connection: Close" ); @ exit ; } ?> |
1
2
3
4
5
6
| <?php include 'library/config.php' ; include 'library/opendb.php' ; include 'antisqli.php' ; ?> |
1
| if ( strlen ( $_SERVER [ 'REQUEST_URI' ]) > 255 || strpos ( $_SERVER [ 'REQUEST_URI' ], "concat" ) || strpos ( $_SERVER [ 'REQUEST_URI' ], "union" ) || strpos ( $_SERVER [ 'REQUEST_URI' ], "base64" )) |
1
2
3
4
5
| echo "Maaf Bro... Apa tuh? Mau Nakal Yah <img src=" http: //cruzenaldo.com/blog/wp-content/plugins/tango-smileys-extended/tango24/razz.png"
alt="Razz" title="Razz" class="tse-smiley" width="24" height="24">"; @header( "HTTP/1.1 414 Request-URI Too Long" ); @header( "Status: 414 Request-URI Too Long" ); @header( "Connection: Close" ); @ exit ; |
Nah gak hanya cuman union / concat kan jika kita melakukan SQL Injection. Ada select, @@version dan lain – lain. Kan kalian yang lebih jago kalo soal beginian Nantinya kalian tinggal tambahkan aja menjadi.
1
| strpos ( $_SERVER [ 'REQUEST_URI' ], "concat" ) |
UPDATE
Pertama – tama makasih buat Om ketek untuk perbaikannya neh. Emang kemaren saya sempet lupain so pengembangan penting ini harus banget.Kenapa? Coba, pertama kalo kita masukkan URL seperti ini
1
2
3
4
5
6
7
| http: //localhost/cobain/injector/index.php?id=-4+UniOn+select+1,@@version,3,4,5-- atau seperti ini http: //localhost/cobain/injector/index.php?id=-4+uNioN+select+1,@@version,3,4,5-- dan lain lain |
Solusi pertama adalah menggunakan stripos (case insensitive)
1
| if ( strlen ( $_SERVER [ 'REQUEST_URI' ]) > 255 || stripos ( $_SERVER [ 'REQUEST_URI' ], "concat" ) || stripos ( $_SERVER [ 'REQUEST_URI' ], "union" ) || stripos ( $_SERVER [ 'REQUEST_URI' ], "base64" )) { |
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php // kata2 kotor dan jorok... <img src="http://cruzenaldo.com/blog/wp-content/plugins/tango-smileys-extended/tango24/wink.png" alt="Wink" title="Wink" class="tse-smiley" width="24" height="24"> $berbahaya = array ( "union" , "concat" , "base64" ); $gabungsemua = implode( "|" , $berbahaya ); if (( strlen ( $_SERVER [ 'REQUEST_URI' ]) > 255) || (preg_match( "/" . $gabungsemua . "/i" , $_SERVER [ 'REQUEST_URI' ]))){ echo "Maaf Bro... Apa tuh? Mau Nakal Yah <img src=" http: //cruzenaldo.com/blog/wp-content/plugins/tango-smileys-extended/tango24/razz.png"
alt="Razz" title="Razz" class="tse-smiley" width="24" height="24">"; @header( "HTTP/1.1 414 Request-URI Too Long" ); @header( "Status: 414 Request-URI Too Long" ); @header( "Connection: Close" ); @ exit ; ?> |
No comments:
Post a Comment