强防御下的XSS绕过思路(二) 黑名单篇

您所在的位置:网站首页 clean是白名单还是黑名单 强防御下的XSS绕过思路(二) 黑名单篇

强防御下的XSS绕过思路(二) 黑名单篇

2024-07-17 09:44| 来源: 网络整理| 查看: 265

1.3 其他非黑名单标签和事件

尝试一些不在黑名单中的标签,比如之类,事件一般是先尝试下onxxx这样,如果发现没有被过滤,那么这种情况一般都是过滤了常见的、、onclick之类的事件,我们可以找一些不常见的事件去尝试绕过,比如ontouchstart就是触摸触发,这种在手机、平板设备上面的触发率还是比较高的。标签可以尝试xx这样去测试,如果对关键字有过滤的话,再用大小写混淆或者html编码进行绕过尝试。

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