Wondercms2.4.0任意文件删除漏洞(CVE-2018-7172)

  • 内容
  • 相关

    漏洞位置在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

1.png

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

2.png

点击这个删除的按钮,并进行抓包

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

4.png

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

5.png

转载自:ADog's Blog http://foreversong.cn/archives/1070

本文标签:

版权声明:若无特殊注明,本文皆为《南柯一梦》原创,转载请保留文章出处。

本文链接:Wondercms2.4.0任意文件删除漏洞(CVE-2018-7172) - https://www.nkymbk.cn/post-302.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

未显示?请点击刷新

允许邮件通知
00:00 / 00:00
顺序播放