Unicode Injection
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Dependendo de como o back-end/front-end se comporta quando recebe caracteres unicode estranhos, um atacante pode ser capaz de contornar proteções e injetar caracteres arbitrários que poderiam ser usados para explorar vulnerabilidades de injeção como XSS ou SQLi.
A normalização Unicode ocorre quando caracteres unicode são normalizados para caracteres ascii.
Um cenário comum desse tipo de vulnerabilidade ocorre quando o sistema está modificando de alguma forma a entrada do usuário após tê-la verificado. Por exemplo, em algumas linguagens, uma simples chamada para tornar a entrada em maiúsculas ou minúsculas poderia normalizar a entrada dada e o unicode será transformado em ASCII, gerando novos caracteres. Para mais informações, confira:
Unicode Normalization\u
para %
Os caracteres Unicode são geralmente representados com o prefixo \u
. Por exemplo, o caractere 㱋
é \u3c4b
(verifique aqui). Se um back-end transforma o prefixo \u
em %
, a string resultante será %3c4b
, que decodificada em URL é: <4b
. E, como você pode ver, um caractere <
é injetado.
Você poderia usar essa técnica para injetar qualquer tipo de caractere se o back-end for vulnerável.
Confira https://unicode-explorer.com/ para encontrar os caracteres que você precisa.
Essa vulnerabilidade na verdade vem de uma vulnerabilidade que um pesquisador encontrou, para uma explicação mais detalhada, confira https://www.youtube.com/watch?v=aUsAHb0E7Cg
Back-ends se comportam de forma estranha quando recebem emojis. Foi isso que aconteceu em este relato onde o pesquisador conseguiu alcançar um XSS com um payload como: 💋img src=x onerror=alert(document.domain)//💛
Neste caso, o erro foi que o servidor, após remover os caracteres maliciosos, converteu a string UTF-8 de Windows-1252 para UTF-8 (basicamente, a codificação de entrada e a conversão de codificação não coincidiram). Então, isso não dá um < adequado, apenas um unicode estranho: ‹
``Então, eles pegaram essa saída e converteram novamente agora de UTF-8 para ASCII. Isso normalizou o ‹
para <
, assim é como a exploração poderia funcionar nesse sistema.
Isso é o que aconteceu:
Emoji lists:
Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)