今天遇见一个破站,又是关键词过滤又是html解析器过滤的,完了前端还写的稀烂,输个引号就闭合,输个尖括号后半段html属性都当文本渲染了。怎么看怎么像有xss。
其中有个接口传了个Id,返回了一个html页面。后来一看是打开的新的iframe。这个接口的Id直接拼接到Easy UI的DataGrid组件里的参数里去了。类似下面这种
1 | <table class="easyui-datagrid" style="width:400px;height:250px" data-options="url:'http://xxx.xxx',queryParams: {Id: '1234'}"> |
DataGrid(数据表格) - jQuery EasyUI中文文档 - EasyUI中文站
然后他拼接的时候没过滤单引号和双引号。但是所有on开头的属性都给过滤了。table也没有其他xss的属性(background试过了不行)。
但是DataGrid有一个rowStyler属性,参数值是一个js函数,函数里的js代码可以执行。所以可以在rowStyler里xss。
payload,因为是GET参数传的所以还得url编码一次:
1 | 1234'},url:'http://www.baidu.com',rowStyler:function(index,row){console.log(123123)}" |
url属性是可以覆盖的,上面这个payload里传的payload会覆盖原本的url,浏览器会从payload的url里获取数据。也许能钓个鱼啥的,但是都xss了这点就显得没啥用。
得亏能xss,不然光能覆盖个url的话都不知道该写这属于什么漏洞