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代理工具,设置代理。然后在浏览器登陆。
修改方法为GET
,修改路径为/custom/ajax_download.php?fileName=../../../../version.php
,查看根目录下的version.php文件的源码
同时,这个文件也被自动删除了。
- 本文作者: langke
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/543
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!