代码审计 | DedeCMS v 5.7 sp2 RemoveXSS bypass

2018 年 8 月 30 日 FreeBuf

概述

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

相关环境

源码信息: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)会被过滤成 ja vasc ript: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解码得到

javascrip&#116&#59;: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 ,不需要分号结尾也是可以的,例如,不加分号正则就匹配不到,但是效果也是一样的,也是可以弹窗。

5.还有一个问题,就是织梦的正则匹配&#[xX]0{0,8}([9ab]); ,注意{0,8},大概是八位左右,如果我超过八位,就算加上分号过滤器也匹配不到,正好十六进制格式的时候可以有很多0,足够超过八位了,例如:

最终总结

漏洞挖挖总还是有的,织梦的XSS过滤器有三个问题:

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

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

3.也是黑名单匹配的时候,匹配编码字符大概在0-8个字符之内,但是十六进制可以超过八个字符,这个时候也无法匹配。

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

登录查看更多
0

相关内容

一个技术成熟功能强大的PHP语言CMS系统,让你轻松建站!
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
新书《面向机器学习和数据分析的特征工程》,419页pdf
专知会员服务
142+阅读 · 2019年10月10日
机器学习领域必知必会的12种概率分布(附Python代码实现)
算法与数学之美
21+阅读 · 2019年10月18日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
逆向 | C++ 加壳程序的编写思路
计算机与网络安全
9+阅读 · 2019年1月1日
95行代码破解极验滑动验证码(附源码)
FreeBuf
11+阅读 · 2018年5月9日
Python3.7中一种懒加载的方式
Python程序员
3+阅读 · 2018年4月27日
tensorflow LSTM + CTC实现端到端OCR
机器学习研究会
26+阅读 · 2017年11月16日
Continual Unsupervised Representation Learning
Arxiv
7+阅读 · 2019年10月31日
Revealing the Dark Secrets of BERT
Arxiv
4+阅读 · 2019年9月11日
Arxiv
4+阅读 · 2019年8月7日
Object Detection in 20 Years: A Survey
Arxiv
48+阅读 · 2019年5月13日
Video-to-Video Synthesis
Arxiv
9+阅读 · 2018年8月20日
Arxiv
8+阅读 · 2018年4月8日
Arxiv
3+阅读 · 2015年5月16日
VIP会员
相关VIP内容
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
新书《面向机器学习和数据分析的特征工程》,419页pdf
专知会员服务
142+阅读 · 2019年10月10日
相关资讯
机器学习领域必知必会的12种概率分布(附Python代码实现)
算法与数学之美
21+阅读 · 2019年10月18日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
逆向 | C++ 加壳程序的编写思路
计算机与网络安全
9+阅读 · 2019年1月1日
95行代码破解极验滑动验证码(附源码)
FreeBuf
11+阅读 · 2018年5月9日
Python3.7中一种懒加载的方式
Python程序员
3+阅读 · 2018年4月27日
tensorflow LSTM + CTC实现端到端OCR
机器学习研究会
26+阅读 · 2017年11月16日
相关论文
Continual Unsupervised Representation Learning
Arxiv
7+阅读 · 2019年10月31日
Revealing the Dark Secrets of BERT
Arxiv
4+阅读 · 2019年9月11日
Arxiv
4+阅读 · 2019年8月7日
Object Detection in 20 Years: A Survey
Arxiv
48+阅读 · 2019年5月13日
Video-to-Video Synthesis
Arxiv
9+阅读 · 2018年8月20日
Arxiv
8+阅读 · 2018年4月8日
Arxiv
3+阅读 · 2015年5月16日
Top
微信扫码咨询专知VIP会员