首页 > 其他分享 >Js中的Function和function

Js中的Function和function

时间:2023-08-04 16:23:08浏览次数:42  
标签:Function function 函数 xss Js 参数 atob

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过滤姿势总结

标签:Function,function,函数,xss,Js,参数,atob
From: https://www.cnblogs.com/yingningning/p/17606283.html

相关文章

  • js Array方法
    JAVASCRIPT对象Array对象数组属性属性描述constructor返回创建数组对象的原型函数。length设置或返回数组元素的个数。prototype允许你向数组对象添加属性或方法。Array对象方法属性描述concat()连接两个或更多的数组,并返回结果。copyW......
  • js获取视频封面作为缩略图
      //获取视频封面作为缩略图:captureVideoImage(){letvideoArr=document.querySelectorAll('.swipe-video');let_this=this;for(leti=0;i<videoArr.length;i++){//loadeddata当当前帧的数据已加载,但没有足够的数据来播放......
  • js设置随机颜色
    varchars=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];functiongen......
  • 在线直播系统源码,js循环数组的方法合集
    在线直播系统源码,js循环数组的方法合集一、forEach循环注:没有return返回值,且不能用break跳出循环。 letarrlist=['123','456','789'];arrlist.forEach(function(value,index){  //value是每一项,index是索引  console.log(value,index);}); ​二、for循环......
  • jsp各部分编码的含义
    pageEncoding是jsp文件本身的编码,       第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,(jsp文件的编码,pageEncoding是否一致),结果是由指定的编码方案翻译成统一的UTF-8JAVA源码(即.java),如果pageEncoding设定错了,或没有设定(在JSP标准的语法中,如果pageEncoding属......
  • C# 读取json配置文件appsettings.json
    添加NuGet包Microsoft.Extensions.Configuration.FileExtensions;Microsoft.Extensions.Configuration.Json;appsettings.json示例 代码:publicstaticvoidGetBuilder(stringpath){varbuilder=newConfigurationBuilder()......
  • 【答疑】jsonpath和beanshell配合使用案例
    问题今天提升群小伙伴问了这样一个问题:接口返回如下(list元素个数不确定),需要提取所有的iautoid,然后用逗号拼接起来,如果是如下返回,需要得到的结果是1687283717749342208,1679392630364184576,后续请求需要使用{ "data":{ "firstPage":true, "lastPage":false, "list":......
  • js的一些写法
    1.用void0代替undefined不直接用undefined,因为undefined不是关键字,在函数中可以被变量占用,从而值发生变化,使用void(0)或void0,还好写一些2.用Number.isNaN代替isNaNisNaN很坑,判断不准,如下isNaN(undefined);//trueisNaN({});//trueisNaN("38,6")//true......
  • 重磅特性 - SpreadJS推出新插件甘特图,预览版下载体验中
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。甘特图对于业务场景中的工程项目管理、预算执行、生产计划等都能将原有的表格数据,转变为直观的甘特图模式。作为纯前端表格控件SpreadJS......
  • 怎么用js去除一组数据中重复的元素?
    怎么去除一组数据中重复的元素?functionremoveDuplicates(array){vartemp={}varresult=[]for(leti=0;i<array.length;i++){if(!temp[array[i]]){//如果设置当前元素的值不为truetemp[array[i]]=true//设置当前元素的值为true......