⚠ Intentionally vulnerable.
Every endpoint here has a real server-side template injection bug. Find it, exploit it, see what your tools see.
SSTI labs
ssti.vulnlab.dev
Five labs covering the server-side template injection surface most tools care about: textbook Jinja2 RCE via render_template_string, Python str.format() attribute-walk SSTI (a separate sink class), substring-blocklist bypass, sandbox bypass through an over-privileged registered helper, and second-order SSTI where storage and render happen on different requests.
Each lab's per-lab flag string is in app.config under VULNLAB_SSTI_<slug>. In Flask, Jinja2 templates have access to config — that's the textbook extraction path.
Source for every lab is published. Each lab page links to its own source via /source/<slug>. Each lab also exposes a JSON detection hint at /meta/<slug> (and an index at /meta/) describing what a scanner should report: CWE, subtype, sinks, exploit examples, success markers, tags.