代码审计 | DedeCMS v 5.7 sp2 RemoveXSS bypass – FreeBuf互联网安全新媒体平台

相关情况

源码信息:DedeCMS-V5.7-UTF8-SP2

破绽类型:反射型XSS

下载地址:http://www.dedecms.com/products/dedecms/downloads/

破绽文件:/include/helpers/filter.helper.php

破绽阐发

1.先查看/include/helpers/filter.helper.php文件,此中的RemoveXSS函数,此中代码如下:

2.过滤的大年夜概流程是,前面先把例如十进制和十六进制的(&#xxxxxxxxxx;)这种编码,转换回原本的字符,后面便是根据$ra1和$ra2里的黑名单进行过滤调换,例如javascript:alert(1)会被过滤成 javascript:alert(1);

3.假如这个时刻,我输入的内容是

javascrip%26%2338%3B%26%2335%3B%26%2349%3B%26%2349%3B%26%2354%3B%26%2359%3B:alert(1);

4.url解码获得

javascript:alert(1);

5.这个时刻进去RemoveXSS,进行第一次处置惩罚,也便是把(&#xxxxxxxxxx;)这种编码,转换回原本的字符,获得

javascript:alert(1);

6.后面的过滤步骤便是黑名单过滤了,然而javascript并不在黑名单之内,以是不会过滤,着末便是输出内容了;

7.这个时刻输出t在标签的属性里面会从新还原成字母t,以是着末会在html输出javascript:alert(1);

8.下面是测试效果图:

总结

1.我画了草图,两次和一次编码的差别如下:

2.别的后面的代码会根据黑名单天生正则表达式,我拿此中一个测试,这段代码会天生正则表达式:

3.根据天生的此中一条正则表达式,可以看出,他应该是匹配javascript之间有没有恶意字符防止绕过,例如j avascript会被匹配到

4.正则匹配的是恶意字符之间的&#xxxxxx;,以分号结尾,然则有一点要留意的便是 即是 &#x0a,不必要分号结尾也是可以的,例如,不加分号正则就匹配不到,然则效果也是一样的,也是可以弹窗

概述

DedeCMS 简称织梦CMS,当前最新版为 5.7 sp2,近来又去挖了挖这个CMS,发明过滤XSS的RemoveXSS函数存在缺陷导致可以被绕过

5.还有一个问题,便是织梦的正则匹配&#[xX]0{0,8}([9ab]); ,留意{0,8},大年夜概是八位阁下,假如我跨越八位,就算加上分号过滤器也匹配不到,恰恰十六进制款式的时刻可以有很多0,足够跨越八位了,例如:

终极总结

破绽挖挖总照样有的,织梦的XSS过滤器有三个问题:

1.两次编码的时刻,正则和黑名单就没软用了;

2.黑名单匹配的时刻,正则无法匹配到没有分号结尾的编码;

3.也是黑名单匹配的时刻,匹配编码字符大年夜概在0-8个字符之内,然则十六进制可以跨越八个字符,这个时刻也无法匹配

*本文作者:q601333824,转载请注明来自 FreeBuf.COM

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包