openemr任意文件读取删除漏洞

OpenEMR 是最受欢迎的开源电子健康记录和医疗实践管理解决方案。 5.0.1版本后台存在任意文件读取和删除漏洞。

前言

OpenEMR 是最受欢迎的开源电子健康记录和医疗实践管理解决方案。

5.0.1版本后台存在任意文件读取和删除漏洞。

审计过程

通过全局搜索容易出现问题的函数,发现readfile()函数,通过一个一个跟,最终锁定如下文件。

通过进一步跟踪,寻找参数$finalZip来源,发现有两个赋值的地方。通过分析,第一处(48行)赋值限制条件太多,跟进第二处(63行)赋值,要想代码执行63行,就需要43行处为False

所以,只需要变量$fileName中不包含,即可。进一步跟进,发现变量$fileName来自GET方法fileName参数。

还有一个变量,$qrda_file_path,看一下来源

继续跟进变量$GLOBALS['OE_SITE_DIR']

跟进变量$GLOBALS['OE_SITES_BASE']

那么,现在参数$finalZip就很容易构造了。如果要查看根目录任意文件,只需要../../../../4层即可

不过需要注意,查看文件后,会删除查看的文件。
同时,这个页面需要登陆后才能访问。

比如查看根目录的version.php文件,构造路径/custom/ajax_download.php?fileName=../../../../version.php即可。

复现过程

下载地址: https://www.open-emr.org/wiki/index.php?title=OpenEMR_Downloads&oldid=27661

环境安装好之后,来到登录页面。
http://127.0.0.1/interface/login/login.php?site=default

然后打开Burp代理工具,设置代理。然后在浏览器登陆。

选择一个登录后的数据包,发送到burp的重放模块

修改方法为GET,修改路径为/custom/ajax_download.php?fileName=../../../../version.php,查看根目录下的version.php文件的源码

version.php文件内容:

同时,这个文件也被自动删除了。

  • 发表于 2021-08-31 15:04:34
  • 阅读 ( 6435 )
  • 分类:代码审计

0 条评论

请先 登录 后评论
langke
langke

2 篇文章

站长统计