Js中的Function和function

发布时间 2023-08-04 16:18:49作者: 樱宁宁

Js中的Function和function

起因

最近收到一份渗透测试报告,里面指出了一个xss漏洞。在看报告的过程中,对于payload的生效有一些疑问。于是查询了一些js语法的相关内容,总结一下关于Funtion和funtion的相关知识。最后也列举一下目前常用的xss绕过技巧。

生效载核:

Function(atob`YWxlcnQoZG9jdW1lbnQuY29va2llKQ`)();

funtion的使用

funtion(函数)是 JavaScript 中的一种基本概念,用于封装一段可执行的代码块,并且可以通过名称调用。函数通常用于执行特定的任务或计算,并且可以接收参数和返回值。

函数的声明有两种常见的方式:函数声明和函数表达式。

  1. 函数声明
function add(x, y) {
  return x + y;
}

// 调用函数
const result = add(3, 5); // 8
  1. 函数表达式
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漏洞的原则是见框就插,见参数就插。目前防护的手段很多还是基于关键字的检测。

  1. 关键字检测绕过
  2. 编码绕过
  3. 引入外部js

这里就不详细说明,这一块的知识我也不是很了解。

绕过XSS过滤姿势总结