Penetration testing (pentest) adalah pengujian keamanan yang dipesan pemilik sistem: seorang tester mencari celah dengan cara berpikir penyerang, dengan izin tertulis, di dalam batas yang disepakati, lalu menyerahkan laporan supaya celahnya bisa diperbaiki. Bayangin kamu menyewa tukang kunci untuk menguji toko. Ada surat yang kamu tanda tangani: pintu mana saja yang boleh dicoba, malam apa, dan apa yang dilarang (pintu toko tetangga jangan disentuh). Di akhir kamu dapat laporan: "pintu belakang bisa dibuka, ini fotonya, ganti kuncinya begini", lalu dia datang lagi untuk mengecek kunci barunya. Tanpa surat itu, perbuatan yang sama namanya pembobolan.
🧪 Tebakan cepat: scanner melaporkan "Possible SQL injection" di
api.belajarweb.example/api/products?id=. Langsung masuk laporan sebagai temuan kritis? Tebak dulu, jawabannya ada di bagian "Triage laporan scanner".
Izin tertulis dan scope
Sebelum satu request pun dikirim, ada tahap pre-engagement: menyepakati aturan main lalu menandatanganinya. Engagement di Lab:
| Bagian | Isi |
|---|---|
| Izin | ditandatangani pemilik sistem (CTO BelajarWeb) |
| In scope | app.belajarweb.example, api.belajarweb.example |
| Out of scope | pay.partner.example (penyedia pembayaran pihak ketiga) |
| Jendela waktu | 6 sampai 10 Oktober 2026, pukul 22.00 sampai 04.00 WIB |
| Dilarang | DoS dan uji beban, social engineering ke karyawan |
| Kontak darurat | [email protected] |
- Scope adalah daftar sistem yang boleh diuji. Yang di luar daftar gak disentuh, walau terhubung.
- Rules of engagement adalah aturan cara mengujinya: kapan, teknik apa yang dilarang, dan siapa yang dihubungi kalau ada temuan kritis atau layanan terganggu.
- Izin harus dari pemilik sistem, tertulis. Mengakses sistem orang lain tanpa hak itu pidana; di Indonesia diatur UU ITE Pasal 30. Latihan di sistem sendiri, lab latihan, atau program bug bounty yang sah.
Fase-fase pentest
Standar yang banyak dirujuk, PTES (Penetration Testing Execution Standard), membagi pentest jadi tujuh fase:
- Pre-engagement Interactions: scope, aturan, izin.
- Intelligence Gathering (reconnaissance atau recon): mengumpulkan informasi tentang target, seperti subdomain, teknologi, dan endpoint publik. Ini fase teknis pertama.
- Threat Modeling: memetakan aset penting dan siapa yang mungkin menyerangnya.
- Vulnerability Analysis: mencari celah, termasuk lewat scanner, lalu memilah hasilnya.
- Exploitation: membuktikan dengan hati-hati bahwa celah memang bisa dipakai, di dalam scope.
- Post Exploitation: menilai dampaknya, misalnya data apa yang terjangkau.
- Reporting: menulis temuan dan rekomendasinya.
Alat yang sering muncul di laporan: Burp Suite dan ZAP, keduanya intercepting proxy. Proxy duduk di antara browser tester dan server, menangkap tiap request supaya bisa diperiksa dan diubah sebelum diteruskan.
Triage laporan scanner
Scanner otomatis cepat, tapi dia menebak dari tanda-tanda. Setiap temuannya harus dicek manusia dulu: valid, false positive, atau di luar scope. Laporan scanner di Lab punya empat temuan:
| # | Temuan scanner | Host | Hasil triage |
|---|---|---|---|
| 1 | Header HSTS gak ada | app.belajarweb.example |
valid: response memang tanpa Strict-Transport-Security |
| 2 | Possible SQL injection di ?id= |
api.belajarweb.example |
false positive: query memakai prepared statement, status 500 muncul untuk input apa pun yang bukan angka |
| 3 | Library JavaScript versi lama | pay.partner.example |
di luar scope: jangan diuji, kabari kontak klien |
| 4 | Directory listing aktif di /uploads/ |
app.belajarweb.example |
valid: halaman Index of /uploads/ menampilkan file pengguna |
Jadi "Possible SQL injection" gak langsung masuk laporan sebagai temuan kritis. Kode yang memakai prepared statement gak bisa disuntik lewat id, jadi temuan itu false positive. Itu jawaban tebakannya. Status 500-nya tetap dicatat sebagai temuan kecil terpisah: id harus divalidasi dan dijawab 400.
Menulis temuan
Satu temuan yang baik bisa dipahami developer tanpa bertanya balik. Temuan #4 dari Lab:
## Directory listing aktif di /uploads/
Severity : High (CVSS 3.1: 7,5)
Lokasi : https://app.belajarweb.example/uploads/
Bukti : response 200 berjudul "Index of /uploads/", berisi 1.284 file
termasuk ktp-budi.jpg (tangkapan layar terlampir)
Reproduksi : buka alamat itu di browser tanpa login; server menampilkan
daftar file di folder itu
Dampak : siapa pun bisa mengunduh foto KTP pengguna tanpa login
Rekomendasi : matikan autoindex untuk /uploads/ di Nginx, simpan upload di
luar folder publik, sajikan lewat route yang mengecek hak akses
Status : Open
- Severity memakai skala CVSS: Low 0,1 sampai 3,9, Medium 4,0 sampai 6,9, High 7,0 sampai 8,9, Critical 9,0 sampai 10,0. Ia menggabungkan seberapa mudah celah dipakai dan seberapa parah akibatnya.
- Bukti adalah apa yang tester lihat, dengan waktu dan tangkapan layar, bukan dugaan.
- Reproduksi ditulis sebagai deskripsi langkah, cukup supaya developer bisa melihat masalahnya sendiri.
- Rekomendasi menyebut perbaikan yang bisa dikerjakan, bukan cuma "perbaiki keamanannya".
Retest
Setelah developer men-deploy perbaikan, statusnya jadi Fixed (menunggu retest), belum selesai. Tester mengulang pengecekan yang sama dan mencatat hasilnya: kalau /uploads/ sekarang menjawab 403 Forbidden, temuan ditutup jadi Closed (verified) dengan bukti retest-nya. Kalau masih terbuka, temuan tetap Open.
⚠️ Jebakan yang sering ketemu
- Mulai tanpa izin tertulis. Niat baik gak menggantikan izin. Tanpa surat dari pemilik sistem, itu bukan pentest.
- Ikut menguji sistem di luar scope. Pihak ketiga yang terhubung belum memberimu izin. Catat dan kabari kontak klien.
- Menyalin laporan scanner mentah-mentah. False positive bikin developer membuang waktu dan berhenti percaya pada laporanmu. Triage dulu.
- Menutup temuan tanpa retest. "Sudah di-deploy" belum berarti sudah benar. Status Closed butuh bukti retest.
TL;DR: Pentest adalah pengujian keamanan dengan izin tertulis pemilik sistem, di dalam scope dan rules of engagement yang disepakati (jendela waktu, teknik terlarang, kontak darurat). PTES punya tujuh fase: Pre-engagement, Intelligence Gathering atau reconnaissance (fase teknis pertama), Threat Modeling, Vulnerability Analysis, Exploitation, Post Exploitation, Reporting. Burp Suite dan ZAP adalah intercepting proxy. Hasil scanner di-triage dulu: valid, false positive, atau di luar scope. Temuan ditulis dengan severity (skala CVSS), lokasi, bukti, langkah reproduksi sebagai deskripsi, dampak dan rekomendasi, lalu ditutup cuma setelah retest membuktikan perbaikannya.