Lompat ke konten Lompat ke sidebar Lompat ke footer

Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION

 Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION. kali ini saya mau sharing tentang cara melakukan SQL injection manual pada website yang rentan terhadap serangan SQL Injection. Anggap saja ini biar kita paham dengan konsepnya, meskipun saat ini kalian bisa melakukan injeksi menggunakan tools seperti SQLmap atau 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. Baik, langsung saja akan saya jelaskan langkah-langkah nya.

Langkah 1 – Mengkonfirmasi Kerentanan

Pertama, kita pastikan dulu webnya rentan terhadap SQL Injection. Untuk mengkonfirmasi webnya rentan apa gak, kita cukup menginputkan tanda petik satu ( ‘ ). Jika muncul error, berarti website tersebut vulnrable. Ini dikarenakan website tersebut tidak memfilter input dari URL sehingga petik satu ( ' ) yang kita masukkan di URL masuk ke dalam query SQL dan dijalankan di sisi server. Dalam tutorial kali ini saya akan mempraktekkan pada aplikasi yang sudah saya buat sendiri sehingga kita dapat membuka source code nya untuk bahan pembelajaran. Silahkan download source code nya disini

Link Download Vulnerable App SQL Injection.

Link tersebut mengarah ke github saya, Jangan lupa start nya yaa h3h3. Untuk cara menginstall nya sudah pernah saya bahas pada tutorial sebelumnya yaitu SQL Injection Tutorial - Bypass Admin Login. Silahkan bagi yang belum membaca dibaca dulu atau yang ingin tutorial cara install aplikasi nya bisa dilihat disitu. Untuk penempatan tanda petik satu ( ' ) bisa diletakkan setelah value GET Parameter pada URL, misal ?id=1, &idBerita=4, dll. Hal ini dikarenakan biasanya programmer akan mengambil data yang ada di database menggunakan id yang di input kan pada URL website sehingga jika tidak di filter dengan benar value pada GET Parameter tersebut akan mempengaruhi Query saat mengambil data. Selengkapnya, lihat Screenshot dibawah.

Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION


%27 pada URL sebenarnya adalah tanda petik satu yang saya sebutkan tadi, namun karena menggunakan Chrome meng-encode tanda petik satu tsb menjadi %27. Hasilnya:

Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION

Disini website tsb error yang berarti vulnrable, jika sudah seperti ini maka kemungkinan besar website rentan terhadap serangan SQL Injection.

Langkah 2 – Menentukan Jumlah Kolom

Langkah selanjutnya adalah menentukan jumlah kolom dari table di database yang digunakan oleh web tersebut. Caranya adalah menggunakan Query SQL ORDER BY untuk memanipulasi pengambilan data seolah-olah di filter berdasarkan kolom ke berapa pada tabel. Sehingga, jika kita melakukan ORDER BY pada kolom yang tidak ada pada database akan menghasilkan error karena kolom tidak ditemukan. Nah jika mendapatkan error di kolom ke berapa maka kita bisa mengetahui berapa jumlah kolom yang digunakan pada tabel dalam database website tersebut.
  • Payload : 1' ORDER BY 1 -- ok --> tidak error
  • Payload : 2' ORDER BY 1 -- ok --> tidak error
  • Payload : 3' ORDER BY 1 -- ok --> tidak error
  • Payload : 4' ORDER BY 1 -- ok --> error
 Disini kita menemukan pada saat ORDER BY 4 error, dikarenakan kolom ke 4 tidak ada. Dengan kata lain, tabel yang digunakan saat mengambil data hanya memiliki 3 kolom. Oiya, pada payload saya menyisipkan 'ok' diujung agar spasi diujung URL yang saya inputkan tidak dihapus oleh Chrome, karena Chrome otomatis menghapus spasi di ujung URL (mungkin dikira typo kali ya :p). Sementara, kita membutuhkan agar tanda petik diujung Query dihapuskan karena menyebabkan error karena petik satu nya jadi ada 3 pada Query. Nah caranya adalah menyisipkan perintah komentar (-- ) pada Query nya agar petik tadi tidak tereksekusi, nah karena itu saya meletakkan komentar diujung dan diakhiri 'ok' agar spasi nya gak di hilangkan sama Chrome.

Langkah 3 - Menemukan Injectable Column

Injectable Column ini maksudnya adalah kolom yang bisa dimanipulasi dengan Query UNION SELECT yang saat halaman di render kolom ini akan ditampilkan pada halaman website jadi kita bisa mengambil informasi di database melalui kolom ini.
Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION
Payload : ' UNION SELECT 1,2,3 ORDER BY 2 ASC LIMIT 1 -- ok

Pada Payload, kita memasukkan angka 1,2,3 yang jumlahnya harus disesuaikan dengan jumlah kolom yang sudah kita dapatkan sebelumnya. Ingat ya, jumlahnya bukan isinya, kalau isinya boleh saja dirubah misal : 3,5,1 yang penting disitu kita memasukkan 3 nilai. Disini saya menggunakan 1,2,3 untuk mempermudah saja dalam menentukan kolom keberapa yang injectable. Hasilnya : 

Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION

Pada Screenshot, kita sudah dapat dimana injectable column nya, disini seharusnya jika kalian sudah paham mengenai SQL kalian sudah bisa mengganti nilai dari kolom kesatu dan kedua untuk menampilkan informasi yang dapat di Query dari database

Langkah 4 - Saatnya 'bermain'

Setelah tahu dimana kolom yang injectable, kita bisa memainkan value yang akan ditampilkan, saya akan menggunakan contoh sederhana untuk melihat versi database yang digunakan dan menampilkan user database yang dipakai saat itu.
Payload : 
' UNION SELECT 1,@@version,user() ORDER BY 2 ASC LIMIT 1 -- ok

 Hasil : 

Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION


Oke, terlihat database yang digunakan adalah MariaDB versi 10.4.11 dan user yang saat ini digunakan adalah root pada server localhost. Kita juga bisa mengecek informasi 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
Selanjutnya untuk melihat nama tabel yang ada pada database tsb kita bisa menggunakan payload :
 'UNION SELECT 1,group_concat(table_name),user() from information_schema.tables where table_schema=database() -- ok

Di payload ini saya menghilangkan ORDER BY dan LIMIT nya agar payload tidak terlalu panjang. Namun berita aslinya akan muncul, nah disini kalian bisa ubah id=1 menjadi id=9999 atau berapapun yang id tersebut tidak mungkin berada di database sehingga data asli berita tidak muncul. Hasil : 

Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION

Nah disitu muncul semua nama tabel yang ada pada database tersebut, untuk pengambilan data selanjutnya kalian bisa 'bermain' di Payload Query SQL yang sudah saya jabarkan diatas, Terimakasih. 

Posting Komentar untuk "Cara Melakukan SQL Injection Manual Menggunakan Teknik UNION"