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

77 lines
5.4 KiB
Markdown
Raw Normal View History

# Inyección de Unicode
2023-06-05 18:33:24 +00:00
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2023-06-05 18:33:24 +00:00
<details>
2023-06-05 18:33:24 +00:00
<summary>Apoya a HackTricks</summary>
2023-06-05 18:33:24 +00:00
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
2023-06-05 18:33:24 +00:00
</details>
{% endhint %}
2023-06-05 18:33:24 +00:00
## Introducción
Dependiendo de cómo se comporte el back-end/front-end cuando **recibe caracteres unicode extraños**, un atacante podría **eludir protecciones e inyectar caracteres arbitrarios** que podrían ser utilizados para **abusar de vulnerabilidades de inyección** como XSS o SQLi.
2023-06-05 18:33:24 +00:00
## Normalización de Unicode
2023-06-05 18:33:24 +00:00
La normalización de Unicode ocurre cuando **los caracteres unicode se normalizan a caracteres ascii**.
2023-06-05 18:33:24 +00:00
Un escenario común de este tipo de vulnerabilidad ocurre cuando el sistema está **modificando** de alguna manera la **entrada** del usuario **después de haberla verificado**. Por ejemplo, en algunos lenguajes, una simple llamada para hacer que la **entrada esté en mayúsculas o minúsculas** podría normalizar la entrada dada y el **unicode se transformará en ASCII** generando nuevos caracteres.\
Para más información, consulta:
2023-06-05 18:33:24 +00:00
{% content-ref url="unicode-normalization.md" %}
[unicode-normalization.md](unicode-normalization.md)
{% endcontent-ref %}
## `\u` a `%`
Los caracteres unicode generalmente se representan con el **prefijo `\u`**. Por ejemplo, el carácter `㱋` es `\u3c4b`([ver aquí](https://unicode-explorer.com/c/3c4B)). Si un backend **transforma** el prefijo **`\u` en `%`**, la cadena resultante será `%3c4b`, que decodificada en URL es: **`<4b`**. Y, como puedes ver, se **inyecta un carácter `<`**.\
Podrías usar esta técnica para **inyectar cualquier tipo de carácter** si el backend es vulnerable.\
Consulta [https://unicode-explorer.com/](https://unicode-explorer.com/) para encontrar los caracteres que necesitas.
2023-06-05 18:33:24 +00:00
Esta vulnerabilidad proviene de una vulnerabilidad que un investigador encontró, para una explicación más detallada consulta [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
2023-06-05 18:33:24 +00:00
## Inyección de Emoji
2023-06-05 18:33:24 +00:00
Los back-ends a veces se comportan de manera extraña cuando **reciben emojis**. Eso es lo que sucedió en [**este informe**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) donde el investigador logró conseguir un XSS con una carga útil como: `💋img src=x onerror=alert(document.domain)//💛`
2023-06-05 18:33:24 +00:00
En este caso, el error fue que el servidor, después de eliminar los caracteres maliciosos, **convirtió la cadena UTF-8 de Windows-1252 a UTF-8** (básicamente, la codificación de entrada y la conversión de codificación no coincidían). Entonces, esto no da un < adecuado, solo uno unicode extraño: ``\
``Así que tomaron esta salida y **convirtieron nuevamente ahora de UTF-8 a ASCII**. Esto **normalizó** el `` a `<`, así es como el exploit pudo funcionar en ese sistema.\
Esto es lo que sucedió:
2023-06-05 18:33:24 +00:00
```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)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2023-06-05 18:33:24 +00:00
<details>
2023-06-05 18:33:24 +00:00
<summary>Apoya a HackTricks</summary>
2023-06-05 18:33:24 +00:00
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
2023-06-05 18:33:24 +00:00
</details>
{% endhint %}