重装漏洞总结
常见的重装漏洞种类
1、自动删除这个安装文件
? 通过生成一个lock文件判断是否安装过
2、无验证
? 安装完成不会自动 删除文件,也不会生成lock判断
3、安装file
? 直接用Get提交step绕过,直接到下一步
4、变量覆盖导致重置
? 可以GET,POST,COOKIE任意方式提交变量名给$insLockfile给其赋值空,覆盖$insLockfile,从而让file_exists为false就不会退出
5、判断lock后无exit
? 判断是否存在Lock文件,如果存在Lock文件和header到index.php但是并没有退出。
6、解析漏洞
? 在安装后会将install.php命名为index.php.bak由于Apache解析漏洞:如果无法识别到最后一个后缀会向上解析,那么又变成了PHP了,然后结合安装时的变量覆盖又可以重装了。
7、Orther
? A.结合其他漏洞,例如任意删除,删除file导致重装
? B.当配置信息没有经过过滤而被直接写入了文件当中,就可能会导致getshell
? C.任意文件写入,文件内容为空等等.......................
VAuditDemo重装漏洞
漏洞概述
他就是属于判断lock后无exit,进程任然在的那种情况。
poc:
testdb;-- -";phpinfo();//
安装成功会直接跳到index.php。我们再次正常请求上面那个数据包就会重装整个程序。
漏洞分析
截取install.php一些关键部分
<?php
if ( file_exists($_SERVER["DOCUMENT_ROOT"].‘/sys/install.lock‘) ) {
header( "Location: ../index.php" );
//没有exit判断
}
······
$dbname = $_POST["dbname"]; //无任何过滤
······
$str_tmp="<?php\r\n";
$str_end="?>";
$str_tmp.="\$database=\"$dbname\"; \r\n";
$str_tmp.=$str_end;
$fp=fopen( "../sys/config.php", "w" );
fwrite( $fp, $str_tmp );
fclose( $fp );
//直接写入config之后。index.php会包含数据库文件所以导致的GETSHELL
zswin博客重装漏洞
漏洞概述
代码的问题,判断代码如下:
public function index(){
if (is_file(‘./Data/install.lock‘)) {
header(‘Location: ./index.php‘);
exit;
}
但是安装是调用的setconf方法鸭和index没有一点关系,他并没有把这个方法写在初始化类里面导致他的判断没有一点作用导致重置。
我们在db_prefix=zs_‘);phpinfo();//
这样子访问
代码分析
重装漏洞上面已经概述。现在我们来看看getshell如何实现的。
setconf->install->finish_done
方法,发现也是没有任何过滤直接把POST数据拿了过来
public function finish_done() {
$temp_info = F(‘temp_data‘);
//注册创始人帐号
//修改配置文件
$auth = build_auth_key();
$config_data[‘DB_TYPE‘] = $temp_info[‘db_type‘];
$config_data[‘DB_HOST‘] = $temp_info[‘db_host‘];
$config_data[‘DB_NAME‘] = $temp_info[‘db_name‘];
$config_data[‘DB_USER‘] = $temp_info[‘db_user‘];
$config_data[‘DB_PWD‘] = $temp_info[‘db_pass‘];
$config_data[‘DB_PORT‘] = $temp_info[‘db_port‘];
$config_data[‘DB_PREFIX‘] = $temp_info[‘db_prefix‘];
$db = Db::getInstance($config_data);
$config_data[‘WEB_MD5‘] = $auth;
$conf = write_config($config_data);
进入write_config
function write_config($config, $auth){
if(is_array($config)){
//读取配置内容
$conf = file_get_contents(MODULE_PATH . ‘sqldata/conf.tpl‘);
$user = file_get_contents(MODULE_PATH . ‘sqldata/user.tpl‘);
//替换配置项
foreach ($config as $name => $value) {
$conf = str_replace("[{$name}]", $value, $conf);
$user = str_replace("[{$name}]", $value, $user);
}
//写入应用配置文件
file_put_contents(‘./App/Common/Conf/config.php‘, $conf);
file_put_contents(‘./App/User/Conf/config.php‘, $user);
return ‘‘;
}
}
我们来看看user.tpl
<?php
/**
* UCenter客户端配置文件
* 注意:该配置文件请使用常量方式定义
*/
define(‘UC_APP_ID‘, 1); //应用ID
define(‘UC_API_TYPE‘, ‘Model‘); //可选值 Model / Service
define(‘UC_AUTH_KEY‘, ‘[WEB_MD5]‘); //加密KEY
define(‘UC_DB_DSN‘, ‘[DB_TYPE]://[DB_USER]:[DB_PWD]@[DB_HOST]:[DB_PORT]/[DB_NAME]‘); // 数据库连接,使用Model方式调用API必须配置此项
define(‘UC_TABLE_PREFIX‘, ‘[DB_PREFIX]‘); // 数据表前缀,使用Model方式调用API必须配置此项
所以我们还可以在DB_NAME这里构造一下,也可以导致Getshell
zswin1]‘);phpinfo();//
DedeCMS重装漏洞
本质是Apache的解析漏洞+变量覆盖造成的重装
修复建议
1、正确处理Lock文件
2、判断安装完成要退出
3、验证每一步
4、输入点进行过滤