(四)跨站脚本XSS之逃逸过滤


  • 当我们学会了打破网页结构之后,我们发现这个技巧有些情况并不适用。并不能成功的闭合标签,或者像<script>标签直接被过滤。这时候我们应该换一个思路,使用事件属性来突破。
  • 靶场由知识盒子提供,本篇靶场地址:https://tofu.exeye.run/event

  • 直接打开页面是一个输入框,右边的按钮会将输入的内容变成一个链接

  • 按套路走,先看javascript的源代码,因为输入内容一般会先由js控制

  •  $('.url-btn').click(function () {     //定义按钮类url-btn的函数内容
                let val = $('.search-ipt').val()   //获取输入框的内容
                if (val == '') {                   //如果为空
                    $('.url-box').css('display', 'none')   
                } else {  //如果不为空
                    val =  val.toLocaleLowerCase().replace(/script/g,'').replace(/</g,'').replace(/>/g,'')   //这里会过滤掉<>和script
                    $('.url-box').css('display', 'block')
                    $('.url-box').html('<span style="padding-left: 2px">生成的链接为:<a class="url" href="'+val+'">'+val+'</a></span>')  //将输入的内容变成href的value
                }
            }
        )
  • 分析源代码,我们输入的数据会变成链接,以及标签的内容,但是<script>会被过滤

  • 如果只是过滤script这个字眼,那这里有个小技巧,可以在一个script中再插入个script,比如scrscriptipt,系统将script过滤掉后刚好面的字母又可以组成一个script

  • 但是偏偏还过滤了<>,所以这就有点难办了,无法打破网页结构

  • 分析源码,我们发现还有个方法,就是构造一个onclick事件让他触发js代码

  • 那么怎么触发呢?

  • 我们同样需要先闭合href字段,再给末尾的引号凑对

  • 所以我们的最终payload为:

  • "onclick="alert('XSS')

这样就成功构造了一个onclick事件

  • 点击链接成功触发弹窗

  • 不过有个需要注意到的地方就是payload括号中不能用双引号,否则就不能凑成一个闭合,也就无法触发弹窗了


文章作者: wkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wkai !
 上一篇
(五)跨站脚本XSS之长度限制 (五)跨站脚本XSS之长度限制
我们平时测试总会用alert(1)去测试是否存在xss漏洞,但真到了要利用这个漏洞。执行的代码就不是alert(1)这么简单了,一些输入点具有字符长度的限制,可能测试语句alert(1)可以顺利执行,但真正的利用代码就会很长,导致无法顺利
2020-07-28
下一篇 
解决新版Kali桥接和NAT无法共存的问题 解决新版Kali桥接和NAT无法共存的问题
最近在安装了配备XFCE桌面的新版KALI后,突然发现添加的一张桥接的网卡,不能和NAT网卡同时使用,两张网卡只允许一张获取IP地址 后来发现,可能是虚拟机添加了这张网卡,但是KALI本身没有办法启用它。 于是我找到了高级网络编辑器
2020-07-22
  目录