【CVE-2018-7172】Wondercms 2.4.0 任意文件删除漏洞

  • A+
所属分类:颓废's Blog
摘要

这里对删除的文件名没有任何限制,导致了可以进行目录跳转,从而删除其他目录的文件,即任意文件

漏洞位置在index.php 279行左右,

这里对删除的文件名没有任何限制,导致了可以进行目录跳转,从而删除其他目录的文件,即任意文件

private static function deleteFileThemePluginAction()  {   if (! wCMS::$loggedIn) {    return;   }   if (isset($_REQUEST['deleteFile']) || isset($_REQUEST['deleteTheme']) || isset($_REQUEST['deletePlugin']) && isset($_REQUEST['token'])) {    if (hash_equals($_REQUEST['token'], wCMS::generateToken())) {     $deleteList = [      [__DIR__.'/files', 'deleteFile'],      [__DIR__.'/themes', 'deleteTheme'],      [__DIR__.'/plugins', 'deletePlugin'],     ];     foreach($deleteList as $entry) {      list($folder, $request) = $entry;      $filename = isset($_REQUEST[$request]) ? trim($_REQUEST[$request]) : false;      if (!$filename || empty($filename)) {       continue;      }      if ($filename == wCMS::get('config', 'theme')) {       wCMS::alert('danger', 'Cannot delete currently active theme.');       wCMS::redirect();       continue;      }      if (file_exists("{$folder}/{$filename}")) {       wCMS::recursiveDelete("{$folder}/{$filename}");       wCMS::alert('success', "Deleted {$filename}.");       wCMS::redirect();      }     }    }   }  }

这里filename直接进行request,并且没有任何限制,因此可以使用../来进行目录的跳转

后面跟进recursiveDelete这个函数,
位于index.php 585行

 private static function recursiveDelete($file)  {   if (is_dir($file)) {    $list = glob($file . '*', GLOB_MARK);    foreach ($list as $dir) {     wCMS::recursiveDelete($dir);    }    rmdir($file);   } elseif (is_file($file)) {    unlink($file);   }  }

这里的file既可以是目录,也可以是单独的文件,这里都有判断,但是页面功能为删除file目录下的文件,通过修改文件名这个参数,从而可以达到任意文件删除

下面给出利用过程(poc)

【CVE-2018-7172】Wondercms 2.4.0 任意文件删除漏洞

cms给出的文件上传功能,所有上传文件都在这个file目录下

【CVE-2018-7172】Wondercms 2.4.0 任意文件删除漏洞
点击这个删除的按钮,并进行抓包

【CVE-2018-7172】Wondercms 2.4.0 任意文件删除漏洞

deleteFile参数没有任何限制,导致可以跨目录删除

【CVE-2018-7172】Wondercms 2.4.0 任意文件删除漏洞

新建了一个test.txt文件用作测试,将上面的deleteFile参数改为../test.txt,然后抓包放行

【CVE-2018-7172】Wondercms 2.4.0 任意文件删除漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: