1. SQL MAP
Kali ini kita akan membahas tutorial hacing dengan teknik SQL Injection menggunakan
tool SQLMap untuk melakukan hacking atau serangan pada website berbasis data dengan
tujuan untuk menemukan kerentanan keamanan pada website tersebut.
SQL Injection adalah teknik injeksi code yang digunakan untuk melakukan serangan pada
aplikasi web berbasis data di mana pernyataan malicious SQL dimasukkan ke dalam entri
untuk di eksekusi (misalnya untuk menampilkan konten database ke penyerang). SQL
injection dapat mengeksploitasi kerentanan keamanan pada perangkat lunak aplikasi,
misalnya saat user salah melakukan filter inputan untuk pengiriman karakter yang
disematkan dalam pernyataan SQL atau inputan user tidak diketik dengan benar dan tanpa
diduga dieksekusi. SQL Injection lebih dikenal sebagai vektor serangan untuk sebuah situs
web namun juga dapat digunakan untuk menyerang semua jenis database SQL.
http://sqlmap.org
Karena ditulis dalam bahasa python, maka anda harus menginstal python di sistem anda
terlebih dahulu. Di ubuntu install python dari synaptic. Pada windows install activestate
python. Silahkan cek posting dengan judul Installasi dan menjalankan SQLMap di
Windows untuk rincian tentang cara menginstal dan menjalankan sqlmap di windows.
Fitur-Fitur SQLMap
Dukungan penuh untuk sistem manajemen basis data MySQL, Oracle, PostgreSQL,
Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase dan
SAP MaxDB.
Dukungan penuh untuk enam teknik SQL Injection: boolean-based blind, time-based
blind, error-based, UNION query, stacked queries and out-of-band.
Dukungan untuk langsung terhubung ke database tanpa melalui SQL Injection, dengan
menyediakan kredensial DBMS, alamat IP, port dan nama database.
Dukungan untuk menghitung pengguna, hash kata sandi, privileges, roles, database,
tabel dan kolom.
Pengenalan otomatis format hash password dan dukungan untuk cracking
menggunakan serangan berbasis kamus.
Dukungan untuk membuang tabel database seluruhnya, kisaran entri atau kolom
spesifik sesuai pilihan pengguna. Pengguna juga dapat memilih untuk membuang
hanya sejumlah karakter dari entri masing-masing kolom.
Dukungan untuk mencari nama database tertentu, tabel spesifik di semua database atau
kolom spesifik di semua tabel database. Ini berguna, misalnya, untuk mengidentifikasi
tabel yang berisi kredensial aplikasi kustom di mana nama kolom yang relevan
mengandung string seperti nama dan password.
Dukungan untuk mendownload dan mengunggah file apapun dari database server yang
mendasari sistem file pada perangkat lunak database MySQL, PostgreSQL atau
Microsoft SQL Server.
Dukungan untuk mengeksekusi perintah acak dan mengambil output standar mereka
pada database server yang mendasari sistem operasi saat perangkat lunak database
adalah MySQL, PostgreSQL atau Microsoft SQL Server.
Dukungan untuk membangun koneksi TCP stateful out-of-band antara mesin
penyerang dan server basis data yang mendasari sistem operasi. Saluran ini bisa
menjadi prompt perintah interaktif, sesi Meterpreter atau sesi antarmuka pengguna
grafis (VNC) sesuai pilihan pengguna.
Dukungan untuk proses database 'esensi hak istimewa pengguna melalui perintah
Metasploit's Meterpreter getsystem.
Untuk daftar pilihan dan parameter yang bisa digunakan dengan perintah sqlmap, silahkan
periksa dokumentasi sqlmap di
https://github.com/sqlmapproject/sqlmap/wiki/Usage
Pada tutorial ini kita akan belajar bagaimana menggunakan sqlmap untuk exploit aplikasi
web yang rentan dan melihat apa yang bisa dilakukan dengan SQLMap.
Untuk memahami tutorial SQL Injection ini Anda harus memiliki pengetahuan
menyeluruh tentang bagaimana aplikasi web berbasis database bekerja. Misalnya aplikasi
web yang dibuat dengan PHP + MySQL.
Vulnerable Url
Misalkan ada sebuah aplikasi website memiliki URL sebagai berikut:
http://www.website.com/index.php?id=51
URLini rentan terhadap serangan SQL Injection karena pengembang situs tersebut tidak
benar-benar mengamankan parameter id. Hal ini bisa saja diuji coba dengan mencoba
membuka url tersebut
http://www.website.com/index.php?id=51'
Kita hanya menambahkan satu kutipan pada parameter id. Jika url ini melempar kesalahan
atau bereaksi dengan cara yang tidak normal maka jelas bahwa database telah mendapat
kutipan tunggal yang tak terduga sehingga aplikasinya tidak mampu mengamankannya
dengan benar. Jadi dalam hal ini parameter input "id" ini rentan terhadap sql injection.
Perintah di atas adalah yang pertama dan paling sederhana untuk dijalankan dengan tool
SQLMap. Perintah tersebut memeriksa parameter masukan untuk mengetahui apakah
mereka rentan terhadap sql injection atau tidak. Dalam hal ini sqlmap mengirimkan
berbagai jenis muatan sql injection ke parameter masukan dan memeriksa hasilnya. Dalam
proses ini sqlmap juga mampu mengidentifikasi sistem remote os, nama database dan
versinya. Berikut adalah tampilan yang mungkin terlihat.
Temukan Database
Setelah sqlmap mengkonfirmasikan bahwa remote url rentan terhadap sql injection dan
dapat dieksploitasi, langkah selanjutnya adalah mengetahui nama-nama basis data yang ada
pada sistem remote tersebut. Pilihan "--dbs" digunakan untuk mendapatkan daftar database
.......
Perintah di atas akan mengeluarkan data dari tabel tertentu, sangat mirip dengan perintah
mysqldump.
Outputnya mungkin terlihat seperti ini
+----+--------------------+-----------+-----------+----------+------------+-------------
+-------------------+
| id | hash | name | email | password | permission | system_home |
system_allow_only |
+----+--------------------+-----------+-----------+----------+------------+-------------
+-------------------+
| 1 | 5DIpzzDHFOwnCvPonu | admin | <blank> | <blank> | 3 | <blank> |
<blank> |
+----+--------------------+-----------+-----------+----------+------------+-------------
+-------------------+
Kolom hash tampaknya memiliki hash password. Coba cracking hash dan kemudian Anda
akan mendapatkan rincian data login. Sqlmap akan membuat file csv yang berisi data dump
untuk memudahkan analisis.
Sejauh ini kita sudah bisa mengumpulkan banyak informasi dari remote database
menggunakan SQLMap. Penggunaannya hampir seperti memiliki akses langsung ke remote
database melalui klien seperti phpmyadmin. Dalam skenario nyata, hacker akan mencoba
mendapatkan tingkat akses yang lebih tinggi ke sistem. Untuk ini, mereka akan mencoba
memecahkan hash password dan mencoba masuk melalui panel admin. Atau mereka akan
mencoba untuk mendapatkan shell os menggunakan sqlmap.
Saya menulis posting lain tentang penggunaan sqlmap untuk mendapatkan rincian lebih
lanjut tentang remote database. Posting tersebut menjelaskan pilihan lain dari sqlmap yang
berguna untuk menemukan pengguna database, hak istimewa dan hash kata kunci mereka.
Bagaimana selanjutnya ?
Jalankan query sql yang bervariasi
Ini mungkin hal termudah untuk dilakukan pada server yang rentan terhadap sql injection.
Parameter --sql-query dapat digunakan untuk menentukan query sql yang akan dijalankan.
Hal yang menarik adalah membuat pengguna di tabel pengguna atau yang serupa. Atau
mungkin mengubah / memodifikasi isi halaman cms dll.
Parameter lain - shell-shell akan memberikan shell sql seperti antarmuka untuk
menjalankan query secara interaktif.
Masuk ke panel admin dan mainkan
Jika situs web menjalankan beberapa jenis cms kustom atau yang serupa yang memiliki
panel admin, maka akan memungkinan anda untuk masuk ke dalam asalkan Anda dapat
memecahkan kata sandi yang diambil di database dump. Kata kunci yang sederhana dan
pendek dapat dipecahkan hanya dengan brute forcing atau google.com.
Periksa apakah panel admin mengizinkan untuk mengupload beberapa file. Jika file php
tertentu dapat diunggah maka akan jauh lebih menyenangkan. File php dapat berisi aplikasi
pemanggilan shell_exec, system, exec atau passthru dan itu akan memungkinkan untuk
mengeksekusi perintah sistem sekehendak anda. Skrip shell web PHP bisa diunggah untuk
melakukan hal yang sama.
Shell di remote OS
Ini adalah hal yang harus dilakukan untuk mengambil alih server. Namun perhatikan bahwa
itu tidak semudah dan sepele seperti trik yang ditunjukkan di atas. Sqlmap dilengkapi
dengan parameter call --os-shell yang bisa digunakan untuk mencoba shell pada sistem
remote, namun memiliki banyak keterbatasan tersendiri.
Menurut manual sqlmap
Memungkinkan untuk menjalankan perintah tertentu pada sistem operasi database server
yang mendasar ketika sistem manajemen basis data back-end baik MySQL, PostgreSQL
atau Microsoft SQL Server, dan session user memiliki privilege yang diperlukan untuk
menyalahgunakan fungsionalitas spesifik database dan kelemahan arsitektur.
Privilege yang paling penting yang dibutuhkan oleh pengguna database saat ini adalah
menulis file melalui fungsi database. Ini tidak ada dalam kebanyakan kasus. Oleh karena itu
teknik ini tidak akan bekerja dalam banyak kasus.
Catatan
1. Terkadang sqlmap tidak dapat terhubung ke url sama sekali. Ini terlihat saat stuck pada
tugas pertama "testing connection to the target url". Dalam kasus tersebut, sangat
membantu untuk menggunakan opsi "-random-agent". Hal ini membuat sqlmap
menggunakan signature user agent yang valid seperti yang dikirim oleh browser seperti
chrome atau firefox.
2. Untuk url yang tidak dalam bentuk param = nilai , sqlmap tidak bisa secara otomatis tahu
dimana harus diinjeksi. Misalnya url mvc
seperti http://www.site.com/class_name/method/43/80.
Dalam kasus tersebut sqlmap perlu diberi tahu titik injeksi yang ditandai oleh *
http://www.site.com/class_name/method/43*/80
Perintah di atas akan memberitahu sqlmap untuk melakukan injection pada titik yang
ditandai oleh *
3. Bila menggunakan form yang mengirimkan data melalui metode post maka sqlmap
harus disediakan data post pada opsi "--data". Untuk informasi lebih lanjut, lihat
tutorial ini tentang Penggunaan SQLMap pada form.