最近,我遇到了一个报告的 XSS,其中攻击者使用 Unicode 编码 HTTP GET 参数中的有效负载以逃避现有的 XSS 过滤器 -
我的问题是 - 服务器/应用程序何时将 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 !!!