强防御下的XSS绕过思路(二) 黑名单篇 |
您所在的位置:网站首页 › clean是白名单还是黑名单 › 强防御下的XSS绕过思路(二) 黑名单篇 |
1.3 其他非黑名单标签和事件 尝试一些不在黑名单中的标签,比如 1.4 灵活利用过滤规则。 比如发现某处会将或者过滤为空,那么就可以直接尝试用 、onload、onload的方式去绕过。以前这个方法用的还是比较多的,现在很多程序已经考虑到这点,基本都会进行循环过滤和语义分析,所以这个姿势已经不太能过一些大厂的规则了。 二 输出在js代码中 1 过滤单引号、等号的时候 在js环境中,方法相对灵活很多,比如单引号过滤,很多时候可以用反单引号。 括号很多时候也可以用反单引号去替换。 如上,自己再控制台试试就知道了。 其实单引号,等号这些有一个比较常用的处理方法,就是用String.fromCharCode 需要写入一个外部js文件,也可以用这种方法。 但是要注意,这里String.fromCharCode输出的结果是字符串,需要执行的话,还需要给最外层加一个eval 这样就会直接将字符串作为js代码去执行了。 或者不用String.fromCharCode用atob函数也可以,或者用其他的这种可逆的编码、加密函数都是可以的。 2 不仅过滤了单引号、等号,还过滤了圆括号、eval的情况 上面的方法在进行js环境中,的黑名单过滤绕过特别实用,但是有人就会问了,你这方法需要用eval和括号,如果把这些也都过滤掉了呢。其实括号的问题,前面已经提到过了,是可以用反单引号去替换的,eval的话,这种可以尝试其他的函数去绕过,比如用Function或者constructor配合js模板字符串的写法。 或者用constructor都是可以的 具体这个是什么原理,这里大概给解释下。 具体细节这是js的模板字符串的特性,以前发过的XSS相关文章中也提到过很多次了,这里就不再具体展开细讲了,有兴趣的可以自行百度去了解下。 可能看到上面的演示会有人说你这里的payload里面还是有等号啊,其实这种base64加密后面的等号是可以控制的,比如用alert(1)加密发现有等号,就写成或者alert(1);var aaa=1;之类的改变字符其长度,直到没有了等号就行了,这里主要是提供一个思路和方法。 三 漏洞案例 某网站储存型XSS(过滤了尖括号/圆括号/单引号) 漏洞详情: 经过测试后发现,该漏洞点过滤了常见的关键字,还有尖括号 >< ,单引号 ' ,圆括号 ) ( 不过经过一番测试,绕过了这些过滤,成功弹窗。 payload: 代码执行流程如下图箭头所示: 这里做下简单的说明,为什么payload要这么写呢? 1 由于过滤了尖括号> |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |