0Pricing
Security+ Academy · Pelajaran

Injeksi SQL dan Injeksi Perintah

Pelajari cara penyerang menyusun muatan injeksi untuk memanipulasi kueri basis data atau perintah OS, serta cara kueri berparameter dan validasi masukan mencegahnya.

Injeksi SQL dan Injeksi Perintah adalah pelajaran Security+ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Security+ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Security+ Academy mencakup 4 pelajaran total.

Apa Itu Injeksi SQL?

Injeksi SQL (SQLi) terjadi ketika penyerang menyisipkan atau “menginjeksikan” kode SQL berbahaya ke dalam bidang masukan yang kemudian diteruskan ke kueri basis data. Karena aplikasi menggabungkan masukan User langsung ke dalam pernyataan SQL, basis data tidak dapat membedakan data yang sah dari Commands yang diberikan penyerang. SQLi secara konsisten menempati peringkat sebagai salah satu Vulnerabilities web paling berbahaya dalam OWASP Top 10.

Contoh Payload SQLi Klasik

Kueri login yang rentan mungkin terlihat seperti: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'. Penyerang yang memasukkan ' OR '1'='1 sebagai nama User mengubah kueri sehingga klausa WHERE selalu bernilai benar, dan sepenuhnya melewati autentikasi. Ini adalah injeksi berbasis tautologi klasik.

-- Vulnerable query (DO NOT use in production)
SELECT * FROM users
WHERE username = '' OR '1'='1'
  AND password = 'anything';
-- Returns ALL rows — auth bypassed

Jenis-Jenis Injeksi SQL

Attack injeksi SQL hadir dalam beberapa bentuk: SQLi In-band mengembalikan hasil langsung dalam respons HTTP (berbasis error atau berbasis union). SQLi Blind menyimpulkan data melalui respons Boolean true/false atau penundaan waktu yang disengaja (SLEEP(5)). SQLi Out-of-band menggunakan saluran sekunder seperti pencarian DNS untuk mengekstrak data ketika respons tidak terlihat.

-- Time-based blind SQLi example
SELECT * FROM users
WHERE id = '1' AND SLEEP(5)--';
-- If response is delayed 5s, injection succeeded

Mencegah SQLi: Kueri Berparameter

Pertahanan utama terhadap SQL injection adalah kueri berparameter (juga disebut pernyataan terpraproses). Dalam kueri berparameter, struktur SQL dikompilasi terlebih dahulu, dan masukan User diteruskan sebagai parameter terpisah—masukan tersebut tidak dapat mengubah struktur kueri. Pendekatan ini tidak bergantung pada bahasa pemrograman dan jauh lebih andal daripada sanitasi masukan saja.

# Python example — parameterized query (safe)
import sqlite3
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
username = 'admin'
password = 'secret'
cursor.execute(
    'SELECT * FROM users WHERE username=? AND password=?',
    (username, password)  # parameters, never concatenated
)

Validasi Masukan sebagai Pertahanan Berlapis

Meskipun kueri berparameter merupakan pertahanan utama, validasi masukan menyediakan lapisan sekunder yang penting. Validasi daftar izin hanya menerima karakter yang diharapkan (misalnya, hanya alfanumerik untuk bidang nama User) dan menolak semua karakter lainnya. Validasi daftar penolakan memblokir karakter buruk yang diketahui, tetapi penyerang sering menyandikan atau menyamarkan Payload untuk melewati daftar penolakan—sehingga daftar izin jauh lebih kuat.

Apa Itu Injeksi Command?

Injeksi Command (injeksi Command OS) terjadi ketika aplikasi meneruskan masukan User yang belum disanitasi ke shell sistem. Berbeda dari injeksi SQL yang menargetkan basis data, injeksi Command menargetkan sistem operasi itu sendiri—sehingga penyerang dapat menjalankan Commands arbitrer dengan Privileges proses server web. Injeksi ini memiliki tingkat keparahan CRITICAL dan sering menyebabkan kompromi penuh pada sistem.

Contoh Injeksi Command

Aplikasi web yang melakukan ping ke alamat IP yang diberikan User mungkin menggunakan: ping -c 1 INPUT. Jika penyerang memasukkan 8.8.8.8; cat /etc/passwd, shell menafsirkan ; sebagai pemisah Command dan menjalankan kedua Commands tersebut. Operator injeksi yang umum mencakup ;, &&, ||, |, dan substitusi Command dengan backtick.

# Vulnerable Python (subprocess with shell=True)
import subprocess
user_ip = '8.8.8.8; cat /etc/passwd'  # attacker input
subprocess.run('ping -c 1 ' + user_ip, shell=True)

# Safe alternative — avoid shell=True, pass args as list
subprocess.run(['ping', '-c', '1', '8.8.8.8'])

Mencegah Injeksi Command

Pertahanan paling aman terhadap injeksi Command adalah menghindari pemanggilan Commands OS dari masukan User sepenuhnya—gunakan fungsi pustaka yang mencapai tujuan yang sama. Jika pemanggilan shell tidak dapat dihindari, teruskan argumen sebagai daftar (jangan pernah sebagai string yang digabungkan), nonaktifkan interpretasi shell, validasi masukan terhadap daftar izin yang ketat, dan jalankan proses dengan akun User yang memiliki Privileges seminimal mungkin.

Konteks OWASP: Injeksi dalam 10 Besar

10 Besar OWASP mencantumkan Injeksi (yang mencakup injeksi SQL, NoSQL, OS, dan LDAP) sebagai salah satu risiko keamanan aplikasi yang paling kritis. OWASP merekomendasikan pendekatan pertahanan berlapis: gunakan API yang aman dan tidak bergantung pada interpreter, lakukan validasi masukan sisi Server dengan daftar izin, lakukan pelolosan karakter khusus menggunakan sintaks khusus interpreter tersebut, serta gunakan pengendali SQL seperti LIMIT untuk mencegah pengungkapan data secara massal.

Deteksi: WAF dan Pencatatan

Firewall Aplikasi Web (WAF) dapat mendeteksi dan memblokir muatan injeksi umum dengan memeriksa permintaan HTTP berdasarkan pola tanda tangan. Namun, WAF dapat dilewati melalui trik pengodean dan bukan pengganti penulisan kode yang aman. Pencatatan aplikasi yang tepat — dengan merekam parameter kueri, kode respons, dan pesan kesalahan — memungkinkan tim keamanan mengidentifikasi upaya injeksi saat meninjau insiden.

Dampak Nyata Serangan Injeksi

Serangan injeksi telah menyebabkan beberapa kebocoran data terbesar dalam sejarah. Kebocoran Equifax pada tahun 2017 mengekspos 147 juta catatan melalui kelemahan pada aplikasi web. Injeksi SQL terhadap PlayStation Network milik Sony membahayakan 77 juta akun pada tahun 2011. Insiden-insiden ini menunjukkan bahwa kelemahan injeksi menimbulkan dampak bisnis yang sangat besar: pencurian data, denda regulasi, kerusakan reputasi, dan tanggung jawab hukum semuanya dapat terjadi setelah serangan injeksi berhasil.

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep CompTIA Security+ (SY0-701) dari pelajaran ini.

Rangkuman Pelajaran

Dalam pelajaran ini, Anda mempelajari bahwa: injeksi SQL mengeksploitasi masukan yang tidak dibersihkan dan digabungkan ke dalam kueri basis data, injeksi perintah meneruskan masukan berbahaya ke shell OS melalui operator seperti ; dan |, serta kueri berparameter dan menghindari shell=True merupakan pertahanan utama. Selanjutnya, kita akan membahas serangan Cross-Site Scripting (XSS) dan CSRF.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Injeksi SQL dan Injeksi Perintah” gratis?

Ya — teks lengkap “Injeksi SQL dan Injeksi Perintah” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Security+ Academy, upgrade ke CoddyKit PRO. Kursus Security+ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Injeksi SQL dan Injeksi Perintah”?

Pelajari cara penyerang menyusun muatan injeksi untuk memanipulasi kueri basis data atau perintah OS, serta cara kueri berparameter dan validasi masukan mencegahnya. Kamu berlatih Security+ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Security+ Academy?

Tidak diperlukan pengalaman sebelumnya. Security+ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Injeksi SQL dan Injeksi Perintah” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Security+ Academy ini?

Ya. Setiap pelajaran Security+ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Injeksi SQL dan Injeksi Perintah
  2. Cross-Site Scripting (XSS) dan CSRF
  3. Autentikasi Rusak dan Deserialisasi Tidak Aman
  4. SDLC Aman, Alat SAST, dan DAST
← Kembali ke Security+ Academy