Server-Side Attacks
Five distinct vulnerability classes that share one property: they make the application server execute, fetch, render, or include something on the attacker’s behalf. Different bugs, different payloads, different detection - group them by what the application is being tricked into doing.
| Class | Server is tricked into… | Start here |
|---|---|---|
| Intermediary service abuse | Routing through an unintended protocol/port (AJP, FastCGI) | Intermediary |
| SSRF | Issuing HTTP/protocol requests to attacker-chosen targets | SSRF |
| SSI / ESI injection | Parsing attacker-supplied include directives | Server-Side Includes |
| SSTI | Evaluating attacker-supplied template expressions | SSTI |
| XSLT injection | Performing attacker-controlled XML transformations | XSLT |
Decision flow
Section titled “Decision flow”- Open port that doesn’t speak HTTP (8009, 9000, 1099, 11211) → Intermediary services
- Parameter that takes a URL or hostname (avatar fetcher, webhook, “test connection,” PDF-from-URL) → SSRF
{{...}}evaluates as math ({{7*7}}returns 49) → SSTI<!--#... -->directives processed by the page → SSI<esi:...>tags fetched by an upstream surrogate → ESI- Application transforms XML you control with a stylesheet → XSLT
- No idea where to start → SSRF - most prevalent and highest-yield
Placeholder legend
Section titled “Placeholder legend”| Placeholder | Meaning |
|---|---|
<TARGET>
| External target host or URL (the public-facing app) |
<INTERNAL_HOST>
| Internal target reachable only via SSRF/proxy |
<METADATA_IP>
| Cloud metadata endpoint (169.254.169.254 for AWS/Azure/GCP/Alibaba; varies elsewhere) |
<PARAM>
| Vulnerable parameter name |
<COLLAB>
| OOB callback host (Burp Collaborator, interactsh, your VPS) |
<ATTACKER>
| Your host for HTTP/DNS exfil and OOB callbacks |
<LHOST>
,
<LPORT>
| Reverse shell listener |
<TOKEN>
,
<HASH>
| Captured credentials, session tokens |
Scope notes
Section titled “Scope notes”Operating notes
Section titled “Operating notes”The bugs in this section often chain. SSRF reaches an internal service that is vulnerable to SSTI, which yields RCE. AJP exposes a Tomcat manager that accepts a war upload. SSI executes a command that triggers an outbound DNS request used as a confirmation channel. The decision flow above is a starting point - the real engagement is recognizing when one primitive sets up another.