如何使用 Unicode 编码来规避 XSS 过滤器?

信息安全 xss
2021-08-14 05:51:26

最近,我遇到了一个报告的 XSS,其中攻击者使用 Unicode 编码 HTTP GET 参数中的有效负载以逃避现有的 XSS 过滤器 -

POC

我的问题是 - 服务器/应用程序何时将 Unicode 转换为纯文本?是在读取 GET 参数的值时吗?如果是,那么为什么过滤器不能检测到它?

当以明文形式提供相同的有效负载时,攻击不起作用。应用程序部署在 IIS 7 上。

此类规避技术的任何缓解策略也将得到应用。

更新:https://www.ietf.org/rfc/rfc1738.txt限制使用 unicode 字符作为 URL。IIS 7 仍然接受 unicode 字符作为 URL GET 值的一部分的可能性有多大。我有一些用于测试的易受攻击的 php webapps(DVWA,部署在 WAMP 服务器中),它们很容易受到非常简单的 XSS 攻击向量(如<script>alert(1)</script>. 我尝试用等效的 Unicode 替换几个字符,但编码的字符串不会调用 XSS !!!

1个回答

使用AntiXssEncoderNuget 的包:

Install-Package AntiXSS -Version 4.3.0

该类针对每种情况都有不同的编码器,因为这些值被反映,例如 css、JavaScript、HTML 和 URL;使用此方法取决于您的情况,例如:

在 CSS 中使用: CssEncode("data")
在 Javascript 中使用: JavaScriptStringEncode("data")

此解决方案允许验证主要类型以绕过编码、保证 \u0027、%27 和许多不同的选项。

另一种方法是首先对数据进行规范化和编码,这允许验证例如 %u0027、\x00、%00 并将值更改为特定语言以规避绕过验证。

https://msdn.microsoft.com/en-us/library/system.web.security.antixss.antixssencoder(v=vs.110).aspx https://msdn.microsoft.com/es-es/library/ ebza6ck1(v=vs.110).aspx

我希望我能帮助你。