zoukankan      html  css  js  c++  java
  • ES6中的模板字符串和新XSS Payload

    ES6中的模板字符串和新XSS Payload

    众所周知,在XSS的实战对抗中,由于防守方经常会采用各种各样严格的过滤手段来过滤输入,所以我们使用的XSS Payload也会根据实际情况作出各种各样的调整,最常见的如避免括号,避免引号,避免关键字等,以绕开过滤函数的检查,从而成功将代码注入到网页中运行。

    在传统的XSS Payload变形中,常用的无非有以下几种:

    1. 使用String.fromCharCode来避免关键字,如String.fromCharCode(97,108,101,114,116,40,49,41);

    2. 使用URL编码来避免括号的识别,如location=’alert%281%29’;

    3. 使用正则对象的特点来避开引号,如alert(/1/);
      在多年的研究中基本上传统的变形手段都被研究的差不多了,很难找到创新的绕开手段。

    然而,近几年ECMAScript新版本的不断发展和推行,在带来了各种激动人心的语言特性的同时,也不可避免地带来了一些新的安全挑战。本文中所说的模板字符串,便是ECMAScript 6草案中的一种新特性

    MDN中所述,模板字符串(Template literals)允许嵌入表达式,并且支持多行字符串和字符串插补特性。基本语法为以下几种:

    其中第一行为最基本用法,即使用反引号 (‘`’) 来代替普通字符串中的用双引号和单引号。

    第二行为多行字符串用法,即反引号中文本可以直接接受换行而不必使用 换行符来强制换行。

    第三行则为模板字符串的最核心用法,即反引号中的${expression}占位符中expression可以为任意的JavaScript表达式,甚至为模板字符串。

    第四行则为使模板字符串变强大的最主要原因,如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以在通过该函数对模板字符串来进行操作处理。

    第三行的用法我们称之为“表达式插补“,在普通字符串中嵌入表达式时,必须使用如下语法:

    现在通过模板字符串,我们可以使用一种更优雅的方式来表示:

    第四行的用法我们称之为”带标签的模板字符串“,模板字符串的一种更高级的形式称为带标签的模板字符串。它允许您通过标签函数修改模板字符串的输出。标签函数的第一个参数是一个包含了字符串字面值的数组(在本例中分别为“Hello”和“world”);第二个参数,在第一个参数后的每一个参数,都是已经被处理好的替换表达式(在这里分别为“15”和“50”)。 最后,标签函数返回处理好的字符串。在后面的示例中,标签函数的名称可以为任意的合法标示符。

    在了解了以上知识后,我们不难发现,对于一个最简单的XSS Payload:alert(‘A’)来说,我们可以利用上述例子第一行的知识,使用“ `”来代替引号,即成为alert( `A `)。之后,使用第四行的标签用法,我们可以直接去除括号,将alert作为标签,写成 alert `A `。最后,由于ECMAScript 6中支持直接用码点(code point)来表示Unicode字符,即直接写成"反斜杠+u+码点"。因此为避免alert关键字被识别,我们可以使用Unicode字符来替换alert几个字符,将payload写成u0061u006cu0065u0072u0074 `A `。 此时最终的payload已经完全见不到alert关键字,括号,以及引号了。测试结果如下:

    如果需要将这个payload当做字符串作为函数参数,则可以按照表达式插补的写法,直接在外层套一个`${}`即可,例如:`${alert `A`}` 或 `${u0061u006cu0065u0072u0074`A`}` 。则console.log(`${alert `A`}`)也可以弹出。

    以上的方法经测试,在最新版本的Chrome,Firefox以及Edge浏览器中均可以执行。我们可以看出,ES6的新方法给我们带来便利的同时,也给XSS字符的安全监测带来了新的挑战。

    作者:负羽,更多安全类文章,请访问阿里聚安全博客

  • 相关阅读:
    杭电 Problem
    杭电Problem 5053 the sum of cube 【数学公式】
    杭电 Problem 2089 不要62 【打表】
    杭电 Problem 4548 美素数【打表】
    杭电 Problem 2008 分拆素数和 【打表】
    杭电 Problem 1722 Cake 【gcd】
    杭电 Problem 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心】
    杭电Problem 1872 稳定排序
    杭电 Problem 1753 大明A+B
    东北林业大 564 汉诺塔
  • 原文地址:https://www.cnblogs.com/alisecurity/p/6047730.html
Copyright © 2011-2022 走看看