1. 程式人生 > 實用技巧 >SeacmsV10.7版程式碼審計筆記

SeacmsV10.7版程式碼審計筆記

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