漏洞类型: 路径遍历(任意文件下载)
受影响函数: ajax_downloadfile()
影响: 具有低权限(订阅者+)的已认证用户可以下载服务器上的任意文件,包括敏感配置文件,通过利用对 flm_file 参数验证不足。
CVSS v3.1 评分: 6.5(中危)
向量: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
GET 请求中的 flm_file 参数直接与备份目录路径拼接,未经充分清理。当前清理函数 Flmbkp_Form_Helper::sanitizeInput_html() 无法阻止 ../ 之类的序列,允许攻击者遍历预期备份文件夹之外的目录。
// modules\filemanager\controllers\backups.php
public function ajax_downloadfile()
{
check_ajax_referer('flmbkp_ajax_nonce', 'flmbkp_security');
@set_time_limit(900);
$flm_file = (isset($_GET['flm_file'])) ? Flmbkp_Form_Helper::sanitizeInput_html($_GET['flm_file']) : '';
$backup_directory=Flmbkp_Form_Helper::backup_directory();
$fullpath = $backup_directory.'/'.$flm_file;
header("Content-Length: ".filesize($fullpath));
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".basename($fullpath)."\";");
readfile($fullpath);
exit;
}




flm_file 参数,包含路径遍历载荷以定位敏感文件。
泄露敏感系统文件。
暴露存储在 wp-config.php、.env 或应用日志等文件中的凭证。
促进进一步攻击,包括完全系统入侵。
使用 realpath() 解析所请求文件的绝对路径,并确保其在备份目录内。
在文件访问之前,拒绝包含 ../、%00 或其他遍历相关序列的请求。
强制严格的能力检查(例如,仅限 manage_options 用户可以下载备份)。
根据允许文件的白名单清理和验证文件名。
如果您无法按照报告中描述的方式复现该问题,请参考以下视频演示(PoC)获取清晰的复现场景: