# Unicode Normalization
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
[**WhiteIntel**](https://whiteintel.io) je **dark-web** pretraživač koji nudi **besplatne** funkcionalnosti za proveru da li je neka kompanija ili njeni klijenti **kompromitovani** od strane **stealer malvera**.
Njihov primarni cilj je da se bore protiv preuzimanja naloga i ransomware napada koji proizilaze iz malvera koji krade informacije.
Možete proveriti njihovu veb stranicu i isprobati njihov pretraživač **besplatno** na:
{% embed url="https://whiteintel.io" %}
***
**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 više detalja (slike preuzete odatle).
## Razumevanje Unicode-a i Normalizacije
Unicode normalizacija je proces koji osigurava da su različite binarne reprezentacije karaktera standardizovane na istu binarnu vrednost. Ovaj proces je ključan u radu sa stringovima u programiranju i obradi podataka. Unicode standard definiše dva tipa ekvivalencije karaktera:
1. **Kanonicka Ekvivalencija**: Karakteri se smatraju kanonički ekvivalentnim ako imaju isti izgled i značenje kada se odštampaju ili prikažu.
2. **Ekvivalencija Kompatibilnosti**: Slabija forma ekvivalencije gde karakteri mogu predstavljati isti apstraktni karakter, ali se mogu prikazivati drugačije.
Postoje **četiri algoritma za Unicode normalizaciju**: NFC, NFD, NFKC i NFKD. Svaki algoritam koristi kanoničke i tehnike normalizacije kompatibilnosti 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 Unicode Kodiranju
Razumevanje Unicode kodiranja je ključno, posebno kada se radi o problemima interoperabilnosti među različitim sistemima ili jezicima. Evo glavnih tačaka:
* **Kodni Poeni i Karakteri**: U Unicode-u, svaki karakter ili simbol je dodeljen numeričkoj vrednosti poznatoj kao "kodni poen".
* **Reprezentacija Bajtova**: Kodni poen (ili karakter) se predstavlja jednim ili više bajtova u memoriji. Na primer, LATIN-1 karakteri (uobičajeni u zemljama gde se govori engleski) predstavljaju se koristeći jedan bajt. Međutim, jezici sa većim skupom karaktera zahtevaju više bajtova za reprezentaciju.
* **Kodiranje**: Ovaj termin se odnosi na to kako se karakteri transformišu u niz bajtova. UTF-8 je prevalentni standard kodiranja gde se ASCII karakteri predstavljaju koristeći jedan bajt, a do četiri bajta za druge karaktere.
* **Obrada Podataka**: Sistemi koji obrađuju podatke moraju biti svesni kodiranja koje se koristi kako bi ispravno konvertovali bajt tok u karaktere.
* **Varijante UTF-a**: Pored UTF-8, postoje i drugi standardi kodiranja kao što su UTF-16 (koristeći minimum od 2 bajta, do 4) i UTF-32 (koristeći 4 bajta za sve karaktere).
Ključno je razumeti ove koncepte kako bi se efikasno upravljalo i ublažilo potencijalne probleme koji proizilaze iz složenosti Unicode-a i njegovih različitih metoda kodiranja.
Primer kako Unicode normalizuje dva različita bajta koja predstavljaju isti karakter:
```python
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
```
**Lista Unicode ekvivalentnih karaktera može se pronaći ovde:** [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)
### Otkriće
Ako možete pronaći unutar web aplikacije vrednost koja se vraća, mogli biste pokušati poslati **‘KELVIN SIGN’ (U+0212A)** koja **normalizuje na "K"** (možete je poslati kao `%e2%84%aa`). **Ako se "K" vrati**, tada 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**
### **Zaobilaženje SQL Injection filtera**
Zamislite web stranicu koja koristi karakter `'` za kreiranje SQL upita sa korisničkim unosom. Ova web stranica, kao meru bezbednosti, **briše** sve pojave karaktera **`'`** iz korisničkog unosa, ali **nakon te brisanja** i **pre kreiranja** upita, **normalizuje** korisnički unos koristeći **Unicode**.
Tada bi zlonameran korisnik mogao umetnuti drugi Unicode karakter ekvivalentan `' (0x27)` kao `%ef%bc%87`, kada se unos normalizuje, stvara se jednostavan navodnik i pojavljuje se **SQLInjection ranjivost**:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (702).png>)
**Neki zanimljivi 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 шаблон
{% 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) (2).png>)
Primetite da se, na primer, prvi predloženi Unicode karakter može poslati kao: `%e2%89%ae` ili kao `%u226e`
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (215) (1) (1).png>)
### Fuzzing Regexes
Kada backend **proverava korisnički unos pomoću regex-a**, može biti moguće da je **unos** **normalizovan** za **regex** ali **ne** za mesto gde se koristi. Na primer, u Open Redirect ili SSRF, regex može **normalizovati poslati URL** ali zatim **pristupiti njemu onakvom kakav jeste**.
Alat [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* omogućava **generisanje varijacija unosa** za fuzzing backend-a. 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)
### [WhiteIntel](https://whiteintel.io)
[**WhiteIntel**](https://whiteintel.io) je **dark-web** pokretan pretraživač koji nudi **besplatne** funkcionalnosti za proveru da li je neka kompanija ili njeni klijenti bili **kompromitovani** od strane **malvera za krađu podataka**.
Njihov primarni cilj WhiteIntel-a je da se bori protiv preuzimanja naloga i ransomware napada koji proizlaze iz malvera za krađu informacija.
Možete proveriti njihovu veb stranicu i isprobati njihov pretraživač **besplatno** na:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Podrška HackTricks
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
{% endhint %}