东胜物流软件 ZWCCX.aspx SQL注入漏洞


漏洞简介

东胜物流软件是青岛东胜伟业软件有限公司一款集订单管理、仓库管理、运输管理等多种功能于一体的物流管理软件。东胜物流信息管理系统 Areas/Mobile/Views/WMS/ZWCCX.aspx 接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

影响版本

fofa语法

(body="FeeCodes/CompanysAdapter.aspx" || body="dhtmlxcombo_whp.js" || body="dongshengsoft" || body="theme/dhtmlxcombo.css") && body="东胜"

漏洞分析

根据 Areas/Mobile/Views/WMS/ZWCCX.aspx 的代码引用<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ZWCCX.aspx.cs" Inherits="DSWeb.Areas.Mobile.Views.WMS.ZWCCX" %>,在dll中找到DSWeb.Areas.Mobile.Views.WMS.ZWCCX的逻辑实现

protected void Page_Load(object sender, EventArgs e)
{
  this.SetupHTML();
  string str = this.Request.QueryString["truckno"];
  str.Replace(",", "").Replace("'", "");
  ((HtmlInputControl) this.hdkeyword).Value = str;
}

private void SetupHTML()
{
  string str1 = this.Request.QueryString["truckno"];
  str1.Replace(",", "").Replace("'", "");
  if (string.op_Inequality(str1, ""))
  {
    string str2 = $"select distinct wo.DODATE TiHuoRiQi,\r\n                                               wod.STORAGENAME CangKu,\r\n                                               ic.ADDR DiZhi,\r\n                                               ic.TEL  DianHua\r\n                                        from  wms_out_detail wod\r\n                                        left join wms_out wo on wod.OUTBSNO = wo.BSNO \r\n                                        left join info_client ic on wod.STORAGENAME = ic.SHORTNAME\r\n                                        where wod.TRUCKNO = '{str1}' and wo.DODATE>=(GETDATE()-3) order by wo.DODATE desc";
    Database database = DatabaseFactory.CreateDatabase();

漏洞形成原因如下

  1. 过滤失效:代码尝试使用 str1.Replace(",", "").Replace("'", "") 过滤危险字符,但 String.Replace() 方法返回新字符串,必须将返回值赋值才有效。当前代码未赋值,导致过滤完全无效。
// 错误写法(当前代码)
str1.Replace(",", "").Replace("'", "");  // 无效!

// 正确写法应该是
str1 = str1.Replace(",", "").Replace("'", "");
  1. 字符串拼接 SQL:使用字符串插值 $"{str1}" 直接将用户输入拼接到 SQL 语句中,未使用参数化查询。
  2. 直接执行文本 SQL:通过 ExecuteReader((CommandType) 1, commandText) 执行,CommandType 为 1 即 CommandType.Text,直接执行拼接的 SQL 文本。

truckno参数的值被直接拼接在str2 SQL语句里,导致SQL注入漏洞。

漏洞复现

GET /Areas/Mobile/Views/WMS/ZWCCX.aspx?truckno=1' HTTP/1.1
Host: dongsheng.mrxn.net


手机扫码阅读

金和OA EatHandler.ashx SQL注入漏洞

红海云eHR StWasAssessDept SQL注入漏洞

评 论