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

4.8 KiB
Raw Blame History

Unicode注入

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

简介

根据后端/前端在接收奇怪的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;

表情符号列表:

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式