漏洞简介
LEAN MES系统是由深圳市深科特信息技术有限公司开发的一款应用系统,主要用于生产调度、产品跟踪、质量控制等车间管理功能。LEAN MES精益制造执行系统通过强调制造过程的信息化和透明化,帮助企业由粗放式向精益化管理模式升级。该系统 /ESOP/DownLoad.aspx 存在任意文件读取漏洞。攻击者可通过构造恶意请求,利用路径遍历(目录穿越)漏洞,实现任意文件读取,影响范围包括系统数据访问权限,可能导致敏感信息泄露,为后续攻击提供便利。
影响版本
fofa语法
(title="LEAN MES - 用户登录" && body="LEAN MES") || body="Content/js/skt.utility.checkmobile.js" || body="../MobileApp/VerifyError.aspx" || body="Content/login/login2/multiplant_top.png"
漏洞分析
根据 DownLoad.aspx 引用的代码逻辑,在bin目录找到SKT.LeanMES.Web.dll文件,在其中找到ESOP.DownLoad 的实现逻辑

根据Action的值进入不同的程序处理

当Action=PLM时,filePath1 = "/UploadFiles/PLM"

用户可控的 fileName 参数被直接拼接到基础目录后面,用于构造一个完整的文件路径 filePath2。 string filePath2 = this.Server.MapPath($"{WebHelper.WebRoot}{filePath1}/{fileName}");
构造出的路径 filePath2 首先被 File.Exists(filePath2) 检查。
如果文件存在,DownloadToLocalFromServer(filePath2, fileName) 方法被调用。
跟进DownloadToLocalFromServer方法看下它的实现

重点是this.Response.WriteFile(((FileSystemInfo) fileInfo).FullName);
WriteFile(string filename): 方法,用于将指定文件的内容直接写入HTTP响应输出流。
((FileSystemInfo) fileInfo).FullName: fileInfo 是 FileInfo 类型,它继承自 FileSystemInfo。FullName 属性返回文件的完整路径。这里的显式类型转换 (FileSystemInfo) 是可选的,因为 FileInfo 已经有 FullName 属性,直接使用 fileInfo.FullName 也可以。
fileName参数最终没有任何过滤或校验就拼接进目录后进行文件造成,从而导致了文件读取漏洞。
漏洞复现
GET /ESOP/DownLoad.aspx?fileName=file_to_read&Action=PLM HTTP/1.1
Host: lean.mes.mrxn.net

成功读取到了web.config配置文件


