Unicode Injection

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

简介

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

Unicode规范化

Unicode规范化发生在将Unicode字符规范化为ASCII字符时。

这种类型漏洞的常见情况是,系统在检查用户输入后以某种方式修改用户的输入。例如,在某些语言中,对输入进行大写或小写处理可能会规范化给定的输入,将Unicode转换为ASCII生成新字符。 更多信息请查看:

Unicode Normalization

\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黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

最后更新于