hacktricks/pentesting-web/unicode-injection/README.md

74 lines
5.4 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.

# Injeção de Unicode
<details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras maneiras de apoiar o HackTricks:
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Introdução
Dependendo de como o back-end/front-end se comporta quando ele **recebe caracteres unicode estranhos**, um atacante pode ser capaz de **burlar proteções e injetar caracteres arbitrários** que poderiam ser usados para **abuso de vulnerabilidades de injeção** como XSS ou SQLi.
## Normalização Unicode
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 alguns idiomas, uma simples chamada para **tornar a entrada maiúscula ou minúscula** poderia normalizar a entrada fornecida e o **unicode será transformado em ASCII** gerando novos caracteres.\
Para mais informações, consulte:
{% content-ref url="unicode-normalization.md" %}
[unicode-normalization.md](unicode-normalization.md)
{% endcontent-ref %}
## `\u` para `%`
Os caracteres Unicode são geralmente representados com o prefixo **`\u`**. Por exemplo, o caractere `㱋` é `\u3c4b`([verifique aqui](https://unicode-explorer.com/c/3c4B)). Se um back-end **transforma** o prefixo **`\u` em `%`**, a string resultante será `%3c4b`, que decodificado de URL é: **`<4b`**. E, como você pode ver, um **`<` char é injetado**.\
Você pode usar essa técnica para **injetar qualquer tipo de caractere** se o back-end for vulnerável.\
Verifique [https://unicode-explorer.com/](https://unicode-explorer.com/) para encontrar os caracteres de 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](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
## Injeção de Emoji
Os back-ends às vezes se comportam de forma estranha quando eles **recebem emojis**. Foi o que aconteceu neste [**relatório**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) onde o pesquisador conseguiu obter 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 da codificação não correspondiam). 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 `<` e é assim que 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 emojis:
* [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)
<details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>