绕过 Web 应用程序中的 XSS 过滤器
时间:2022-12-29 02:30:00
避免跨站脚本 (XSS) 漏洞的两种主要技术是 XSS 过滤和 XSS 然而,转换。XSS 过滤是不可取的,因为它通常可以用巧妙的策略来避免。
在本教程中,我们将解释一些黑客可能在其恶意代码中使用的技术,以便轻松绕过 Web 在应用程序中 XSS 过滤器。
XSS 过滤工作原理
XSS 过滤器可以部署为跨站点脚本攻击向量的普通模式,并从用户输入数据中删除此类代码片段。
最常用的是正则表达式发现模式。这是非常困难的,因为跨网站脚本的有效负载模式也可以合法部署为网页内容。因此,过滤器应避免误报。
此外,Firefox、Google Chrome 和 Internet Explorer 等当代 Web 格式错误的浏览器 HTML 代码具有很强的容错能力。
此外,JavaScript 它非常灵活,通常可以通过各种方式表达同样的实用性。黑客可以通过故意构建来避免常见 XSS 使用这些情况的代码进行搜索模式。
从理论上讲,构建实用可靠 XSS 过滤器是可行的。然而,过滤器的复杂性可能是巨大的,黑客有可能发明一种新的绕过方法。因此,转换被认为是一种更直接的技术,以防止跨网站脚本攻击。
XSS 过滤器绕过技术
部署字符编码
后续可以启动过滤器的编码字符,部署过滤器的编码字符,以克服过滤器。
黑客使用多种编码方法,如 HTML 实体和 Base64.编码取决于需要编码的内容。href
标签 URL 支持 URL 但不支持标签名称。
例如,欺骗搜索是很常见的 ASCII 黑客可以替换模式过滤器
javascript:alert(document.cookie) |
和
jav script:alert(document.cookie) |
请记住,演员可以跳过任何或所有分号。
如果过滤器知道如何确认编码尝试,参与者可以尝试通过部署填充的十进制编码和跳过分号来欺骗它。
例如,以下等效alert
:
alert |
欺骗正则表达式
有时,绕过过滤器只需要发现一种欺骗正则表达式的技术。
例如,攻击者可以使用带括号的虚假标签,例如:
如果正则表达式没有正确编写,它将假定脚本标记以初始右括号结尾。
此外,请注意如何调用该文件以模仿 JPG 图像和搜索特定文件扩展名的技巧过滤器。
使用非典型事件处理程序
尽管许多 XSS 过滤器在普通事件处理程序(如onerror
、onfocus
、onclick
、onmouseover
或)中测试可能的 JavaScript onclick
,但参与者可以尝试使用各种其他事件处理程序。例如,与选框相关的事件处理程序,如onfinish
和onstart
。
可以在网上找到最广泛的处理程序列表。
使用非典型分隔符
有多种字符可以部署为分隔符来代替空格。现代网络浏览器仍将正确执行代码。
例如,攻击者可以部署单引号、双引号和反引号(仅适用于许多 Web 浏览器)。
一个例子是:
此外,黑客可能会尝试使用额外的尖括号和斜线(评论)来欺骗过滤器。
例如:
< |
现代网络浏览器通常非常宽容,甚至可以正确执行后续代码:
此外,请记住,标签名称后的初始空格可以用更多的分隔符替换。例如,演员可以用一个斜杠替换它:
案例处理和字符插入
在过滤器区分大小写的情况下,如果对手部署了与预期不同的案例,则可能会被欺骗。
例如,黑客可以部署、
或
.
此外,现代 Web 浏览器通常会忽略参与者在 HTML 标记中插入的换行符、额外空格、制表符和回车符。
例如,黑客可以使用、
、
或
.
此外,黑客可以尝试在任何地方插入空字节。例如:<[\x00]script>
。
标签和属性
许多过滤器只关注公共标签。因此,攻击者可能会部署不常见的标签来绕过它们,例如.
然而,过滤器经常忘记包含明显的标签,如.
故意失误
尽管故意的失误可能会帮助黑客绕过许多过滤器,但网络浏览器仍然会理解上下文。
当黑客在错误的位置、不按顺序使用引号或只是忘记包含相关引号时,情况尤其如此。
因此,一个例子是:
因此,尽管代码仍会执行,但未关闭的引号后面的值可能会欺骗过滤器,因为大多数 Web 浏览器会将引号视为已关闭并在内部修复代码。
用于欺骗过滤器的其他故意错误可能涉及在标签名称后面包含垃圾内容。
一些当代的网络浏览器将完全无视包含的内容。因此,对手可以利用
.
结论
正如我们所见,黑客可以轻松绕过 Web 应用程序中的跨站点脚本过滤器。过滤器规避继续发展,当新技术被发现时,未来会出现新技术也就不足为奇了。
可以同时部署多种技术以提高规避效率。例如,演员可以使用类似Base64 编码的meta
标签:refresh