51 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Unicode Injection
{{#include ../../banners/hacktricks-training.md}}
## Introdução
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 podem ser usados para **explorar vulnerabilidades de injeção** como XSS ou SQLi.
## Normalização de Unicode
A normalização de 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** pode normalizar a entrada dada e o **unicode será transformado em ASCII**, gerando novos caracteres.\
Para mais informações, consulte:
{{#ref}}
unicode-normalization.md
{{#endref}}
## `\u` para `%`
Os caracteres unicode são geralmente representados com o **prefixo `\u`**. Por exemplo, o caractere `㱋` é `\u3c4b`([ver aqui](https://unicode-explorer.com/c/3c4B)). Se um backend **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 backend for vulnerável.\
Consulte [https://unicode-explorer.com/](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, consulte [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
## Injeção de Emoji
Back-ends se comportam de forma estranha quando **recebem emojis**. Isso aconteceu em [**este relato**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) onde o pesquisador conseguiu realizar 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 < apropriado, 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:
```php
<?php
$str = isset($_GET["str"]) ? htmlspecialchars($_GET["str"]) : "";
$str = iconv("Windows-1252", "UTF-8", $str);
$str = iconv("UTF-8", "ASCII//TRANSLIT", $str);
echo "String: " . $str;
```
Listas de Emoji:
- [https://github.com/iorch/jakaton_feminicidios/blob/master/data/emojis.csv](https://github.com/iorch/jakaton_feminicidios/blob/master/data/emojis.csv)
- [https://unicode.org/emoji/charts-14.0/full-emoji-list.html](https://unicode.org/emoji/charts-14.0/full-emoji-list.html)
{{#include ../../banners/hacktricks-training.md}}