What problem does it solve?
Server-side template injection (SSTI) testing requires knowing which template engine is running before any payload will work, and each engine (Jinja2, Twig, FreeMarker, Mako, Django, Pug) has completely different exploitation chains. This Skill provides a phased decision-tree workflow that takes a tester from injection-point discovery through engine fingerprinting to engine-specific exploitation, avoiding wasted attempts with incompatible payloads.
Core Features & Use Cases
- Detection decision trees: Step-by-step probe sequences (
{{7*7}}, ${7*7}, <%= 7*7 %>, #{7*7}) that distinguish Jinja2 from Twig, FreeMarker, ERB, Pug, Razor, and Smarty based on response differences.
- Engine-specific exploitation references: Dedicated reference files covering Jinja2 context-variable reads, file reads, and RCE chains (lipsum/cycler globals), FreeMarker
?new() Execute chains, Twig filter-based RCE, and Django context-variable enumeration.
- Filter bypass techniques: Documented workarounds for blacklists on underscores, dots, quotes, keywords, and numbers, including
attr() filter chains, hex encoding, and request.args external parameter passing.
- Use Case: During a web pentest, a
/render?template= parameter reflects user input. Following the Skill, you send {{7*7}}, confirm Jinja2 via {{7*'7'}} returning 7777777, read the Jinja2 reference, and escalate from {{config}} to the lipsum RCE chain to read the flag file.
Quick Start
Ask the AI to test a reflecting parameter for SSTI by sending {{7*7}} and following the engine identification decision tree to select the right exploitation payload.