【技术分析】Metinfo利用sql注入快速getshell

liudao  2085天前

Image


0x00

MetInfo是一个比较的企业建站软件,用户众多。在去年的时候,曾爆出过几个漏洞,有XXE,SQL注入,任意文件读取等,详情见以下链接。印象比较深刻的是两个SQL注入漏洞,一个位于message.calss.php,一个位于feedback.class.php。漏洞都位于前台。只不过第二个洞比较苛刻,每注入一次需要输入一次验证码,利用起来貌似很鸡肋。最近看了一次metinfo,找到一个利用SQL注入写入shell的简便方法,不需要脱裤。


0x01

首先看app/system/include/class/web.class.php文件,在web类的析构函数中,先读取了缓冲区的数据(在加载基础配置文件的时候进行的ob_start(),打开的缓冲区),经过一系列替换操作(几乎无影响)之后赋值给了$output变量,这里缓冲区数据可以理解为打开缓冲区以后调用echo方法输出的数据。

1.png

接着调用replace_attr方法进行了标签处理,这里也没太大影响。

2.png

最后进入重点,如果提交的参数metinfonow和$_M['config']['met_member_force']的值相同,则调用file_put_contents函数把上述过程中缓冲区读取的内容写入到$_M['form']['html_filename']文件。这里$_M['form']数组中的内容是$_GET,$_POST,$_COOKIE参数的集合。具体代码就不贴了。也就是说,这里文件名可控,不管改成php,phtm,php5都可以。

3.png

但是前提是必须知道$_M['config']['met_member_force'],通过分析,这个变量位于met_config表中id=45的位置。在install/index.php中,met_member_force是取得a-z的7位随机数。这里看了下,没有存在伪随机数漏洞,很可惜。

4.png

所以这里可以利用SQL注入,直接注入met_config表中id=45对应的值,来获取met_member_force。如果只注入一条数据,效率就会快很多。


0x02

既然文件名可控,接下来看看文件内容是否可控,分析下web类的子类。在这里我找到一个doupfile方法,位于app/system/include/module/uploadify.class.php文件中。

5.png

看最后一行代码,echo jsonencode($back),这里$back变量通过json格式化进入了缓冲区,往上走,看下$back是否可控。在这一行:$back = $this->upload($_M['form']['formname']);这里调用upload方法,将上传文件的参数名传了进去,跟进upload方法。

6.png

在upload方法中,把上传文件的属性都赋值给了$filear数组。接着往下看。

7.png

可以看到,检测文件后缀的时候,调用了getext方法,这里以“.”对文件名进行分割,取了数组的最后一位。如果上传文件名里没有“.”,那么分割后数组中只有一个元素。也就是说,上传不含“.”的文件名,getext取得的扩展名就是上传的文件名。

8.png

接着看文件后缀名检测,如果文件名的后缀不在白名单中(这里白名单固定),会把文件扩展名拼接{$_M['word']['upfileTip3']}传入error方法中。

9.png

跟进error方法,把传入的参数赋值给了$back['errorcode'],说明echo jsonencode($back)的内容是可控的。

10.png

到这里基本就结束了,文件名和文件内容都可控,接下来构造payload。


0x03

构造payload如下:

11.png

查看根目录

12.png

查看1.php文件内容,并访问

13.png

成功写入代码

14.png


本文由白帽汇原创,转载请注明来源:https://nosec.org/home/detail/2324.html

白帽汇从事信息安全,专注于安全大数据、企业威胁情报。

公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。

为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。

最新评论

bbasdfq  :  牛**
2072天前 回复
夏夜星语  :  求问:发现一个互联网上的站点存在SQL注入,但利用limit 44, 1查询第45行,结果不是那个met_member_force 值,难道要从limit 1,1 到 limit 500,1吗?有什么好**?当然我知道where被过滤了。
2045天前 回复
昵称
邮箱
提交评论