hacktricks/pentesting-web/unicode-injection
2023-08-03 19:12:22 +00:00
..
README.md Translated to Chinese 2023-08-03 19:12:22 +00:00
unicode-normalization.md Translated to Chinese 2023-08-03 19:12:22 +00:00

Unicode注入

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

简介

根据后端/前端在接收到奇怪的Unicode字符时的行为,攻击者可能能够绕过保护并注入任意字符从而滥用注入漏洞如XSS或SQLi。

Unicode规范化

Unicode规范化是指将Unicode字符规范化为ASCII字符的过程。

这种类型的漏洞的一个常见场景是,系统在检查用户输入后对其进行修改。例如,在某些语言中,对输入进行大写或小写转换的简单调用可能会将给定的输入规范化,并将Unicode转换为ASCII,从而生成新的字符。
更多信息请参见:

{% content-ref url="unicode-normalization.md" %} unicode-normalization.md {% endcontent-ref %}

\u转换为%

Unicode字符通常以**\u前缀表示。例如,字符表示为\u3c4b在此处检查)。如果后端将前缀\u转换为%,则结果字符串将为%3c4b,解码后为:<4b。正如你所看到的,注入了<字符
如果后端存在漏洞,你可以使用此技术来
注入任何类型的字符**。
请访问https://unicode-explorer.com/查找所需的字符。

实际上,这个漏洞来自于一位研究人员发现的一个漏洞,更详细的解释请参见https://www.youtube.com/watch?v=aUsAHb0E7Cg

表情符号注入

后端在接收到表情符号时有时会表现出奇怪的行为。这就是在这篇文章中发生的情况研究人员成功使用如下有效负载实现了XSS💋img src=x onerror=alert(document.domain)//💛

在这种情况下错误在于服务器在删除恶意字符后将UTF-8字符串从Windows-1252转换为UTF-8基本上是输入编码和转换编码不匹配。然后这不会生成正确的<字符而是一个奇怪的Unicode字符
``然后他们将此输出再次从UTF-8转换为ASCII。这将规范化为<,这就是该系统上该漏洞能够工作的原因。
具体情况如下:

<?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;

表情符号列表:

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥