openemr任意文件读取删除漏洞
字数 1059 2025-08-09 16:00:17

OpenEMR 5.0.1 任意文件读取与删除漏洞分析

漏洞概述

OpenEMR 是一款流行的开源电子健康记录和医疗实践管理解决方案。在5.0.1版本中,后台存在一个严重的任意文件读取和删除漏洞,攻击者可以利用此漏洞读取服务器上的任意文件,并且在读取后会自动删除该文件。

漏洞位置

漏洞存在于 /custom/ajax_download.php 文件中,主要涉及 readfile() 函数的不安全使用。

漏洞分析

关键代码分析

  1. 漏洞触发点位于 ajax_download.php 文件中使用了 readfile() 函数

  2. 文件路径由 $finalZip 变量决定,该变量有两个赋值来源:

    • 第一处赋值(48行)有较多限制条件
    • 第二处赋值(63行)更容易利用,只需满足43行条件为False
  3. 关键参数来源:

    • $fileName 来自GET参数 fileName
    • $qrda_file_path$GLOBALS['OE_SITE_DIR'] 构建
    • $GLOBALS['OE_SITE_DIR'] 又由 $GLOBALS['OE_SITES_BASE'] 构建

利用条件

  1. 攻击者需要已登录后台(需要有效会话)
  2. fileName 参数中不能包含逗号(,
  3. 通过路径遍历(../)可以访问任意文件

漏洞复现步骤

环境搭建

  1. 下载受影响版本(5.0.1):

    • 下载地址:https://www.open-emr.org/wiki/index.php?title=OpenEMR_Downloads&oldid=27661
  2. 安装OpenEMR环境

漏洞利用过程

  1. 访问登录页面:

    http://127.0.0.1/interface/login/login.php?site=default
    
  2. 使用有效凭证登录系统

  3. 使用Burp Suite等工具拦截请求

  4. 构造恶意请求:

    GET /custom/ajax_download.php?fileName=version.php HTTP/1.1
    Host: 127.0.0.1
    Cookie: [有效的会话Cookie]
    
  5. 发送请求后:

    • 服务器会返回目标文件(如version.php)的内容
    • 文件会被自动删除

路径遍历示例

要访问根目录下的文件,可以使用4层路径遍历:

/custom/ajax_download.php?fileName=../../../../etc/passwd

漏洞影响

  1. 敏感信息泄露:可以读取服务器上的任意文件
  2. 文件删除:读取后的文件会被自动删除,可能导致系统损坏
  3. 需要认证:攻击者需要先获取有效会话

修复建议

  1. 对用户输入的fileName参数进行严格过滤
  2. 限制文件访问范围,禁止路径遍历
  3. 移除不必要的文件删除功能
  4. 升级到最新版本(检查是否有官方补丁)

总结

该漏洞允许认证用户通过构造特殊的GET请求读取并删除服务器上的任意文件,是一个高危漏洞。医疗机构使用OpenEMR时应及时检查并修复此漏洞,避免敏感医疗数据泄露和系统损坏。

OpenEMR 5.0.1 任意文件读取与删除漏洞分析 漏洞概述 OpenEMR 是一款流行的开源电子健康记录和医疗实践管理解决方案。在5.0.1版本中,后台存在一个严重的任意文件读取和删除漏洞,攻击者可以利用此漏洞读取服务器上的任意文件,并且在读取后会自动删除该文件。 漏洞位置 漏洞存在于 /custom/ajax_download.php 文件中,主要涉及 readfile() 函数的不安全使用。 漏洞分析 关键代码分析 漏洞触发点位于 ajax_download.php 文件中使用了 readfile() 函数 文件路径由 $finalZip 变量决定,该变量有两个赋值来源: 第一处赋值(48行)有较多限制条件 第二处赋值(63行)更容易利用,只需满足43行条件为False 关键参数来源: $fileName 来自GET参数 fileName $qrda_file_path 由 $GLOBALS['OE_SITE_DIR'] 构建 $GLOBALS['OE_SITE_DIR'] 又由 $GLOBALS['OE_SITES_BASE'] 构建 利用条件 攻击者需要已登录后台(需要有效会话) fileName 参数中不能包含逗号( , ) 通过路径遍历( ../ )可以访问任意文件 漏洞复现步骤 环境搭建 下载受影响版本(5.0.1): 下载地址:https://www.open-emr.org/wiki/index.php?title=OpenEMR_ Downloads&oldid=27661 安装OpenEMR环境 漏洞利用过程 访问登录页面: 使用有效凭证登录系统 使用Burp Suite等工具拦截请求 构造恶意请求: 发送请求后: 服务器会返回目标文件(如version.php)的内容 文件会被自动删除 路径遍历示例 要访问根目录下的文件,可以使用4层路径遍历: 漏洞影响 敏感信息泄露:可以读取服务器上的任意文件 文件删除:读取后的文件会被自动删除,可能导致系统损坏 需要认证:攻击者需要先获取有效会话 修复建议 对用户输入的 fileName 参数进行严格过滤 限制文件访问范围,禁止路径遍历 移除不必要的文件删除功能 升级到最新版本(检查是否有官方补丁) 总结 该漏洞允许认证用户通过构造特殊的GET请求读取并删除服务器上的任意文件,是一个高危漏洞。医疗机构使用OpenEMR时应及时检查并修复此漏洞,避免敏感医疗数据泄露和系统损坏。