CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 漏洞列表
  3. 正文

kindeditor漏洞

2018年11月12日 625点热度 0人点赞 0条评论
  • FB招聘站
  • 分类阅读
  • 专栏
  • 公开课
  • FIT 2019
  • 企业服务
  • 用户服务
  • 搜索
  • 投稿
  • 登录
  • 注册

KindEditor开源富文本编辑框架XSS漏洞

Fire_l252017-03-01共513865人围观 ,发现 33 个不明物体WEB安全

*原创作者:卫士通  安全服务事业部  天龙,叶龙,本文属FreeBuf原创奖励计划,未经许可禁止转载

0×01 前言

KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框。 KindEditor 使用 JavaScript 编写,可以无缝地与 Java、.NET、PHP、ASP等程序集成,比较适合在CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用。

在最近的渗透测试工作中,接触到了KindEditor输入框架,经过几番测试发现代码对XSS的防护还是挺全面的,感觉到底是开源代码,就是不一样,但是总感觉哪里不对,也就边放弃边继续,最终发现该框架还是存在一个XSS注入的问题,而且由于利用框架的时候都会将用户输入存入数据库,并对其他用户进行展示,进而引发了危害巨大的存储型XSS漏洞。

0×02 测试过程

首先,你得找到一个(女朋友)使用这种框架的网站,通过查看加载的js文件确认是否包含KindEditor框架(外观如下图):

1.png

然后开始测试,随意输入一段字符

cnm.png

我们找的示例网站中,在本地对提交的数据进行了编码,但是很明显可以看出是ASCII Hex编码,解码看到明文。

然后尝试输入可以引入标签的尖括号<> (下图中的<br>是客户端自己添加的)

2.png

解码后,我们可以看到开发人员在本地对尖括号进行了HTML编码,上burp,直接截取重放,过了客户端编码。

可是当我们输入<script>时,我们看到了返回结果中已经将该位置的内容重置成了test1(也就是用户名)

3.png

这也就意味着服务端中的过滤机制进行了正则匹配的过滤,只要<>包含特定内容,就直接替换成一个固定值,这样我们就不能成功的引入<>标签了,也就很难加入<script>标签,但是该位置的内容也不能结合属性标签进行注入,所以我们还是要想新的办法来先过服务端的过滤机制。

尝试对<>进行编码,但是很不幸的是,进行了编码后,发现返回的内容要么乱码,要么是标签被作为内容直接插入,如下图(如果是标签会被标识为蓝色)。

4.png

这就意味着服务端是过了,但是KindEditor对输出的内容进行了转义,使其不能作为标签插入HTML页面中。

接着又尝试输入空标签<>

5.png

输入空标签之后,我们看到<script>标签已经被完整返回回来了,但是总感觉开源代码不会这么简单,果然在相关页面上,alert语句并没有被执行,但是在html文档中可以看到<script>已经被成功识别为一个标签了。

6.png

分析原因,应该是,在我们的<script>标签插入html文档中的时候,整个页面已经load完成了,所以<script>标签并没有执行。既然,<script>标签没有被执行,那我们可以通过事件方案来触发进行执行啊,所以开始引入onclick事件,

7.png

从返回结果来看,一切都那么完美,感觉就要胜利了,然而当我们将鼠标点上去的时候,所有的幻想都破灭了,弹出一个新标签页,然后什么也没有了,说好的弹窗呢。查看页面

8.png

完美的开源代码,将事件处理函数修改了,所以不能成功执行。通过测试其他的事件和使用JavaScript伪协议,都是同样的问题,在on和java之后添加了下划线。到底是开源代码,服了,好吧,该放弃这个女朋友了。

但是总感觉哪里有问题,不该是这样的结局,开始重新整理思路: <>空标签可以帮我们绕过服务端基本的过滤机制,但是新加入的<script>不能被成功执行,事件处理函数又被KindEditor给清洗了,那可不可以试试其他标签,不需要其他通过事件监听来触发的标签呢,还真被我找到了,成功穿过KindEditor的围堵。

9.png

10.png

终于,看到了我们最喜爱的弹窗,收工。(由于还在于框架作者进行联系,所以这里不方便透漏具体的注入代码)。

0×03 源码分析

为了确定是网站开发人员使用的问题还是KindEditor本身的问题,我们前往官网下载它的源代码进行分析。

整个项目的目录结构如下

11.png

打开KindEditor-all.js文件,开始分析。

如果KindEditor本身做了处理,肯定是以关键字filter定义的,全局搜索filter。发现代码中filter相关的参数被_formatHtml函数调用。

12.png

找到该函数的定义

13.png

从函数定义中我们可以看到KindEditor确实对输入内容进行了相关的过滤,只是在过滤时并未完美处理所有的输入情况。通过分析源代码我们也可以看到,KindEditor确实也没有对我们输入的标签进行过滤,从而引发了XSS注入的问题。

0×04 总结

从KindEditor的官方网站http://kindeditor.net的案例页面我们可以看到国内还是有很多网站使用了相关技术,下面是一些使用这些网站的厂商。

15.png

wtf.png

但是之后,对上面提到的网站进行测试,发现其中的一部分网站已经没有在使用相关代码了,但是从KindEditor的github主页上看到还是有很大一部分人关注这一项目,这就证明还是有很多人在使用这一框架。只要使用就可能会存在这样的存储型的XSS漏洞,至于XSS漏洞的危害,就不需要多说了。

0×05 防范措施

在开发过程中开发人员不能过度依赖第三方库所做的防范,还是需要在内容输出时进行Html编码,或者完善已有的过滤规则,从而杜绝类似的注入攻击。

0×06 感谢

感谢斌爷在整个测试过程中对我前端相关技术的指导,这个女朋友有你一半。

*原创作者:卫士通  安全服务事业部  天龙,叶龙,本文属FreeBuf原创奖励计划,未经许可禁止转载

Fire_l251 篇文章等级: 1级
|
|
  • 上一篇:暗影追踪:谁是LeakedSource.com的幕后运营者?
  • 下一篇:浅谈Web端权限维持

这些评论亮了

  • pygain(2级)回复
    最想看那段被档了
    )10(亮了
发表评论

已有 33 条评论

  • pygain (2级) 2017-03-01回复1楼

    最想看那段被档了

    亮了(10)
  • platform 2017-03-01回复2楼

    见到这种又能装逼又不用公开exp的文章,我想说楼主你赚大了!

    亮了(4)
    • Fire_l25 (1级) 2017-03-01回复

      @ platform
      下载源码去看看,关键函数也已经指出来了,如果你还懂一些XSS注入和js的话,看返回结果和源码,应该可以猜出来注入语句。

      亮了(3)
  • test 2017-03-01回复3楼

    关键地方挡了,文章就变成了一句总结:见标题

    亮了(2)
  • plane636 (4级) 2017-03-01回复4楼

    最想看那段被档了

    亮了(1)
  • tester 2017-03-01回复5楼

    影响版本范围是?通杀?

    亮了(1)
    • Fire_l25 (1级) 2017-03-01回复

      @ tester
      通杀不至于,文章中已经提到了,这还依赖于服务端本身的防护。但是KindEditor开源框架提供了一些防护,开发人员可能会依赖这些防护,从而导致注入的问题。

      亮了(1)
      • tester 2017-03-01回复

        @ Fire_l25  thx

        亮了(0)
  • 此间少年 (1级) 2017-03-01回复6楼

    首先是个self-xss,要想发挥作用,还是得看网站有没有对富文本的内容做处理吧,我看payload很简单。网站要是加点基本的防护可能就给过滤了

    亮了(1)
    • Fire_l25 (1级) 2017-03-01回复

      @ 此间少年
      self-xss不至于。这种输入框一般都是用在评论区,或者一些会进行存入数据库的输入,还是会引起存储型XSS漏洞的。
      是的,还要依赖应用本身的防护。开发人员使用它,可能是迫于项目时间问题,仅仅用来提供这样一个功能,进而依赖于KindEditor提供的现有防护。

      亮了(0)
  • 倪茂志 (2级) 2017-03-01回复7楼

    干的漂亮呀,少年!

    亮了(1)
  • 2hack 2017-03-01回复8楼

    以前写项目,MYSQL存的是已经HTML实体化转义的字符串居然被KindEditor给转回来了。于是在Kind的TEXTAREA的输入框里面出现了一个Input表单,我也是醉了。

    亮了(0)
    • Fire_l25 (1级) 2017-03-01回复

      @ 2hack
      哈哈。

      亮了(0)
  • MyKings (3级) 2017-03-01回复9楼

    Payload是这样么?<iframe src="http://evil.com/evil.js">

    亮了(0)
    • 乖乖马先森 (2级)黑掉大佬电脑然后窃取0day。。。。。 2017-03-11回复

      @ MyKings  这样涉及到跨域了吧??

      亮了(0)
  • hellen 2017-03-01回复10楼

    我猜是Link 标签

    亮了(1)
  • 我叫扛把子 2017-03-01回复11楼

    KindEditor说这锅我不背。
    KindEditor只是个前端编辑器,后端怎么过滤内容的和KindEditor没有一毛钱关系。。

    看下官网的demo.php根本就没做过滤。。
    http://kindeditor.net/ke4/php/demo.php

    亮了(1)
    • Fire_l25 (1级) 2017-03-01回复

      @ 我叫扛把子
      是,你说的没错,它是前端编辑器,但是在对返回的数据前端显示时,KindEditor对数据有做处理,这个从我上面贴的源码中也可以看到,而这些处理并没有很完善。文章中我也说了,这涉及到应用本身的防护是否完善,这些防护不能完全依赖于这些第三方框架提供的。

      亮了(0)
      • 我叫扛把子 2017-03-01回复

        @ Fire_l25
        看这,KindEditor根本没有打算在前端做防御。
        https://github.com/kindsoft/kindeditor/issues/158

        也就是简单的过滤了<script>标签,不知道你文章中提到的onclick变成的on_click前端防御代码在哪里。

        亮了(0)
      • Fire_l25 (1级) 2017-03-01回复

        @ 我叫扛把子
        看来作者确实前端只是过滤了部分特殊的标签。开始的时候我也挺好奇它到底有没有做防御,看到formathtml函数的时候,发现它用正则匹配了一些,觉着有做防御的意思,但没有做完善。不过现在看来,还是应该提醒一下开发,防御还是得服务端自己来。太谢谢你了,也打消了我的一些疑虑。能私信我你的微信吗,好以后有问题,向你请教。

        亮了(1)
    • Fire_l25 (1级) 2017-03-01回复

      @ 我叫扛把子
      demo中也没有做数据交互的那些处理。只是展示了前端编辑的效果。

      亮了(0)
      • 我叫扛把子 2017-03-01回复

        @ Fire_l25
        文章中提到的代码全部是js。
        官方文档根本没有提到前端防御的事。。
        http://kindeditor.net/docs/usage.html

        亮了(0)
      • Fire_l25 (1级) 2017-03-01回复

        @ 我叫扛把子
        多少背点锅。

        亮了(0)
  • 疑问。 2017-03-01回复12楼

    "分析原因,应该是,在我们的<script>标签插入html文档中的时候,整个页面已经load完成了,所以<script>标签并没有执行。"
    是这样吗?页面load完成了,$(‘xxx’).html(‘<script>alert(1)</script>’);这样也会弹的。 在页面load完成后,浏览器实时渲染。

    亮了(1)
    • Fire_l25 (1级) 2017-03-01回复

      @ 疑问。 这个jq的实现方法里之所以会被唤起,是因为jq的实现里有再次加载了onload方法的,使得js标签能被解析到。

      亮了(0)
  • spoofing 2017-03-01回复13楼

    <iframe src="javascript:alert("1")"> 目测是这个

    亮了(1)
  • 王松_Striker 2017-03-02回复14楼

    别联系了,之前帮他们修了个BUG,联系了一年都没联系上。

    亮了(0)
  • 逗逼 2017-03-02回复15楼

    这尼玛是个案,只能说你测的这个网址没过滤好,和editor有毛线关系。

    亮了(2)
  • Xss_Medusa 2017-03-08回复16楼

    iframe载入远端页面而已

    亮了(0)
  • 乖乖马先森 (2级)黑掉大佬电脑然后窃取0day。。。。。 2017-03-11回复17楼

    当对<script>alert(1)</script>转义输出,不作为标签的时候,楼主是怎么想到的用空标签<> 求解这个思路

    亮了(0)
  • spoofing 2017-04-22回复18楼

    我也是醉了 整个文章的最关键的一句话被打码,忽悠读者吗 就是来骗钱的

    亮了(1)
  • discovery (1级) 2018-04-17回复19楼

    请问存在漏洞的版本是多少?

    亮了(0)
  • 1u0hun (1级) 2018-07-02回复20楼

    不需要其他通过事件监听来触发的标签,label标签应该可以吧

    亮了(0)

 

必须您当前尚未登录。登陆?注册

必须(保密)

表情插图

取消

Fire_l25

这家伙太懒,还未填写个人描述!

1文章数9评论数

最近文章

KindEditor开源富文本编辑框架XSS漏洞

2017.03.01

浏览更多

相关阅读

  • Django开发与攻防测试(入门篇)
  • CVE-2018-4878案例:针对香港某电信公司网站被入侵攻击的调查
  • FaceBook价值4500美元的安全问题
  • 螳螂捕蝉黄雀在后,通过.onion域名转移支付的勒索比特币
  • JavaScript的注入引出技术诈骗

特别推荐

关注我们 分享每日精选文章

活动预告

  • 11月

    FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气

    已结束
  • 10月

    【16课时-连载中】挖掘CVE不是梦(系列课程2)

    已结束
  • 10月

    【首节课仅需1元】挖掘CVE不是梦

    已结束
  • 9月

    【已结束】自炼神兵之自动化批量刷SRC

    已结束

FREEBUF

  • 免责声明
  • 协议条款
  • 关于我们
  • 加入我们

广告及服务

  • 寻求报道
  • 广告合作
  • 联系我们
  • 友情链接

关注我们

  • 官方微信
  • 新浪微博
  • 腾讯微博
  • Twitter

赞助商

Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号

css.php

正在加载中...

0daybank

标签: 暂无
最后更新:2018年11月12日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me