一个网络安全学习爱好者在学习过程中记录下的笔记,希望在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();//
接着完成安装之后看到配置文件Cs_DB.php
访问