-
-
[原创]ueditor漏洞利用&源码分析详细版
-
发表于: 2023-3-31 16:56 7017
-
漏洞简介
大家都说这个漏洞是上传漏洞,其实这个不是上传漏洞,是远程文件下载漏洞。
思路类似于我们打内网的时候远程wget或者certutil直接把payload或者exe下载到目标机器上,然后运行上线。
利用参考
https://www.cnblogs.com/hei-zi/p/13394764.html
这里主要讲源码的部分。
ueditorC#版本源码解析
下载好漏洞组件,进行查看
里面这个controller.ashx相当于一个控制器,也就是入口点,类似于mvc架构中的controller,和thinkphp那种模式有点类似。
打开看一下这个代码
不同的case,就是不同的条件跳转,参数从前台用?action=config等方式传入,然后进入后台,对应不同的case,即进入不同的逻辑。
别的我们先不看,先看漏洞产生的逻辑语句。
直接定位到漏洞的逻辑语句
然后这里看到有个CrawlerHandler,是new出来的
crtl键按住查看
非常好,啥也没有,这里我对c#也不是很了解,于是我又打开原本的那个文件来看
这里就找到了对应的cs文件
cs文件就是c#文件的源码,c sharp = cs
然后打开看一下
看不明白,但是结合之前
这一行,是在实体话crawlwerhander new时候通常要调用一个构造方法,也就是和CrawlerHandler同名的一个构造方法。
这个构造方法在这里
也没啥用,然后又看回去,发现一行
这里调用了一个Process方法,每一个对应的cs文件中都有一个Process方法,前台参数,后台接受参数并使用。
这里有个fetch方法,跟一下
poc中有个特殊的的点,网上很多文章没讲清楚
传过去的参数是
1.gif?.aspx
之所以为什么是1.gif?.aspx才能生效,这里还得看源码
首先这里写明了response中的content-Type是image
也就是返回包的部分
所以上传的东西必须是一个具有image文件头的东西
其次后台对于文件名的判定是通过.来判定
也就是这一行代码
就用的是这个GetFileName方法
这个方法经过我的测试
这个payload会被当成一个名为1.gif?的文件,但是后缀还是.asp,也就是按照asp来做解析
而这个文件,在前台1.gif?xxxxx按照浏览器的逻辑,?后面就是参数,因此前台解析这个http://127.0.0.1/xxx/1.gif?.asp
是当成图片文件来做解析的
该漏洞是由于上传文件时,使用CrawlerHandler类未对文件类型进行检验,导致了任意文件上传。升级可以防止这个漏洞产生。