# Unicode normalizacija
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
**Ovo je sažetak: [https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/)**. Pogledajte za dalje detalje (slike preuzete sa tog mesta). ## Razumevanje Unicode-a i normalizacije Unicode normalizacija je proces koji osigurava da se različiti binarni prikazi karaktera standardizuju na istu binarnu vrednost. Ovaj proces je ključan prilikom rukovanja stringovima u programiranju i obradi podataka. Unicode standard definiše dve vrste ekvivalentnosti karaktera: 1. **Kanonička ekvivalentnost**: Karakteri se smatraju kanonički ekvivalentnim ako imaju isti izgled i značenje prilikom štampanja ili prikazivanja. 2. **Kompatibilna ekvivalentnost**: Slabija forma ekvivalentnosti gde karakteri mogu predstavljati isti apstraktni karakter, ali se mogu prikazivati na različite načine. Postoje **četiri algoritma za normalizaciju Unicode-a**: NFC, NFD, NFKC i NFKD. Svaki algoritam koristi kanoničku i kompatibilnu normalizaciju na različite načine. Za dublje razumevanje, možete istražiti ove tehnike na [Unicode.org](https://unicode.org/). ### Ključne tačke o kodiranju Unicode-a Razumevanje kodiranja Unicode-a je ključno, posebno prilikom rukovanja interoperabilnim problemima među različitim sistemima ili jezicima. Evo glavnih tačaka: - **Kodne tačke i karakteri**: U Unicode-u, svakom karakteru ili simbolu je dodeljena numerička vrednost poznata kao "kodna tačka". - **Prikaz bajtova**: Kodna tačka (ili karakter) se predstavlja jednim ili više bajtova u memoriji. Na primer, LATIN-1 karakteri (uobičajeni u engleskog govornom području) se predstavljaju koristeći jedan bajt. Međutim, jezici sa većim skupom karaktera zahtevaju više bajtova za prikaz. - **Kodiranje**: Ovaj termin se odnosi na način na koji se karakteri transformišu u niz bajtova. UTF-8 je dominantni standard kodiranja gde se ASCII karakteri predstavljaju koristeći jedan bajt, a do četiri bajta za ostale karaktere. - **Obrada podataka**: Sistemi koji obrađuju podatke moraju biti svesni korišćenog kodiranja kako bi ispravno konvertovali niz bajtova u karaktere. - **Varijante UTF**: Osim UTF-8, postoje i drugi standardi kodiranja kao što su UTF-16 (koristeći minimalno 2 bajta, do 4) i UTF-32 (koristeći 4 bajta za sve karaktere). Važno je razumeti ove koncepte kako biste efikasno rukovali i umanjili potencijalne probleme koji proizlaze iz kompleksnosti Unicode-a i njegovih različitih metoda kodiranja. Primer kako Unicode normalizuje dva različita bajta koji predstavljaju isti karakter: ```python unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9") ``` **Ovde možete pronaći listu Unicode ekvivalentnih karaktera:** [https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html) i [https://0xacb.com/normalization\_table](https://0xacb.com/normalization\_table) ### Otkrivanje Ako pronađete unutar web aplikacije vrednost koja se vraća, možete pokušati poslati **'KELVIN SIGN' (U+0212A)** koji se **normalizuje u "K"** (možete ga poslati kao `%e2%84%aa`). **Ako se vrati "K"**, onda se vrši neka vrsta **Unicode normalizacije**. Drugi **primer**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` nakon **unicode** je `Leonishan`. ## **Vulnerabilni primeri** ### **Bypass SQL Injection filtera** Zamislite web stranicu koja koristi karakter `'` za kreiranje SQL upita sa korisničkim unosom. Ova web stranica, kao sigurnosnu meru, **briše** sve pojave karaktera **`'`** iz korisničkog unosa, ali **nakon te brisanja** i **pre kreiranja** upita, **normalizuje** korisnički unos koristeći **Unicode**. Zatim, zlonamerni korisnik može umetnuti drugačiji Unicode karakter ekvivalentan `' (0x27)` kao što je `%ef%bc%87`, kada se unos normalizuje, kreira se jednostruki navodnik i pojavljuje se **SQLInjection ranjivost**: ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (157) (1).png>) **Neki interesantni Unicode karakteri** * `o` -- %e1%b4%bc * `r` -- %e1%b4%bf * `1` -- %c2%b9 * `=` -- %e2%81%bc * `/` -- %ef%bc%8f * `-`-- %ef%b9%a3 * `#`-- %ef%b9%9f * `*`-- %ef%b9%a1 * `'` -- %ef%bc%87 * `"` -- %ef%bc%82 * `|` -- %ef%bd%9c ``` ' or 1=1-- - %ef%bc%87+%e1%b4%bc%e1%b4%bf+%c2%b9%e2%81%bc%c2%b9%ef%b9%a3%ef%b9%a3+%ef%b9%a3 " or 1=1-- - %ef%bc%82+%e1%b4%bc%e1%b4%bf+%c2%b9%e2%81%bc%c2%b9%ef%b9%a3%ef%b9%a3+%ef%b9%a3 ' || 1==1// %ef%bc%87+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f " || 1==1// %ef%bc%82+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f ``` #### sqlmap šablon {% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %} ### XSS (Cross Site Scripting) Možete koristiti jedan od sledećih karaktera da prevarite web aplikaciju i iskoristite XSS: ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (312) (1).png>) Primetite da na primer prvi Unicode karakter može biti poslat kao: `%e2%89%ae` ili kao `%u226e` ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (215) (1).png>) ### Fuzzing Regexes Kada backend **proverava korisnički unos sa regexom**, moguće je da se **unos** normalizuje za **regex**, ali **ne i za mesto gde se koristi**. Na primer, u Open Redirect ili SSRF, regex može **normalizovati poslati URL**, ali ga onda **pristupiti onakvim kakav je**. Alatka [**recollapse**](https://github.com/0xacb/recollapse) omogućava **generisanje varijacija unosa** za fuzzing backenda. Za više informacija pogledajte **github** i ovaj [**post**](https://0xacb.com/2022/11/21/recollapse/). ## Reference * [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/) * [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work) * [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass\_WAF\_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass\_WAF\_Unicode.html)
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini da podržite HackTricks: * Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.