Js中的Function和function
Js中的Function和function
起因
最近收到一份渗透测试报告,里面指出了一个xss漏洞。在看报告的过程中,对于payload的生效有一些疑问。于是查询了一些js语法的相关内容,总结一下关于Funtion和funtion的相关知识。最后也列举一下目前常用的xss绕过技巧。
生效载核:
Function(atob`YWxlcnQoZG9jdW1lbnQuY29va2llKQ`)();
funtion的使用
funtion(函数)是 JavaScript 中的一种基本概念,用于封装一段可执行的代码块,并且可以通过名称调用。函数通常用于执行特定的任务或计算,并且可以接收参数和返回值。
函数的声明有两种常见的方式:函数声明和函数表达式。
- 函数声明
function add(x, y) {
return x + y;
}
// 调用函数
const result = add(3, 5); // 8
- 函数表达式
const add = function(x, y) {
return x + y;
};
// 调用函数
const result = add(3, 5); // 8
Funtion的使用
在JavaScript中,Function构造函数是一个内置的构造函数,用于动态创建新的函数对象。它的语法如下:
new Function(arg1, arg2, ..., functionBody)
其中,arg1, arg2, ... 是函数的参数列表,可以是多个参数,最后一个参数是表示函数体的字符串 functionBody。这个字符串包含了 JavaScript 代码,表示新创建的函数的实际执行逻辑。
如:
const addFunction = new Function('x', 'y', 'return x + y');
console.log(addFunction(2, 3)); // Output: 5
回到最初展示的payload字段,Funtion构造函数此时没有任何参数,只有执行函数体部分。atob()是js内置的函数,用于将Base64解码,对应的Base64编码函数为btoa()。
Function(atob`YWxlcnQoZG9jdW1lbnQuY29va2llKQ`)();
通过atob解码,真实的payload得到。攻击者通过xss,试图获取cookie参数。
> atob`YWxlcnQoZG9jdW1lbnQuY29va2llKQ`
< 'alert(document.cookie)'
Function(xxx)()最后的括号:这部分代码是对刚刚创建的函数进行立即调用。此时在控制台允许这段js,网站的cookie就会通过弹窗形式展示出来。
xss的常见绕过方法
xss漏洞的原则是见框就插,见参数就插。目前防护的手段很多还是基于关键字的检测。
- 关键字检测绕过
- 编码绕过
- 引入外部js
这里就不详细说明,这一块的知识我也不是很了解。