Translated ['pentesting-web/ssti-server-side-template-injection/jinja2-s

This commit is contained in:
Translator 2024-06-04 22:08:08 +00:00
parent 3b8552f034
commit ad583e3eef

View file

@ -6,11 +6,11 @@
Inne sposoby wsparcia HackTricks: Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)! * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **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)**.** * **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) repozytoriów na GitHubie. * **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) repozytoriów na githubie.
</details> </details>
@ -30,8 +30,6 @@ return "Hello, send someting inside the param 'c'!"
if __name__ == "__main__": if __name__ == "__main__":
app.run() app.run()
``` ```
## **Różne**
### **Polecenie Debugowania** ### **Polecenie Debugowania**
Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wypisania bieżącego kontekstu oraz dostępnych filtrów i testów. Jest to przydatne do zobaczenia, co jest dostępne do użycia w szablonie bez konieczności ustawiania debugera. Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wypisania bieżącego kontekstu oraz dostępnych filtrów i testów. Jest to przydatne do zobaczenia, co jest dostępne do użycia w szablonie bez konieczności ustawiania debugera.
@ -47,7 +45,7 @@ Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wypi
</pre> </pre>
``` ```
### **Wyrzuć wszystkie zmienne konfiguracyjne** ### **Wyrzucenie wszystkich zmiennych konfiguracyjnych**
```python ```python
{{ config }} #In these object you can find all the configured env variables {{ config }} #In these object you can find all the configured env variables
@ -63,12 +61,12 @@ Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wypi
``` ```
## **Wstrzyknięcie Jinja** ## **Wstrzyknięcie Jinja**
Po pierwsze, w wstrzyknięciu Jinja musisz **znaleźć sposób na ucieczkę z piaskownicy** i odzyskanie dostępu do regularnego przepływu wykonania w Pythonie. Aby to zrobić, musisz **nadużyć obiektów**, które pochodzą **z niepiaskowanej przestrzeni roboczej, ale są dostępne z piaskownicy**. Po pierwsze, w wstrzyknięciu Jinja musisz **znaleźć sposób na ucieczkę z piaskownicy** i odzyskanie dostępu do zwykłego przepływu wykonania w Pythonie. Aby to zrobić, musisz **nadużyć obiektów**, które pochodzą **z** środowiska **bez piaskownicy, ale są dostępne z piaskownicy**.
### Dostęp do obiektów globalnych ### Dostęp do obiektów globalnych
Na przykład, w kodzie `render_template("hello.html", username=username, email=email)` obiekty username i email **pochodzą z niepiaskowanej przestrzeni roboczej Pythona** i będą **dostępne** wewnątrz **przestrzeni roboczej piaskownicy**.\ Na przykład w kodzie `render_template("hello.html", username=username, email=email)` obiekty username i email **pochodzą z niezabezpieczonego środowiska Pythona** i będą **dostępne** wewnątrz **środowiska z piaskownicą**.\
Co więcej, istnieją inne obiekty, które będą **zawsze dostępne z przestrzeni roboczej piaskownicy**, są to: Co więcej, istnieją inne obiekty, które będą **zawsze dostępne z środowiska z piaskownicą**, są to:
``` ```
[] []
'' ''
@ -79,7 +77,7 @@ request
``` ```
### Odzyskiwanie \<class 'object'> ### Odzyskiwanie \<class 'object'>
Następnie, z tych obiektów musimy dotrzeć do klasy: **`<class 'object'>`** aby spróbować **odzyskać** zdefiniowane **klasy**. Jest to konieczne, ponieważ z tej klasy możemy wywołać metodę **`__subclasses__`** i **uzyskać dostęp do wszystkich klas z niezabezpieczonego** środowiska pythona. Następnie, z tych obiektów musimy dotrzeć do klasy: **`<class 'object'>`** aby spróbować **odzyskać** zdefiniowane **klasy**. Jest to konieczne, ponieważ z tego obiektu możemy wywołać metodę **`__subclasses__`** i **uzyskać dostęp do wszystkich klas z niezabezpieczonego** środowiska pythona.
Aby uzyskać dostęp do tej **klasy obiektu**, musisz uzyskać dostęp do **obiektu klasy** a następnie uzyskać dostęp do **`__base__`**, **`__mro__()[-1]`** lub `.`**`mro()[-1]`**. Następnie, **po** dotarciu do tej **klasy obiektu** wywołujemy **`__subclasses__()`**. Aby uzyskać dostęp do tej **klasy obiektu**, musisz uzyskać dostęp do **obiektu klasy** a następnie uzyskać dostęp do **`__base__`**, **`__mro__()[-1]`** lub `.`**`mro()[-1]`**. Następnie, **po** dotarciu do tej **klasy obiektu** wywołujemy **`__subclasses__()`**.
@ -125,7 +123,7 @@ dict.__mro__[-1]
``` ```
### Ucieczka RCE ### Ucieczka RCE
**Odzyskawszy** `<class 'object'>` i wywoławszy `__subclasses__` możemy teraz użyć tych klas do odczytywania i zapisywania plików oraz wykonywania kodu. **Po odzyskaniu** `<class 'object'>` i wywołaniu `__subclasses__` możemy teraz użyć tych klas do odczytywania i zapisywania plików oraz wykonywania kodu.
Wywołanie `__subclasses__` dało nam możliwość **dostępu do setek nowych funkcji**, będziemy zadowoleni tylko przez dostęp do klasy **pliku** do **odczytu/zapisu plików** lub dowolnej klasy z dostępem do klasy, która **pozwala na wykonywanie poleceń** (jak `os`). Wywołanie `__subclasses__` dało nam możliwość **dostępu do setek nowych funkcji**, będziemy zadowoleni tylko przez dostęp do klasy **pliku** do **odczytu/zapisu plików** lub dowolnej klasy z dostępem do klasy, która **pozwala na wykonywanie poleceń** (jak `os`).
@ -209,7 +207,7 @@ Domyślnie Flask koduje HTML we wszystkich szablonach ze względów bezpieczeńs
#will be #will be
&lt;script&gt;alert(1);&lt;/script&gt; &lt;script&gt;alert(1);&lt;/script&gt;
``` ```
**Filtr `safe`** pozwala nam wstrzyknąć JavaScript i HTML na stronę **bez** kodowania **HTML**, tak jak tutaj: **Filtr `safe`** pozwala nam wstrzyknąć JavaScript i HTML na stronę **bez** kodowania **HTML**, w ten sposób:
```python ```python
{{'<script>alert(1);</script>'|safe}} {{'<script>alert(1);</script>'|safe}}
#will be #will be
@ -239,7 +237,7 @@ Bez **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
## Wstrzyknięcie Jinja bez **\<class 'object'>** ## Wstrzyknięcie Jinja bez **\<class 'object'>**
Z [**obiektów globalnych**](jinja2-ssti.md#accessing-global-objects) istnieje inny sposób na uzyskanie **RCE bez użycia tej klasy.**\ Z [**obiektów globalnych**](jinja2-ssti.md#accessing-global-objects) istnieje inny sposób na uzyskanie **RCE bez użycia tej klasy.**\
Jeśli uda ci się uzyskać dostęp do **funkcji** z tych obiektów globalnych, będziesz mógł uzyskać dostęp do **`__globals__.__builtins__`** i stamtąd **RCE** jest bardzo **proste**. Jeśli uda ci się uzyskać dostęp do jakiejkolwiek **funkcji** z tych obiektów globalnych, będziesz mógł uzyskać dostęp do **`__globals__.__builtins__`** i stamtąd **RCE** jest bardzo **proste**.
Możesz **znaleźć funkcje** z obiektów **`request`**, **`config`** i dowolnego **innego** interesującego **obiektu globalnego**, do którego masz dostęp za pomocą: Możesz **znaleźć funkcje** z obiektów **`request`**, **`config`** i dowolnego **innego** interesującego **obiektu globalnego**, do którego masz dostęp za pomocą:
```bash ```bash
@ -282,23 +280,50 @@ Gdy już znajdziesz pewne funkcje, możesz odzyskać wbudowane funkcje za pomoc
# All the bypasses seen in the previous sections are also valid # All the bypasses seen in the previous sections are also valid
``` ```
### Fuzzing WAF bypass
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) 是一种专门用于 CTF 的工具,但也可以用于在真实场景中暴力破解无效参数。该工具只是向服务器发送单词和查询以检测过滤器,搜索绕过方式,并提供交互式控制台。
```
webui:
As the name suggests, web UI
Default port 11451
scan: scan the entire website
Extract all forms from the website based on the form element and attack them
After the scan is successful, a simulated terminal will be provided or the given command will be executed.
Example:python -m fenjing scan --url 'http://xxx/'
crack: Attack a specific form
You need to specify the form's url, action (GET or POST) and all fields (such as 'name')
After a successful attack, a simulated terminal will also be provided or a given command will be executed.
Example:python -m fenjing crack --url 'http://xxx/' --method GET --inputs name
crack-path: attack a specific path
Attack http://xxx.xxx/hello/<payload>the vulnerabilities that exist in a certain path (such as
The parameters are roughly the same as crack, but you only need to provide the corresponding path
Example:python -m fenjing crack-path --url 'http://xxx/hello/'
crack-request: Read a request file for attack
Read the request in the file, PAYLOADreplace it with the actual payload and submit it
The request will be urlencoded by default according to the HTTP format, which can be --urlencode-payload 0turned off.
```
## Odnośniki ## Odnośniki
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
* Sprawdź [szczegóły dotyczące omijania zablokowanych znaków za pomocą sztuczki attr tutaj](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3). * Sprawdź [szczegół wskazówki dotyczące omijania zablokowanych znaków tutaj](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
* [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113) * [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113)
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI) * [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
<details> <details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks: Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)! * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **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. * **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.
</details> </details>