漏洞简介
东胜物流软件是青岛东胜伟业软件有限公司一款集订单管理、仓库管理、运输管理等多种功能于一体的物流管理软件。东胜物流信息管理系统 /MvcShipping/MsCodeAll/GetLanesList 接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。
影响版本
fofa语法
(body="FeeCodes/CompanysAdapter.aspx" || body="dhtmlxcombo_whp.js" || body="dongshengsoft" || body="theme/dhtmlxcombo.css") && body="东胜"
漏洞分析
根据.NET MVC特性找到MsCodeAllController下的GetLanesList方法,看下它的实现
public ContentResult GetLanesList(string condition, string sort)
{
List<Code_lanesmb> lanesList = MsCodeAllDAL.GetLanesList(condition, sort);
string str = JsonConvert.Serialize(new
{
Success = true,
Message = "查询成功",
totalCount = lanesList.Count,
data = Enumerable.ToList<Code_lanesmb>((IEnumerable<Code_lanesmb>) lanesList)
});
return new ContentResult() { Content = str };
}
参数condition、sort被带入MsCodeAllDAL.GetLanesList,跟进看下
public static List<Code_lanesmb> GetLanesList(string strCondition, string companyid, string sort = null)
{
StringBuilder strSql = new StringBuilder();
strSql.Append(" SELECT ");
strSql.Append(" GID,LANEID,LANE,LANEEN,EDICODE,OP,DOC,CUSTSERVICE");
strSql.Append(" from code_lanes ");
if (!string.IsNullOrEmpty(strCondition))
strSql.Append(" WHERE " + strCondition);
string str = DatasetSort.Getsortstring(sort);
if (!string.IsNullOrEmpty(str))
strSql.Append(" order by " + str);
else
strSql.Append(" order by LANEID");
return MsCodeAllDAL.SetLanesData(strSql);
}
- 在
MsCodeAllDAL.GetLanesList方法中,程序通过字符串拼接的方式构建 SQL 查询语句。 - 参数
strCondition直接来源于控制器MsCodeAllController.GetLanesList的输入参数condition。该参数未经过任何参数化处理、类型转换或白名单过滤,直接拼接到 SQL 字符串中。 - 虽然使用了
DatasetSort.Getsortstring转换,但如果该工具类未进行严格的字段白名单过滤,攻击者可以通过sort参数注入 SQL 片段(如基于报错的注入或时间盲注)。 - 使用了
DatabaseFactory.CreateDatabase().ExecuteReader执行原始 SQL 字符串。
漏洞复现
GET /MvcShipping/MsCodeAll/GetLanesList?condition=SQLI_POC&sort=LANEID HTTP/1.1
Host: dongsheng.mrxn.net

通过联合注入,成功在响应回显当前数据库版本信息


