网络安全自学篇-PHP代码审计(十一)

一个网络安全学习爱好者在学习过程中记录下的笔记,希望在CSDN能和大家一起成长,学习,分享,进步,下面分享的是代码审计实战案例之系统重装漏洞,希望对入门网安的朋友们有所帮助,大神有兴趣看看即可,勿喷感谢,同时也欢迎各位师傅私聊交流学习。文章有所参考,也感谢教授我网安知识的师父们,感谢出生在这个互联网时代,知识触手可及。
PHP代码审计目录
网络安全自学篇-PHP代码审计(一)
网络安全自学篇-PHP代码审计(二)
网络安全自学篇-PHP代码审计(三)
网络安全自学篇-PHP代码审计(四)
网络安全自学篇-PHP代码审计(五)
网络安全自学篇-PHP代码审计(六)
网络安全自学篇-PHP代码审计(七)
网络安全自学篇-PHP代码审计(八)
网络安全自学篇-PHP代码审计(九)
网络安全自学篇-PHP代码审计(十)

代码审计实战之系统重装漏洞

作者复现的是CscmsV4.1版本下系统重装页面过滤不严导致GetShell的简单案例,希望对你有帮助。
该漏洞是由于install.php由于过滤不严导致getshell
在Cscms/upload/plugins/sys/Install.php中第154行:

if(file_exists(FCPATH.'packs/install/install.lock')) {
	exit('4');
} else {
	$dbdriver=rawurldecode($_GET['dbdriver']);
	$dbhost=rawurldecode($_GET['dbhost']);
	$dbuser=rawurldecode($_GET['dbuser']);
	$dbpwd=rawurldecode($_GET['dbpwd']);
	$dbname=rawurldecode($_GET['dbname']);
	$dbprefix=rawurldecode($_GET['dbprefix']);
	if(is_numeric($dbname))exit('6');
	if(empty($dbdriver))$dbdriver='mysql';
	if($dbdriver=='mysqli') {
		$mysqli=newmysqli($dbhost,$dbuser,$dbpwd);
		if(mysqli_connect_errno()) {
			exit('2');
		} else {
			if(!$mysqli->select_db($dbname)) {
				if(!$mysqli->query("CREATEDATABASE`".$dbname."`")) {
					exit('3');
				}
			}
			mysqli_select_db($dbname);
			//修改数据库配置
			$this->load->helper('string');$CS_Encryption_Key='cscms_'.random_string('alnum',10);//修改数据库配置文件
			$config=read_file(CSCMS.'sys'.FGF.'Cs_DB.php');$config=preg_replace("/'CS_Sqlserver','(.*?)'			    
				/","'CS_Sqlserver','".$dbhost."'",$config);$config=preg_replace("/'CS_Sqlname','(.*?)'
				/","'CS_Sqlname','".$dbname."'",$config);$config=preg_replace("/'CS_Sqluid','(.*?)'
				/","'CS_Sqluid','".$dbuser."'",$config);$config=preg_replace("/'CS_Sqlpwd','(.*?)'
				/","'CS_Sqlpwd','".$dbpwd."'",$config);$config=preg_replace("/'CS_Dbdriver','(.*?)'
				/","'CS_Dbdriver','".$dbdriver."'",$config);
			$config=preg_replace("/'CS_SqlPrefix','(.*?)'/","'CS_SqlPrefix','".$dbprefix."'",$config);
			$config=preg_replace("/'CS_Encryption_Key','(.*?)'/","'CS_Encryption_Key','".$CS_Encryption_Key."'",$config);
			if(!write_file(CSCMS.'sys'.FGF.'Cs_DB.php',$config))exit('5');
			$tables=array();
			$query=$mysqli->query("SHOWTABLESFROM`".$dbname."`");
			while($r=mysqli_fetch_row($query)) {
				$tables[]=$r[0];
			}
			if(!empty($tables)&&in_array($dbprefix.'plugins',$tables)) {
				exit('1');
			}
			exit('0');
		}
	} else {
		$lnk=@mysql_connect($dbhost,$dbuser,$dbpwd);
		if(!$lnk) {
			exit('2');
		} else {
			if(!mysql_select_db($dbname)) {
				if(!@mysql_query("CREATEDATABASE`".$dbname."`")) {
					exit('3');
				}
			}
			if(mysql_select_db($dbname)) {
				//修改数据库配置$this->load->helper('string');$CS_Encryption_Key='cscms_'.random_string('alnum',10);//修改数据库配置文件
				$config=read_file(CSCMS.'sys'.FGF.'Cs_DB.php');

可以看到$dbname没有任何过滤,直接写入到配置文件Cscms\upload\cscms\config\sys\Cs_DB.php,这样就可以导致写入任意php代码。假设管理员在安装完cms时忘记将install.php删除,在重装时可能被利用获取webshell漏洞证明:在安装页面,我们可以将数据库名设置为cscms’);phpinfo();//
网络安全自学篇-PHP代码审计(十一)_第1张图片
接着完成安装之后看到配置文件Cs_DB.php
网络安全自学篇-PHP代码审计(十一)_第2张图片
访问
网络安全自学篇-PHP代码审计(十一)_第3张图片

你可能感兴趣的:(网络安全自学篇-PHP代码审计)