挖洞经验|UEditor编辑器存储型XSS漏洞

前言

UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。UEditor存在一个XSS漏洞,编辑器在定义过滤规则的时候不严和读取内容的时候的绕过导致了该漏洞,此漏洞已经上报,由于技术略菜,有分析不到位的还请多多见谅。

漏洞成因分析

漏洞文件产生在前端配置文件ueditor.config.js:

以下为纯文本粘贴为true时的过滤规则,对一些危险的标签没有做过滤,怪不得好多二次开发的。

//纯文本粘贴模式下的过滤规则 //'filterTxtRules' : function(){ // function transP(node){ // node.tagName = 'p'; // node.setStyle(); // } // return { // //直接删除及其字节点内容 // '-' : 'script style object iframe embed input select', // 'p': {$:{}}, // 'br':{$:{}}, // 'div':{'$':{}}, // 'li':{'$':{}}, // 'caption':transP, // 'th':transP, // 'tr':transP, // 'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP, // 'td':function(node){ // //没有内容的td直接删掉 // var txt = !!node.innerText(); // if(txt){ // node.parentNode.insertAfter(UE.uNode.createText('    '),node); // } // node.parentNode.removeChild(node,node.innerText()) // } // } //}()

如下图,在官方文档里也进行了说明,通过getContent和setContent方法用<p>标签读取编辑器内容

1617005619_60618c3350cbbf52665b5.png!small?1617005619486

#通getContent和setContent方法可以设置和读取编辑器的内容 var ue = UE.getEditor();//对编辑器的操作最好在编辑器ready之后再做ue.ready(function(){ //设置编辑器的内容 ue.setContent('hello'); //获取html内容,返回: <p>hello</p> var html = ue.getContent(); //获取纯文本内容,返回: hello var txt = ue.getContentTxt();});

HTML中的p标签为段落标签,目前所有主流浏览器都支持<p>标签。

从编辑器里的左上角显示html可以看出,是带有<p>标签的,所以在标签内写入payload是不被执行的

1617005741_60618cad57418d4fa5d14.png!small?1617005741335

1617005787_60618cdb55a481ca94b07.png!small?1617005787723

1617005749_60618cb5abaaefdb62d5a.png!small?1617005749735

如下图,在删除掉<p>标签后写入payload可触发XSS漏洞

1617005826_60618d020e509237a2884.png!small?1617005826019

1617005840_60618d10d6d6b15edb3f9.png!small?1617005840843

如果没有提交或者保存的功能,那么无法与数据库交互形成存储XSS,但是依然可多次点击左上角html按钮触发xss

1617006008_60618db845b43ac326228.png!small?1617006008695

漏洞利用

首先安装部署环境:https://github.com/fex-team/ueditor/releases/tag/v1.4.3.3

存储型XSS需要写入后端数据库,这里要把编辑器部署到一个可与数据库交互的环境中。

首先我们打开编辑器输入正常的文本:

1617006369_60618f21778f46d9f3e6e.png!small?1617006369503

1617006404_60618f44963b9894db568.png!small?1617006404641

抓包并将<p>标签以及原本的文本删除

1617006439_60618f6743357de1b6253.png!small?1617006439339

插入payload:

%3Cp%3E1111111"><ImG sRc=1 OnErRoR=prompt(1)>%3Cbr%2F%3E%3C%2Fp%3E

1617006474_60618f8a7495ed8da15a6.png!small?1617006474352

成功触发存储型XSS漏洞

1617006515_60618fb3439e3d17ccab9.png!small?1617006515419

1617006641_60619031caf0d7311cafd.png!small?1617006642187

经笔者调查在互联网上存在着许多ueditor编辑器在线展示的网站,这些大都存在没有与后端交互的反射型XSS,但是如果存在与后端数据库交互的功能譬如一些写作平台即可形成存储型XSS漏洞,结合一些xss平台,或者再和其他漏洞配合形成组合拳,威力也不容小藐。

防御措施

1、修改 xss过滤白名单 配置文件ueditor.config.js,增加白名单过滤,比如对一些非法的参数和标签,像       <>、,",',img标签的onerror属性,script标签等进行自动转义,或者是强制的拦截并提示。

2、对输入的数据也进行html转义,使其不会识别为可执行脚本。

看到这里的大佬,动动发财的小手 点赞 + 回复 + 收藏,能【 关注 】一波就更好了

我是一名渗透测试工程师,为了感谢读者们,我想把我收藏的一些网络安全/渗透测试学习干货贡献给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

① 2000多本网安必看电子书(主流和经典的书籍应该都有了)

② PHP标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ 网络安全基础入门、Linux运维,web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ 渗透测试工具大全

⑦ 2021网络安全/Web安全/渗透测试工程师面试手册大全

各位朋友们可以关注+评论一波 然后加下QQ群:581499282  备注:csdn  联系管理大大即可免费获取全部资料(一起来群里聊天吹水阿)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Ueditor是由百度web前端研发部开发所见即所得的编辑器,具有轻量,可定制,注重用户体验等特点。Ueditor基于BSD开源协议,除了具有代码精简、加载迅速的轻量级特质外,还采用了分层理念,使开发者可以根据实际应用和需求自由定制。 Ueditor编辑器划分为了三层架构。其中,核心层为开发者提供了诸如range、selection、domUtils类的底层API接口,中间的命令插件层不仅提供了大量的基础command,还允许开发者基于核心层进行command命令的开发,而面向用户端的界面层则可以提供自由定制的用户交互界面。Ueditor开源编辑器这种拥有可配性的模式,令开发者能够根据自身需要接入任何一层进行开发。 百度编辑器 v1.4.3 更新日志: 修复hasContents接口在非ie下只有空格时判断还为真的问题 修复在粘贴word内容时,会误命中cm,pt这样的文本内容变成px的问题 优化删除编辑器再创建编辑器时,编辑器的容器id发生变化的问题 修复提交jsonp请求时,callback参数的xss漏洞 新增jsp后台多种服务器配置下的路径定位 修复ZeroClipboard的flash地址参数名称错误 修复getActionUrl的bug 整理配置参数,把遗漏在代码中的配置项整理到ueditor.config.js里 修复图片拉伸工具和编辑拉伸长高器的样式冲突 修复文字的unicode编码会被错误再次解析问题 添加消息提示功能,冒泡提示信息 优化上传功能提示,当后端配置项没正常加载,禁用上传功能 修复单图上传按钮和jqueryValidate不兼容的问题 简化了与jqueryValidate的结合操作,具体看_examples/jqueryValidateDemo.html 修复在删除编辑器后,再次创建时丢失原有id的问题 修复查找替换在一些块节点中会导致替换错误
UEditor编辑器存在一个高危漏洞,即在抓取远程数据源时未对文件后缀名做验证,导致任意文件写入漏洞。黑客可以利用这个漏洞,在服务器上执行任意指令。这个漏洞只影响.NET版本的UEditor,其他版本暂时不受影响。 为了利用这个漏洞,黑客可以在UEditor编辑器中的shell地址处填写服务器上的图片马地址,构造成特定格式。例如,在URL中将图片马地址后缀更改为.aspx,绕过上传使其解析为aspx文件,从而达到任意文件上传的目的。 为了防止这个漏洞被利用,建议开发者及时更新UEditor编辑器的最新版本,并确保在抓取远程数据源时对文件后缀名进行验证。此外,也可以限制用户上传的文件类和大小,加强服务器的安全配置,以减少潜在的风险。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Ueditor编辑器任意文件上传漏洞](https://blog.csdn.net/m0_51468027/article/details/126077427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Django集成百度富文本编辑器uEditor攻略](https://download.csdn.net/download/weixin_38613154/14865210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是黑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值