Unicode Normalization

Impara l'hacking su AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

WhiteIntel è un motore di ricerca alimentato dal dark web che offre funzionalità gratuite per verificare se un'azienda o i suoi clienti sono stati compromessi da malware ruba-informazioni.

Il loro obiettivo principale di WhiteIntel è combattere i takeover di account e gli attacchi ransomware derivanti da malware che rubano informazioni.

Puoi visitare il loro sito web e provare il loro motore gratuitamente su:


Questo è un riassunto di: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. Dai un'occhiata per ulteriori dettagli (immagini prese da lì).

Comprensione di Unicode e Normalizzazione

La normalizzazione Unicode è un processo che garantisce che rappresentazioni binarie diverse dei caratteri siano standardizzate allo stesso valore binario. Questo processo è cruciale nel trattare le stringhe nella programmazione e nell'elaborazione dei dati. Lo standard Unicode definisce due tipi di equivalenza dei caratteri:

  1. Equivalenza Canonica: I caratteri sono considerati canonica equivalenti se hanno la stessa apparenza e significato quando stampati o visualizzati.

  2. Equivalenza di Compatibilità: Una forma più debole di equivalenza in cui i caratteri possono rappresentare lo stesso carattere astratto ma possono essere visualizzati in modo diverso.

Ci sono quattro algoritmi di normalizzazione Unicode: NFC, NFD, NFKC e NFKD. Ciascun algoritmo utilizza tecniche di normalizzazione canonica e di compatibilità in modo diverso. Per una comprensione più approfondita, puoi esplorare queste tecniche su Unicode.org.

Punti Chiave sull'Encoding Unicode

Comprendere l'encoding Unicode è fondamentale, specialmente quando si affrontano problemi di interoperabilità tra sistemi o linguaggi diversi. Ecco i principali punti:

  • Punti Codice e Caratteri: In Unicode, ogni carattere o simbolo è assegnato un valore numerico noto come "punto codice".

  • Rappresentazione in Byte: Il punto codice (o carattere) è rappresentato da uno o più byte in memoria. Ad esempio, i caratteri LATIN-1 (comuni nei paesi di lingua inglese) sono rappresentati utilizzando un byte. Tuttavia, le lingue con un insieme più ampio di caratteri necessitano di più byte per la rappresentazione.

  • Encoding: Questo termine si riferisce a come i caratteri vengono trasformati in una serie di byte. UTF-8 è uno standard di encoding diffuso in cui i caratteri ASCII sono rappresentati utilizzando un byte e fino a quattro byte per altri caratteri.

  • Elaborazione dei Dati: I sistemi che elaborano i dati devono essere consapevoli dell'encoding utilizzato per convertire correttamente il flusso di byte in caratteri.

  • Varianti di UTF: Oltre a UTF-8, ci sono altri standard di encoding come UTF-16 (utilizzando un minimo di 2 byte, fino a 4) e UTF-32 (utilizzando 4 byte per tutti i caratteri).

È cruciale comprendere questi concetti per gestire ed attenuare efficacemente i potenziali problemi derivanti dalla complessità di Unicode e dai suoi vari metodi di encoding.

Un esempio di come Unicode normalizza due byte diversi che rappresentano lo stesso carattere:

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

Un elenco dei caratteri equivalenti Unicode può essere trovato qui: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html e https://0xacb.com/normalization_table

Scoperta

Se riesci a trovare all'interno di un'app web un valore che viene ripetuto, potresti provare a inviare il 'SIMBOLO KELVIN' (U+0212A) che si normalizza a "K" (puoi inviarlo come %e2%84%aa). Se viene ripetuto un "K", allora, viene eseguita qualche forma di normalizzazione Unicode.

Altro esempio: %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 dopo la normalizzazione Unicode diventa Leonishan.

Esempi di Vulnerabilità

Bypass del filtro di SQL Injection

Immagina una pagina web che utilizza il carattere ' per creare query SQL con l'input dell'utente. Questa pagina web, come misura di sicurezza, elimina tutte le occorrenze del carattere ' dall'input dell'utente, ma dopo tale eliminazione e prima della creazione della query, normalizza utilizzando Unicode l'input dell'utente.

Quindi, un utente malintenzionato potrebbe inserire un diverso carattere Unicode equivalente a ' (0x27) come %ef%bc%87, quando l'input viene normalizzato, viene creato un singolo apice e appare una vulnerabilità di SQL Injection:

Alcuni interessanti caratteri Unicode

  • 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

Modello sqlmap

XSS (Cross Site Scripting)

Potresti utilizzare uno dei seguenti caratteri per ingannare l'applicazione web ed sfruttare una XSS:

Nota che ad esempio il primo carattere Unicode proposto può essere inviato come: %e2%89%ae o come %u226e

Fuzzing Regexes

Quando il backend sta controllando l'input dell'utente con una regex, potrebbe essere possibile che l'input venga normalizzato per la regex ma non per dove viene utilizzato. Ad esempio, in un Open Redirect o SSRF la regex potrebbe normalizzare l'URL inviato ma poi accedervi così com'è.

Lo strumento recollapse permette di generare variazioni dell'input per fuzzare il backend. Per ulteriori informazioni controlla il github e questo post.

Riferimenti

WhiteIntel è un motore di ricerca alimentato dal dark web che offre funzionalità gratuite per verificare se un'azienda o i suoi clienti sono stati compromessi da malware stealer.

Il loro obiettivo principale è combattere i takeover degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.

Puoi controllare il loro sito web e provare il loro motore gratuitamente su:

Impara l'hacking AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated