JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器

什么是JavaScript全局变量?

JavaScript全局变量在函数外部声明或使用window对象声明,它可以通过任何函数访问。 

假设你的目标Web应用程序容易受到映射到JavaScript字符串或JavaScript函数中的XSS的攻。

例如,下面的PHP脚本:

echo "";

如你所见,name参数容易受到攻击,但是在这个示例中,假设Web应用程序有一个过滤器,它阻止使用正则表达式(如/document[^\.]*.[^\.]*cookie/)阻止将“document.cookie”字符串用于任何用户输入,让我们来看看以下有效载荷:

JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器_第1张图片

在这种情况下,可以使用JavaScript全局变量来绕过它。我们有很多方法可以从window或self对象访问document.cookie。例如,例如,像window["document"]["cookie"]这样的对象就不会被阻止。PHP大马

JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器_第2张图片

从上面的示例中可以看出,你甚至可以使用self["alert"]("foo")这样的语法访问任何JavaScript函数,该函数等于alert("foo");,这种语法为你提供了许多绕过弱过滤器的方法。显然,你几乎可以在任何地方使用类似的语法,例如:

(/* this is a comment */self/* foo */)[/*bar*/"alert"/**/]("yo")

JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器_第3张图片

关于“self”对象

Window.self只读属性返回窗口本身,作为WindowProxy,它可以与窗口对象(即window.self)或独立对象(self)上的点符号一起使用。独立符号的优点是对于非窗口上下文存在类似的表示法,例如在Web Workers中。通过使用self,你不仅可以在窗口上下文(self将解析为window.self)的方式中引用全局范围,而且还可以在运行上下文(self将解析为WorkerGlobalScope.self)中引用。 

你可以从以下位置调用任何JavaScript函数:

• window

• self

• _self

• this

• top

• parent

• frames

小技巧1.连接和十六进制转义序列(Escape Sequence)

绕过WAF规则的最常见技术就是在可能的情况下使用字符串连接。对于RCE来说也是如此,即使对于SQLi和JavaScript也是如此。

有很多WAF使用基于JavaScript函数名列表的过滤器,其中许多过滤器会阻止包含诸如alert()或String.fromCharCode()之类的字符串的请求。由于全局变量,我们可以使用字符串连接或十六进制转义序列轻松绕过它们。例如:天天好

/*
** alert(document.cookie);
*/

self["ale"+"rt"](self["doc"+"ument"]["coo"+"kie"])

JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器_第4张图片

绕过过滤器的更复杂的语法是用十六进制转义序列替换字符串,字符代码小于256的任何字符都可以使用其十六进制表示转义,并使用\x转义序列:

> console.log("\x68\x65\x6c\x6c\x6f\x2c\x20\x77\x6f\x72\x6c\x64\x21")
< hello, world!

JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器_第5张图片

显然,将“alert”、“document”和“cookie”字符串替换为它们的十六进制表示,可以调用前面看到的全局变量中的任何函数:

/*
** alert(document.cookie)
*/

self["\x61\x6c\x65\x72\x74"](
    self["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]
        ["\x63\x6f\x6f\x6b\x69\x65"]
)

JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器_第6张图片

JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器_第7张图片

小技巧2. Eval和Base64编码的字符串

如果WAF要过滤我们的输入内容,那么最困难的事情之一就是动态创建并添加一个调用远程JavaScript文件(类似于

你可能感兴趣的:(JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器)