'.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']