hacktricks/pentesting-web/unicode-injection/README.md
2024-02-11 01:46:25 +00:00

74 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Wstrzykiwanie znaków Unicode
<details>
<summary><strong>Dowiedz się, jak 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ź [**PLAN SUBSKRYPCJI**](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) github repos.
</details>
## Wprowadzenie
W zależności od zachowania **serwera back-endowego/front-endowego** w przypadku, gdy otrzymuje on **dziwne znaki Unicode**, atakujący może być w stanie **obejść zabezpieczenia i wstrzyknąć dowolne znaki**, które mogą być wykorzystane do **wykorzystania podatności na wstrzykiwanie**, takie jak XSS lub SQLi.
## Normalizacja Unicode
Normalizacja Unicode występuje, gdy **znaki Unicode są normalizowane do znaków ASCII**.
Jednym z powszechnych scenariuszy tego rodzaju podatności jest sytuacja, gdy system **modyfikuje** w jakiś sposób **wejście** użytkownika **po jego sprawdzeniu**. Na przykład, w niektórych językach, proste wywołanie **zmiany wielkości liter** wejścia może spowodować normalizację podanego wejścia, a **znaki Unicode zostaną przekształcone na ASCII**, generując nowe znaki.\
Aby uzyskać więcej informacji, sprawdź:
{% content-ref url="unicode-normalization.md" %}
[unicode-normalization.md](unicode-normalization.md)
{% endcontent-ref %}
## `\u` na `%`
Znaki Unicode zwykle są reprezentowane za pomocą prefiksu **`\u`**. Na przykład znak `㱋` to `\u3c4b` ([sprawdź tutaj](https://unicode-explorer.com/c/3c4B)). Jeśli serwer **zmienia** prefiks **`\u` na `%`**, wynikowy ciąg będzie `%3c4b`, który po dekodowaniu URL to: **`<4b`**. Jak widać, zostaje **wstrzyknięty znak `<`**.\
Możesz użyć tej techniki do **wstrzykiwania dowolnego rodzaju znaków**, jeśli serwer jest podatny.\
Sprawdź [https://unicode-explorer.com/](https://unicode-explorer.com/), aby znaleźć potrzebne znaki.
Ta podatność faktycznie wynika z podatności, którą odkrył badacz. Aby uzyskać bardziej szczegółowe wyjaśnienie, sprawdź [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
## Wstrzykiwanie emoji
Serwery back-endowe czasami zachowują się dziwnie, gdy **otrzymują emoji**. Tak właśnie stało się w [**tym opisie**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209), gdzie badaczowi udało się osiągnąć XSS za pomocą payloadu takiego jak: `💋img src=x onerror=alert(document.domain)//💛`
W tym przypadku błąd polegał na tym, że serwer po usunięciu szkodliwych znaków **przekonwertował ciąg UTF-8 z Windows-1252 na UTF-8** (w zasadzie kodowanie wejściowe i konwersja z kodowania były niezgodne). W rezultacie nie otrzymujemy prawidłowego znaku `<`, a dziwny znak Unicode: ``\
``Następnie ten wynik został **ponownie przekonwertowany z UTF-8 na ASCII**. To spowodowało **normalizację** `` na `<`, dzięki czemu exploit mógł działać w tym systemie.\
Oto, co się stało:
```php
<?php
$str = isset($_GET["str"]) ? htmlspecialchars($_GET["str"]) : "";
$str = iconv("Windows-1252", "UTF-8", $str);
$str = iconv("UTF-8", "ASCII//TRANSLIT", $str);
echo "String: " . $str;
```
Listy emoji:
* [https://github.com/iorch/jakaton\_feminicidios/blob/master/data/emojis.csv](https://github.com/iorch/jakaton\_feminicidios/blob/master/data/emojis.csv)
* [https://unicode.org/emoji/charts-14.0/full-emoji-list.html](https://unicode.org/emoji/charts-14.0/full-emoji-list.html)
<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ź [**PLAN SUBSKRYPCJI**](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 github.
</details>