<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
[**RootedCON**](https://www.rootedcon.com) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
Server-side template injection to podatność, która występuje, gdy atakujący może wstrzyknąć złośliwy kod do szablonu, który jest wykonywany po stronie serwera. Ta podatność może występować w różnych technologiach, w tym w Jinja.
Jinja to popularny silnik szablonów używany w aplikacjach internetowych. Przyjrzyjmy się przykładowemu kodowi demonstrującemu podatny fragment kodu z użyciem Jinja:
W tym podatnym kodzie, parametr `name` z żądania użytkownika jest bezpośrednio przekazywany do szablonu za pomocą funkcji `render`. Może to potencjalnie umożliwić atakującemu wstrzyknięcie złośliwego kodu do parametru `name`, co prowadzi do wstrzyknięcia szablonu po stronie serwera.
Payload `{{zły-kod-tutaj}}` jest wstrzykiwany do parametru `name`. Ten payload może zawierać dyrektywy szablonu Jinja, które umożliwiają atakującemu wykonanie nieautoryzowanego kodu lub manipulację silnikiem szablonów, co potencjalnie daje mu kontrolę nad serwerem.
Aby zapobiec podatnościom na wstrzykiwanie szablonów po stronie serwera, programiści powinni upewnić się, że dane wprowadzane przez użytkownika są odpowiednio oczyszczone i zweryfikowane przed wstawieniem ich do szablonów. Wdrożenie walidacji danych wejściowych i użycie technik unikania kontekstu może pomóc w ograniczeniu ryzyka związanego z tą podatnością.
Aby wykryć wstrzykiwanie szablonów po stronie serwera (SSTI), początkowo **fuzzowanie szablonu** jest prostym podejściem. Polega to na wstrzyknięciu sekwencji specjalnych znaków (**`${{<%[%'"}}%\`**) do szablonu i analizowaniu różnic w odpowiedzi serwera na zwykłe dane w porównaniu do tego specjalnego payloadu. Wskaźnikami podatności są:
- Wyrzucane błędy, ujawniające podatność i potencjalnie silnik szablonów.
- Brak payloadu w odbiciu lub brak niektórych jego części, co sugeruje, że serwer przetwarza go inaczej niż zwykłe dane.
- **Kontekst kodu**: Potwierdzenie podatności poprzez zmianę parametrów wejściowych. Na przykład zmiana `greeting` w `http://vulnerable-website.com/?greeting=data.username`, aby sprawdzić, czy wynik serwera jest dynamiczny czy stały, jak w przypadku `greeting=data.username}}hello`, zwracający nazwę użytkownika.
Identyfikacja silnika szablonów polega na analizie komunikatów o błędach lub ręcznym testowaniu różnych payloadów specyficznych dla języka. Wspólne payloady powodujące błędy to `${7/0}`, `{{7/0}}` i `<%= 7/0 %>`. Obserwowanie odpowiedzi serwera na operacje matematyczne pomaga zlokalizować konkretny silnik szablonów.
SSTImap jest narzędziem do automatycznego wykrywania i eksploatacji podatności Server-Side Template Injection (SSTI) w aplikacjach internetowych. Narzędzie to zostało opracowane w celu ułatwienia testowania penetracyjnego i identyfikacji luk w zabezpieczeniach aplikacji.
#### Wprowadzenie
Server-Side Template Injection (SSTI) to podatność, która występuje, gdy aplikacja internetowa umożliwia wstrzykiwanie kodu szablonu po stronie serwera. W przypadku wystąpienia tej podatności, atakujący może wykorzystać ją do wykonania dowolnego kodu na serwerze, co może prowadzić do naruszenia poufności danych, utraty integralności systemu lub innych poważnych konsekwencji.
#### Wykorzystanie
SSTImap automatycznie wykrywa podatności SSTI w aplikacjach internetowych, przeprowadzając testy wstrzykiwania kodu szablonu na różnych parametrach żądania. Narzędzie to obsługuje wiele popularnych języków szablonów, takich jak Jinja2, Twig, Smarty, Freemarker i inne.
Aby rozpocząć skanowanie, wystarczy podać adres URL aplikacji docelowej. SSTImap automatycznie przeprowadzi testy na wszystkich dostępnych parametrach żądania, aby zidentyfikować potencjalne podatności SSTI.
#### Instalacja
Aby zainstalować SSTImap, wykonaj następujące kroki:
1. Sklonuj repozytorium SSTImap z [https://github.com/vladko312/sstimap](https://github.com/vladko312/sstimap).
Po zakończeniu skanowania, SSTImap wygeneruje raport zawierający informacje o znalezionych podatnościach SSTI.
#### Podsumowanie
SSTImap jest przydatnym narzędziem do automatycznego wykrywania i eksploatacji podatności SSTI w aplikacjach internetowych. Dzięki temu narzędziu można szybko zidentyfikować potencjalne luki w zabezpieczeniach i podjąć odpowiednie działania w celu ich naprawy.
Tplmap to skrypt Pythona służący do automatycznego wykrywania i eksploatacji podatności Server-Side Template Injection (SSTI). Skrypt ten może być używany do testowania aplikacji internetowych pod kątem potencjalnych luk w zabezpieczeniach SSTI.
interaktywna tabela zawierająca najbardziej wydajne poligloty wstrzykiwania szablonów wraz z oczekiwanymi odpowiedziami 44 najważniejszych silników szablonów.
Aby pobrać zmienne środowiskowe systemu w języku Java, możemy skorzystać z klasy `System` i jej metody `getenv()`. Metoda ta zwraca mapę, która zawiera wszystkie zmienne środowiskowe systemu wraz z ich wartościami.
Ten kod iteruje przez wszystkie zmienne środowiskowe systemu i wyświetla ich nazwy oraz wartości na konsoli. Możemy go dostosować, aby wykonał inne operacje na zmiennych środowiskowych w zależności od naszych potrzeb.
W przypadku ataku Server-Side Template Injection (SSTI) na aplikację napisaną w języku Java, możemy próbować odzyskać zawartość pliku /etc/passwd. Poniżej znajduje się przykładowy kod, który można wykorzystać do tego celu:
Ten kod wykonuje polecenie systemowe `cat /etc/passwd` i odczytuje wynik. Następnie wypisuje zawartość pliku /etc/passwd na standardowe wyjście. Pamiętaj, że ten kod jest tylko przykładem i powinien być używany wyłącznie w celach edukacyjnych lub zgodnie z prawem.
* W sekcji FreeMarker na stronie [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
* W sekcji Velocity na stronie [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
W Thymeleaf, powszechnym testem podatności na SSTI jest wyrażenie `${7*7}`, które również dotyczy tego silnika szablonów. Aby potencjalnie wykonać zdalny kod, można użyć wyrażeń takich jak:
Thymeleaf wymaga, aby te wyrażenia były umieszczone w określonych atrybutach. Jednak _wstawianie wyrażeń_ jest obsługiwane dla innych lokalizacji szablonów, za pomocą składni `[[...]]` lub `[(...)]`. W związku z tym, prosty ładunek testowy SSTI może wyglądać tak: `[[${7*7}]]`.
Jednak szansa na powodzenie tego ładunku jest zazwyczaj niska. Domyślna konfiguracja Thymeleaf nie obsługuje dynamicznego generowania szablonów; szablony muszą być zdefiniowane z góry. Programiści musieliby zaimplementować własny `TemplateResolver`, aby tworzyć szablony ze stringów w locie, co jest rzadkie.
Thymeleaf oferuje również _preprocessing wyrażeń_, gdzie wyrażenia wewnątrz podwójnych podkreślników (`__...__`) są przetwarzane przed wykonaniem. Ta funkcja może być wykorzystana przy konstrukcji wyrażeń, jak pokazano w dokumentacji Thymeleaf:
To wskazuje, że jeśli silnik szablonów nieprawidłowo przetwarza te dane wejściowe, może to prowadzić do zdalnego wykonania kodu, uzyskując dostęp do adresów URL takich jak:
* [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd)
Jinjava to silnik szablonów dla języka Java, który obsługuje wstrzykiwanie kodu po stronie serwera (Server-Side Template Injection - SSTI). Jest to popularna technika wykorzystywana przez hakerów do wykonania kodu na serwerze i uzyskania nieautoryzowanego dostępu.
#### Jak działa Jinjava?
Jinjava działa poprzez umożliwienie programistom tworzenia szablonów, które mogą być dynamicznie renderowane na serwerze. Jednak jeśli nie są odpowiednio zabezpieczone, szablony te mogą być podatne na wstrzykiwanie kodu. Hakerzy mogą wykorzystać tę lukę, aby wstrzyknąć złośliwy kod i wykonać go na serwerze.
#### Wykrywanie i wykorzystywanie SSTI w Jinjava
Aby wykryć i wykorzystać SSTI w Jinjava, hakerzy mogą przeprowadzić testy, wstrzykując kod w różne miejsca w szablonach i obserwując, czy zostaje on wykonany. Jeśli kod zostaje wykonany, oznacza to, że serwer jest podatny na SSTI.
Hakerzy mogą również wykorzystać różne techniki, takie jak wstrzykiwanie kodu Pythona, aby uzyskać dostęp do wrażliwych danych na serwerze. Przykładowe techniki obejmują wywoływanie funkcji systemowych, odczytywanie plików i wykonanie dowolnego kodu Pythona.
#### Zabezpieczanie się przed SSTI w Jinjava
Aby zabezpieczyć się przed SSTI w Jinjava, programiści powinni:
- Unikać bezpośredniego wstrzykiwania danych użytkownika do szablonów.
- Sprawdzać i filtrować dane wejściowe, aby upewnić się, że nie zawierają złośliwego kodu.
- Używać wbudowanych funkcji i metod do bezpiecznego przetwarzania danych w szablonach.
- Regularnie aktualizować silnik Jinjava, aby korzystać z najnowszych poprawek zabezpieczeń.
Ważne jest, aby programiści byli świadomi zagrożeń związanych z SSTI w Jinjava i podejmowali odpowiednie środki ostrożności, aby zabezpieczyć swoje aplikacje przed atakami.
Jinjava to projekt open source rozwijany przez Hubspot, dostępny pod adresem [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)
//Here, I created a variable 'ji' with new instance of com.hubspot.jinjava.Jinjava class and obtained reference to the newInterpreter method. In the next block, I called the render method on 'ji' with expression {{1*2}}.
Expression Language (EL) to podstawowa funkcja, która ułatwia interakcję między warstwą prezentacji (takimi jak strony internetowe) a logiką aplikacji (takimi jak zarządzane beany) w JavaEE. Jest szeroko stosowany w wielu technologiach JavaEE, aby usprawnić tę komunikację. Główne technologie JavaEE wykorzystujące EL to:
- **JavaServer Faces (JSF)**: Wykorzystuje EL do powiązania komponentów na stronach JSF z odpowiadającymi danymi i działaniami w backendzie.
- **JavaServer Pages (JSP)**: EL jest używany w JSP do dostępu i manipulacji danymi wewnątrz stron JSP, ułatwiając połączenie elementów strony z danymi aplikacji.
- **Contexts and Dependency Injection for Java EE (CDI)**: EL integruje się z CDI, umożliwiając płynną interakcję między warstwą internetową a zarządzanymi beanami, zapewniając bardziej spójną strukturę aplikacji.
Następujące obejścia Security Managera zostały zaczerpnięte z tego [**opisu**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając na celu promowanie wiedzy technicznej, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
* W sekcji Smarty na stronie [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
Twig jest popularnym językiem szablonów używanym w wielu frameworkach internetowych, takich jak Symfony czy Laravel. Jest to język oparty na składni szablonów, który umożliwia programistom tworzenie dynamicznych stron internetowych. Twig jest bezpieczny i chroni przed atakami takimi jak Server-Side Template Injection (SSTI).
**Server-Side Template Injection (SSTI) w Twig**
Server-Side Template Injection (SSTI) to technika ataku, która polega na wstrzykiwaniu kodu szablonu po stronie serwera. W przypadku Twig, SSTI może wystąpić, gdy nieprawidłowo walidowane dane użytkownika są wstrzykiwane bezpośrednio do szablonu Twig. Atakujący może wykorzystać tę lukę, aby wykonać kod na serwerze i uzyskać dostęp do poufnych danych lub zdalnie kontrolować aplikację.
**Przykład SSTI w Twig**
Poniżej przedstawiono przykład kodu Twig, który jest podatny na SSTI:
```twig
{{ user_input }}
```
W powyższym przykładzie `user_input` jest bezpośrednio wstrzykiwane do szablonu Twig. Jeśli atakujący dostarczy złośliwy kod jako `user_input`, może to prowadzić do wykonania niebezpiecznych operacji na serwerze.
Aby zapobiec atakom SSTI w Twig, należy zawsze prawidłowo walidować i filtrować dane użytkownika przed ich wstrzykiwaniem do szablonów. Należy unikać bezpośredniego wstrzykiwania niezaufanych danych do szablonów i zawsze używać bezpiecznych metod dostarczanych przez Twig, takich jak `escape` lub `raw`.
Server-Side Template Injection (SSTI) to poważna luka w zabezpieczeniach, która może prowadzić do poważnych konsekwencji. W przypadku Twig, należy zawsze dbać o prawidłowe walidowanie i filtrowanie danych użytkownika, aby zapobiec atakom SSTI.
* W sekcji Twig i Twig (Sandboxed) na stronie [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
Plates to silnik szablonów natywny dla PHP, czerpiący inspirację z Twig. Jednak w przeciwieństwie do Twig, który wprowadza nową składnię, Plates wykorzystuje natywny kod PHP w szablonach, co czyni go intuicyjnym dla programistów PHP.
Server-Side Template Injection (SSTI) is a vulnerability that allows an attacker to inject malicious code into a server-side template, which is then executed by the server. This can lead to remote code execution (RCE) and other serious security issues.
In the `authors.php` file, there may be a vulnerability that allows for SSTI. By injecting malicious code into the server-side template, an attacker can execute arbitrary commands on the server.
To exploit this vulnerability, follow these steps:
1. Identify the injection point: Look for user-controlled input that is directly used in the template engine. This can include variables, function calls, or other template constructs.
2. Craft the payload: Construct a payload that will execute the desired command on the server. This can vary depending on the template engine being used.
3. Inject the payload: Submit the payload through the user-controlled input to trigger the SSTI vulnerability.
4. Verify the exploitation: Check if the injected code is executed by observing the server's response or by checking for the desired side effects.
## Prevention and Mitigation
To prevent SSTI vulnerabilities, follow these best practices:
- Input validation and sanitization: Always validate and sanitize user input before using it in a template engine. This can help prevent malicious code injection.
- Template engine configuration: Configure the template engine to restrict access to sensitive server-side functions and variables.
- Least privilege principle: Ensure that the server-side code has the minimum necessary permissions to prevent unauthorized access.
- Regular updates: Keep the template engine and server software up to date to patch any known vulnerabilities.
By following these practices, you can reduce the risk of SSTI vulnerabilities and protect your server from potential attacks.
* W sekcji Jade na stronie [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
> [patTemplate](https://github.com/wernerwa/pat-template) to niekompilujący silnik szablonów PHP, który używa znaczników XML do podziału dokumentu na różne części.
> Jinja2 to zaawansowany silnik szablonów dla Pythona. Posiada pełne wsparcie dla Unicode, opcjonalne zintegrowane środowisko wykonawcze w trybie piaskownicy, jest szeroko stosowany i posiada licencję BSD.
Jinja2 jest silnym i elastycznym silnikiem szablonów, który jest szeroko stosowany w aplikacjach internetowych opartych na Pythonie. Szablon Jinja2 składa się z tekstu i wyrażeń, które są otoczone podwójnymi nawiasami klamrowymi `{{ }}` lub podwójnymi nawiasami klamrowymi z procentami `{% %}`. Wyrażenia wewnątrz tych nawiasów są ewaluowane i zastępowane wartościami podczas renderowania szablonu.
**Podatność na Server-Side Template Injection (SSTI)**
Server-Side Template Injection (SSTI) to podatność, która występuje, gdy aplikacja internetowa umożliwia użytkownikom wprowadzanie kodu szablonu, który jest następnie ewaluowany i wykonany po stronie serwera. Jeśli aplikacja nie sprawdza i nie waliduje danych wejściowych, atakujący może wstrzyknąć złośliwy kod szablonu, co może prowadzić do wykonania dowolnego kodu na serwerze.
Aby wykorzystać podatność SSTI w Jinja2, atakujący musi znaleźć miejsce, w którym aplikacja umożliwia wstrzyknięcie kodu szablonu. Następnie atakujący może użyć różnych technik, takich jak wstrzykiwanie zmiennych, wywoływanie funkcji, iterowanie po obiektach, aby manipulować kodem szablonu i osiągnąć wykonanie dowolnego kodu na serwerze.
- Unikać bezpośredniego wstrzykiwania danych wejściowych do kodu szablonu.
- Używać bezpiecznych metod renderowania szablonów, które automatycznie unikają ewaluacji niebezpiecznego kodu.
**Podsumowanie**
Podatność na Server-Side Template Injection (SSTI) w Jinja2 może prowadzić do poważnych konsekwencji, takich jak wykonanie dowolnego kodu na serwerze. Aby zabezpieczyć się przed tym rodzajem ataku, należy dokładnie sprawdzać i walidować dane wejściowe oraz unikać bezpośredniego wstrzykiwania ich do kodu szablonu.
Inne ładunki w [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
Metoda `.NET``System.Diagnostics.Process.Start` może być użyta do uruchomienia dowolnego procesu na serwerze i tym samym utworzenia webshell. Przykład podatnej aplikacji internetowej można znaleźć w [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
*`{{ . }}`: Ujawnia strukturę danych wejściowych. Na przykład, jeśli przekazany zostanie obiekt z atrybutem `Password`, `{{ .Password }}` może go ujawnić.
*`{{html "ssti"}}`, `{{js "ssti"}}`: Te payloady powinny zwrócić "ssti" bez dodawania "html" lub "js". Więcej dyrektyw można znaleźć w dokumentacji Go [tutaj](https://golang.org/pkg/text/template).
Z pakietem `text/template` XSS może być prosty poprzez bezpośrednie wstawienie payloadu. W przeciwnym razie pakiet `html/template` koduje odpowiedź, aby temu zapobiec (np. `{{"<script>alert(1)</script>"}}` daje wynik `<script>alert(1)</script>`). Niemniej jednak, definicja i wywołanie szablonu w Go mogą ominąć to kodowanie:
Eksploatacja RCE różni się znacznie między `html/template` a `text/template`. Moduł `text/template` pozwala na bezpośrednie wywoływanie dowolnej publicznej funkcji (za pomocą wartości "call"), co nie jest dozwolone w `html/template`. Dokumentacja dla tych modułów jest dostępna [tutaj dla html/template](https://golang.org/pkg/html/template/) i [tutaj dla text/template](https://golang.org/pkg/text/template/).
W przypadku RCE za pomocą SSTI w Go można wywoływać metody obiektu. Na przykład, jeśli dostarczony obiekt ma metodę `System` wykonującą polecenia, można ją wykorzystać w ten sposób: `{{ .System "ls" }}`. Zazwyczaj konieczne jest uzyskanie dostępu do kodu źródłowego, jak w podanym przykładzie:
Sprawdź resztę [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) dla więcej ataków. Możesz również znaleźć interesujące informacje o tagach w [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Z misją promowania wiedzy technicznej, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.