# Unicode Injection {{#include ../../banners/hacktricks-training.md}} ## Wprowadzenie W zależności od tego, jak zachowuje się back-end/front-end, gdy **otrzymuje dziwne znaki unicode**, atakujący może być w stanie **obejść zabezpieczenia i wstrzyknąć dowolne znaki**, które mogą być użyte do **wykorzystania luk w wstrzykiwaniu**, takich jak XSS czy SQLi. ## Normalizacja Unicode Normalizacja Unicode zachodzi, gdy **znaki unicode są normalizowane do znaków ascii**. Jednym z powszechnych scenariuszy tego typu luki 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 do zamiany **wejścia na wielkie lub małe litery** może znormalizować dane wejściowe, a **unicode zostanie przekształcone na ASCII**, generując nowe znaki.\ Aby uzyskać więcej informacji, sprawdź: {{#ref}} unicode-normalization.md {{#endref}} ## `\u` do `%` Znaki unicode są zazwyczaj reprezentowane z **prefiksem `\u`**. Na przykład znak `㱋` to `\u3c4b`([sprawdź to tutaj](https://unicode-explorer.com/c/3c4B)). Jeśli backend **przekształca** prefiks **`\u` na `%`**, wynikowy ciąg będzie `%3c4b`, który po dekodowaniu URL to: **`<4b`**. I, jak widać, **znak ` < ` jest wstrzykiwany**.\ Możesz użyć tej techniki do **wstrzykiwania dowolnego rodzaju znaku**, jeśli backend jest podatny.\ Sprawdź [https://unicode-explorer.com/](https://unicode-explorer.com/), aby znaleźć potrzebne znaki. Ta luka pochodzi z rzeczywistej luki, 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 Back-endy zachowują się dziwnie, gdy **otrzymują emoji**. Tak było w [**tym opisie**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209), gdzie badacz zdołał osiągnąć XSS z ładunkiem takim jak: `💋img src=x onerror=alert(document.domain)//💛` W tym przypadku błąd polegał na tym, że serwer po usunięciu złośliwych znaków **przekonwertował ciąg UTF-8 z Windows-1252 na UTF-8** (w zasadzie kodowanie wejściowe i konwersja kodowania były niezgodne). Wtedy to nie daje poprawnego <, tylko dziwne unicode: `‹`\ ``Więc wzięli ten wynik i **przekonwertowali ponownie z UTF-8 na ASCII**. To **znormalizowało** `‹` do ` < `, w ten sposób exploit mógł działać w tym systemie.\ To, co się wydarzyło: ```php