- 当我们学会了打破网页结构之后,我们发现这个技巧有些情况并不适用。并不能成功的闭合标签,或者像
<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')
- 点击链接成功触发弹窗
- 不过有个需要注意到的地方就是payload括号中不能用双引号,否则就不能凑成一个闭合,也就无法触发弹窗了