首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 归档 标签 关于

CVE-2025-10747 WordPress WP-DownloadManager 插件任意文件上传漏洞分析

摘要

漏洞编号 CVE-2025-10747 漏洞描述 访问URL: https://nvd.nist.gov/vuln/detail/CVE-2025-10747 WordPress和WordPress plugin都是WordPress基金会的产品,WordPress是一套使用PHP语言开发的博客平台,该平台具有在基于PHP和MySQL的服务器上架设个人博客网站的功能。 WordPress plug...

file_upload_to _FILES file_upload file file_path CVE 2025 10747 WordPress plugin
2026-11-11 1 阅读 约6分钟阅读 先知社区
分享:
字号:
漏洞编号 CVE-2025-10747 漏洞描述 访问网址: https://nvd.nist.gov/vuln/detail/CVE-2025-10747 WordPress 和 WordPress 插件都是 WordPress 基金会的产品,WordPress 是一套使用 PHP 语言开发的博客平台,该平台具有在基于 PHP 和 MySQL 的服务器上设置个人博客网站的功能。 WordPress 插件 WP-DownloadManager 1.68.11及版本均存在文件上传漏洞,该漏洞源自“download-add.php”文件未正确验证文件类型,具有管理员权限或更高访问权限的攻击者可利用该漏洞上传任何恶意文件,从而远程执行恶意代码。 后续版本 WordPress插件 WP-DownloadManager <= 1.68.11 环境搭建 Apache V2.4.39之前 WordPress V5.8.6 PHP V7.4.3 Mysql V8.0.11 WordPress插件WP-DownloadManager V1.68.10插件下载链接:https://downloads.wordpress.org/plugin/wp-downloadmanager.1.68.10.zip 安装WordPress官网下载WordPress访问网址:https://wordpress.org/wordpress-5.8.6.zip数据库wp,数据库sql语句,生成对应源码修改wp-config文件,连接数据库启动服务及数据库,填写配置页面数据,完成后到登录安装插件将插件放入\wp-content\plugins文件夹登录站点,启动插件启动后出现Downloads模块配置文件上传的文件夹,默认在files成功文件夹,网站路径无需手动添加插件安装进入! 代码分析 1、打开项目源码插件所在代码 2、根据NVD通报漏洞信息,由于文件download-add.php存在安全问题,直接分析该代码文件在数据库代码中: case0:表示从服务器现有文件中选择; case1:表示用户上传本地文件; case 2:用户输入远程URL地址加载 (1)分析case0代码: case 0: $file = !空($_POST['文件'])? addslashes( wp_kses_post( 修剪( $_POST['file'] ) ) ) : ''; $file = download_rename_file($file_path, $file); $file_size = 文件大小($file_path.$file);休息; 猜测代码获取本地服务器指定文件夹下的文件,无法上传文件,不存在上传问题。 (2)分析"case1"代码: case 1: if( $_FILES['file_upload']['size'] > get_max_upload_size() ) { $text = '

'.sprintf(__('文件大小太大。最大大小为 %s', 'wp-downloadmanager'), format_filesize(get_max_upload_size())).'

';休息; } else { if(is_uploaded_file($_FILES['file_upload']['tmp_name'])) { $file_upload_to = !空( $_POST['file_upload_to'] ) ? $_POST['file_upload_to'] : ''; if( $file_upload_to !== '/' ) { $file_upload_to = $file_upload_to . '/'; } if(move_uploaded_file($_FILES['file_upload']['tmp_name'], $file_path.$file_upload_to.basename($_FILES['file_upload']['name']))) { $file = $file_upload_to.basename($_FILES['file_upload']['name']); $file = download_rename_file($file_path, $file); $file_size = 文件大小($file_path.$file); } else { $text = '

'.__('上传文件出错', 'wp-downloadmanager').'

';休息; } } else { $text = '

'.__('上传文件时出错', 'wp-downloadmanager').'

';休息; } } 休息; 函数get_max_upload_size()判断文件大小。函数is_uploaded_file()判断是否为HTTP POST方法上传。函数move_uploaded_file()将文件下载保存至web文件夹里。该段代码对上传的文件缺乏校验,没有进行重命名、扩展名过滤等操作,这就导致了任何文件上传错误。 (3)分析“case2”代码 case 2: $file = !空( $_POST['file_remote'] ) ? esc_url_raw( $_POST['file_remote'] ) : ''; if ( is_file_remote_valid( $file ) ) { $file_size = remote_filesize( $file ); } else { $text = '

' . __( '解析远程文件 URL 时出错', 'wp-downloadmanager' ) . '

'; } 休息; 跟一下函数is_file_remote_valid(),这个函数判断URL是否合法,目前来看,没有文件过滤,要是否存在问题,就需要看加载后文件在什么位置。 再跟一下函数remote_filesize(); 该函数只访问了文件获取其大小,下载文件到服务器。继续看代码这里直接使用文件(远程加载URL)为文件名直接存入数据库,将文件下载到WEB站点目录下。所以“case2”不存在漏洞问题。综上,三个功能点中只有“case1”代码文件上传都存在漏洞。漏洞复现登录后台,选择本地上传文件上传成功,这里文件ID=9在主题里配置下载按钮,点击更新访问页面,出现下载按钮修复措施厂商尚未提供漏洞修复方案,请关注厂商主页更新: https://wordpress.org/plugins/wp-downloadmanager/advanced/或者可以按以下修改代码(仅供参考) case 1: // 1. 检查是否存在上传错误或大小超限 if (empty($_FILES['file_upload']['tmp_name']) || $_FILES['file_upload']
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱