【自动批量】phpcms v9全系列 利用篡改模板路径生成任意文件的漏洞【重要】


<?php

$files = `find . -name 'global.func.php'`;

$files = explode("\n", $files);
$files = array_filter($files);
foreach($files as $file) {
    $body = file_get_contents($file);
    if (!strpos($body, "function template(")) continue;
    if (strpos($body, "illegality.")) continue;

    echo "fixing $file\n";
    $new = preg_replace("/(function template\(.*\n)/", "\\1\n\tif(strpos(\$template, '..') !== false) {showmessage('Template filename illegality.');}\n\n", $body);
    file_put_contents($file, $new);
}

将上文保存到 php 文件里,执行该文件,仅支持 linux 系统。
Windows 下请使用手工修复方法:

phpcms\libs\functions\global.func.php

在template方法开始(约481行)加入以下代码:

if(strpos($template, '..') !== false) {
    showmessage('Template filename illegality.');
}