Unicode Normalization
WhiteIntel je pretraživač pokretan dark-web-om koji nudi besplatne funkcionalnosti za proveru da li je kompanija ili njeni korisnici kompromitovani od strane malvera za krađu podataka.
Primarni cilj WhiteIntel-a je borba protiv preuzimanja naloga i napada ransomvera koji proizilaze iz malvera za krađu informacija.
Možete posetiti njihovu veb stranicu i isprobati njihovu mašinu za besplatno na:
Ovo je sažetak: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. Pogledajte za dalje detalje (slike preuzete sa te lokacije).
Razumevanje Unicode-a i Normalizacije
Unicode normalizacija je proces koji osigurava da različite binarne reprezentacije karaktera budu standardizovane na istu binarnu vrednost. Ovaj proces je ključan prilikom rukovanja stringovima u programiranju i obradi podataka. Unicode standard definiše dva tipa ekvivalencije karaktera:
Kanonska ekvivalencija: Karakteri se smatraju kanonski ekvivalentnim ako imaju isti izgled i značenje kada se štampaju ili prikazuju.
Kompatibilna ekvivalencija: Slabija forma ekvivalencije gde karakteri mogu predstavljati isti apstraktni karakter ali se mogu prikazivati na različite načine.
Postoje četiri algoritma Unicode normalizacije: NFC, NFD, NFKC i NFKD. Svaki algoritam koristi kanonske i kompatibilne tehnike normalizacije na različite načine. Za detaljnije razumevanje, možete istražiti ove tehnike na Unicode.org.
Ključne Tačke o Kodiranju Unicode-a
Razumevanje kodiranja Unicode-a je ključno, posebno prilikom rukovanja pitanjima interoperabilnosti 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".
Reprezentacija Bajtova: Kodna tačka (ili karakter) je predstavljena jednim ili više bajtova u memoriji. Na primer, LATIN-1 karakteri (uobičajeni u zemljama engleskog govornog područja) se predstavljaju 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 rasprostranjeni 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: Pored UTF-8, postoje i drugi standardi kodiranja poput UTF-16 (koristi minimalno 2 bajta, do 4) i UTF-32 (koristi 4 bajta za sve karaktere).
Važno je razumeti ove koncepte kako bi se efikasno rukovalo i umanjile potencijalne probleme koji proizilaze iz kompleksnosti Unicode-a i njegovih različitih metoda kodiranja.
Primer kako Unicode normalizuje dva različita bajta koji predstavljaju isti karakter:
Lista ekvivalentnih Unicode karaktera može se pronaći ovde: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html i https://0xacb.com/normalization_table
Otkrivanje
Ako pronađete vrednost unutar veb aplikacije 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 "K" vrati nazad, 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 postaje Leonishan
.
Primeri ranjivosti
Bypass filtriranja SQL Injection-a
Zamislite veb stranicu koja koristi karakter '
za kreiranje SQL upita sa korisničkim unosom. Ova veb stranica, kao sigurnosna mera, briše sve pojave karaktera '
iz korisničkog unosa, ali nakon te brisanja i pre kreiranja upita, normalizuje korisnički unos pomoću Unicode-a.
Zatim, zlonamerni korisnik može ubaciti drugačiji Unicode karakter ekvivalentan sa ' (0x27)
poput %ef%bc%87
, kada se unos normalizuje, kreiran je jednostruki navod i pojavljuje se SQLInjection ranjivost:
Neki zanimljivi Unicode karakteri
o
-- %e1%b4%bcr
-- %e1%b4%bf1
-- %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
sqlmap šablon
XSS (Cross Site Scripting)
Možete koristiti jedan od sledećih karaktera da prevarite web aplikaciju i iskoristite XSS:
Primetite da na primer prvi Unicode karakter može biti poslat kao: %e2%89%ae
ili kao %u226e
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 slučaju otvorenog preusmeravanja ili SSRF-a, regex može normalizovati poslati URL ali se zatim pristupa njemu onakvom kakav je.
Alatka recollapse omogućava generisanje varijacija unosa za fuzzing backend-a. Za više informacija pogledajte github i ovaj post.
Reference
WhiteIntel je pretraživač pokrenut na dark web-u koji nudi besplatne funkcionalnosti za proveru da li su kompanija ili njeni korisnici pogođeni od strane malvera koji krade informacije.
Primarni cilj WhiteIntela je borba protiv preuzimanja naloga i napada ransomware-a koji proizilaze iz malvera koji krade informacije.
Možete posetiti njihovu veb lokaciju i isprobati njihovu mašinu za besplatno na:
Last updated