.. | ||
README.md | ||
unicode-normalization.md |
Inyección Unicode
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si quieres ver a tu empresa anunciada en HackTricks o descargar HackTricks en PDF revisa los PLANES DE SUSCRIPCIÓN!
- Consigue el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de github de HackTricks y HackTricks Cloud.
Introducción
Dependiendo de cómo se comporte el back-end/front-end al recibir caracteres unicode extraños, un atacante podría ser capaz de burlar protecciones e inyectar caracteres arbitrarios que podrían ser utilizados para explotar vulnerabilidades de inyección como XSS o SQLi.
Normalización Unicode
La normalización Unicode ocurre cuando los caracteres unicode se normalizan a caracteres ascii.
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 convertir la entrada 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 revisa:
{% content-ref url="unicode-normalization.md" %} unicode-normalization.md {% endcontent-ref %}
\u
a %
Los caracteres Unicode suelen representarse con el prefijo \u
. Por ejemplo, el carácter 㱋
es \u3c4b
(compruébalo aquí). Si un back-end transforma el prefijo \u
en %
, la cadena resultante será %3c4b
, que al decodificarse 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 back-end es vulnerable.
Revisa https://unicode-explorer.com/ para encontrar los caracteres que necesitas.
Esta vulnerabilidad proviene de una vulnerabilidad que un investigador encontró, para una explicación más detallada revisa https://www.youtube.com/watch?v=aUsAHb0E7Cg
Inyección de Emojis
Los back-ends a veces se comportan de manera extraña cuando reciben emojis. Eso es lo que ocurrió en este informe donde el investigador logró un XSS con una carga útil como: 💋img src=x onerror=alert(document.domain)//💛
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 un extraño unicode: ‹
``Entonces tomaron esta salida y la convirtieron de nuevo ahora de UTF-8 a ASCII. Esto normalizó el ‹
a <
así es como el exploit pudo funcionar en ese sistema.
Esto es lo que ocurrió:
<?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://unicode.org/emoji/charts-14.0/full-emoji-list.html
Aprende a hackear AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si quieres ver a tu empresa anunciada en HackTricks o descargar HackTricks en PDF consulta los PLANES DE SUSCRIPCIÓN!
- Consigue el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de github de HackTricks y HackTricks Cloud.