首页 > 技术文章 > SeacmsV10.7版代码审计笔记

cHr1s 2021-01-11 16:38 原文

data: 2020.11.9 10:00AM
description: seacms代码审计笔记

0X01前言

seacms(海洋cms)在10.1版本后台存在多处漏洞,事实上当前最新版V10.7这些漏洞都没有修复,网上已有10.1版本相关的分析文章,这里就不再重复赘述。我们简单分析下文章中未体现的几个漏洞。

0X02分析

代码注入

在后台admin_ping.php中,看下代码:

<?php 
header('Content-Type:text/html;charset=utf-8');
require_once(dirname(__FILE__)."/config.php");
CheckPurview();
if($action=="set")
{
	$weburl= $_POST['weburl'];
	$token = $_POST['token'];
	$open=fopen("../data/admin/ping.php","w" );
	$str='<?php  ';
	$str.='$weburl = "';
	$str.="$weburl";
	$str.='"; ';
	$str.='$token = "';
	$str.="$token";
	$str.='"; ';
	$str.=" ?>";
	fwrite($open,$str); //直接写入,未过滤
	fclose($open);
	ShowMsg("成功保存设置!","admin_ping.php");
	exit;
}

?>

代码中直接取$_POST['weburl']$_POST['token']的值写入php文件,我们直接传入";phpinfo();",看下结果:

任意文件删除

admin_template.php第114-133行:

elseif($action=='del')
{
	if($filedir == '')
	{
		ShowMsg('未指定要删除的文件或文件名不合法', '-1');
		exit();
	}
	if(substr(strtolower($filedir),0,11)!=$dirTemplate){ //目录限制,只判断前11个字符
		ShowMsg("只允许删除templets目录内的文件!","admin_template.php");
		exit;
	}
	$folder=substr($filedir,0,strrpos($filedir,'/'));
	if(!is_dir($folder)){
		ShowMsg("目录不存在!","admin_template.php");
		exit;
	}
	unlink($filedir);
	ShowMsg("操作成功!","admin_template.php?path=".$folder);
	exit;
}

代码中目录限制知判断前11位字符,利用../绕过限制,实现任意文件删除。

由于成功安装程序后,安装文件被更名为index.phpbak,故无法和重装漏洞组合利用,只能造成对网站的破坏。

目录遍历漏洞

问题和任意文件删除类似:

else
{
	if(empty($path)) $path=$dirTemplate; else $path=strtolower($path);
	if(substr($path,0,11)!=$dirTemplate){ //与上面同理
		ShowMsg("只允许编辑templets目录!","admin_template.php");
		exit;
	}
	$flist=getFolderList($path);

END

推荐阅读