Labs de SSTI
Server-Side Template Injection (SSTI)
Deja de leer sobre bugs y empieza a cazarlos
Sin tarjeta · Academy gratis · cancela cuando quieras
¿Qué es SSTI?
La SSTI ocurre cuando entrada del usuario se concatena en un template renderizado server-side (Jinja2, Twig, FreeMarker, Velocity, Handlebars). Casi siempre escala a RCE porque los engines de template tienen acceso al runtime del lenguaje host.
¿Por qué practicar SSTI?
SSTI es de las vulnerabilidades de mayor impacto: detección rápida con `{{7*7}}` o `${7*7}`, escalada casi garantizada a RCE. Aparece en emails templated, error pages personalizadas y CMS configurables. Bounties P1 frecuentes en programs maduros.
¿Qué aprenderás con los labs de SSTI?
Aprenderás el flow de detección (basic + polyglot payloads), identificación del engine (Jinja2 vs Twig vs FreeMarker tienen syntaxis distinta), escalada a RCE específica por engine (`__class__.__mro__` en Python, `Runtime.getRuntime()` en Java), y bypass de sandboxes débiles.
Tipos de SSTI que cubrimos
- Jinja2 / Flask
{{7*7}} → 49. Escalada con {{config.__class__.__init__.__globals__[...]}} → os.system.
- Twig / Symfony
{{7*7}} → 49. Escalada con {{_self.env.registerUndefinedFilterCallback('exec')}}.
- FreeMarker / Velocity
Java-based. ${7*7} o ${'a'?upper_case}. RCE via freemarker.template.utility.Execute.
- Handlebars / Node
Más restrictivo, pero escalable con prototype pollution o helpers expuestos.
¿Cómo encontrar y explotar SSTI?
Playbook práctico — del recon a la prueba de concepto.
- 1
Detectar la inyección
Mete una expresión matemática en sintaxis de varios engines. Si la respuesta devuelve el resultado evaluado (no el literal), hay SSTI.
{{7*7}} → 49 · ${7*7} → 49 · #{7*7} · <%= 7*7 %> - 2
Distinguir SSTI de XSS
Usa un polyglot que rompa en cualquier contexto y observa qué se evalúa server-side frente a lo que solo se refleja.
${{<%[%'"}}%\ - 3
Identificar el engine
Cada motor responde distinto a payloads específicos. Esto define la cadena de escalada a RCE.
{{7*'7'}} → 7777777 (Jinja2) | 49 (Twig) - 4
Escalar a RCE en Jinja2
Recorre la jerarquía de objetos Python hasta os para ejecutar comandos. El gadget cycler/lipsum es de los más fiables.
{{cycler.__init__.__globals__.os.popen('id').read()}} - 5
Escalar a RCE en otros engines
En Twig usa el callback de filtros; en FreeMarker la utilidad Execute. Adapta el payload al motor detectado.
Twig: {{['id']|filter('system')}} · FreeMarker: ${"freemarker.template.utility.Execute"?new()("id")}
Cargando labs...
Ver en catálogo completo →Preguntas frecuentes
¿Qué es una SSTI?
Server-Side Template Injection ocurre cuando input del usuario se inserta en una plantilla que se renderiza en el servidor (Jinja2, Twig, FreeMarker). El motor evalúa el payload como código, lo que casi siempre permite escalar a ejecución remota de comandos.
¿Cómo se explota una SSTI?
Primero se detecta con expresiones como {{7*7}} que devuelven 49. Luego se identifica el motor y se usa su cadena específica para acceder al runtime: en Jinja2 se navega __class__/__globals__ hasta os.popen para ejecutar comandos.
¿Cómo encontrar SSTI en bug bounty?
Prueba payloads de plantilla en cualquier campo que acabe renderizado: nombres de perfil, asuntos de email, plantillas de factura, error pages personalizables y CMS. Si {{7*7}} o ${7*7} devuelve 49, tienes SSTI.
¿Cómo prevenir la SSTI?
Nunca construyas plantillas concatenando input del usuario; pasa los datos como variables de contexto, usa motores con sandbox y logic-less (como Mustache) para contenido de usuario y restringe los objetos/atributos accesibles desde el template.
¿Diferencia entre SSTI y XSS?
La SSTI se evalúa en el servidor y suele acabar en RCE; el XSS se ejecuta en el navegador de la víctima. Un mismo input reflejado puede ser solo XSS (si solo lo interpreta el browser) o SSTI (si el motor de plantillas lo evalúa antes): {{7*7}}=49 lo confirma.
Otras categorías relacionadas
hunters entrenando
labs de hackeos reales
completaciones
pagados por estos bugs
La checklist que repaso en cada objetivo nuevo
47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.
Te das de baja en un clic, desde cualquier correo.
Practica SSTI en labs reales
Cada lab de SSTI replica un reporte real de bug bounty que se pagó. Crea tu cuenta gratis, empieza por la Academy y pasa a los labs cuando quieras.
Sin tarjeta · Academy gratis · cancela cuando quieras
La comunidad
Esto no es una plataforma con usuarios.Es gente rompiendo lo mismo que tú.
Dentro se pregunta, se enseña lo que se ha encontrado y se resuelve en grupo lo que atascaría a cualquiera solo. Se entra gratis: sin cuenta, sin plan y sin dejar el correo.

Es gratis y abierto. No hace falta tener cuenta en BBLABS para entrar.