孚盟云CRM GetDropDownListContent.ashx SQL注入漏洞


漏洞简介

上海孚盟软件有限公司是一家专业的外贸SaaS服务和行业解决方案提供商。其旗下产品孚盟云GetDropDownListContent.ashx接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

影响版本

fofa语法

app="孚盟软件-孚盟云"

漏洞分析

直接看 GetDropDownListContent.ashx 对应的dll文件 FumaCRM_BS.NewWeb.dll 里有关 GetDropDownListContent 方法的实现如下

根据参数action的值进入不同的处理逻辑,可以看到众多的处理分支,其中当 action=getType 时,处理逻辑如下

public void getType(HttpContext context)
{
  int num1 = 0;
  int num2 = 0;
  StringBuilder stringBuilder = new StringBuilder();
  DataTable dataSource = this.createPageManager.GetDataSource("select * from syProdPlusProp  sy inner join syProdPlusPropSort sp on sy.FUID=sp.PlusPropFUID WHERE SortFID=" + (context.Request["Typeid"] == null ? "" : context.Request["Typeid"].ToString()));

未经过滤或参数化绑定的参数 Typeid 被直接拼接进SQL语句中进行执行,造成SQL注入漏洞。

当 action=personalSetting时

private void SavePseronalSettingContent(HttpContext context)
{
  string empId = context.Request["UserID"];
  string[] strArray1 = context.Request["SettingID"].Split(new char[1]
  {
    ','
  });
  string[] strArray2 = context.Request["SettingName"].Split(new char[1]
  {
    ','
  });
  string[] strArray3 = context.Request["SettingValue"].Split(new char[1]
  {
    ','
  });
  if (string.IsNullOrEmpty(empId) || strArray1.Length < 0 || strArray2.Length < 0)
    context.Response.Write("0");
  PersonalSettingManager personalSettingManager = new PersonalSettingManager();
  int num = 0;
  for (int index = 0; index < strArray1.Length; ++index)
  {
    personalSettingManager.SaveEmpPersonalSettingValue(empId, Convert.ToInt32(strArray1[index]), strArray2[index], strArray3[index]);
    ++num;
  }

跟进SaveEmpPersonalSettingValue方法

public void SaveEmpPersonalSettingValue(
  string empId,
  int settingId,
  string settingName,
  string settingValue)
{
  this.sqlStr = $"insert into PersonalSettingsValue (EmpID,SettingID,SettingName,SettingValue) values ('{empId}','{(object) settingId}','{settingName}','{settingValue}')";
  this.dbHelper.ExecuteSql(this.sqlStr);
}

empId 即参数 UserID 也是被直接拼接在SQL语句中执行,同样造成SQL注入漏洞。

以及 action=getUnit

参数uid也是同样被直接拼接进SQL语句执行,也存在SQL注入漏洞

当action=lookUp 时

漏洞复现

POST /Ajax/GetDropDownListContent.ashx HTTP/1.1
Host: fumacrm.mrxn.net
Content-Type: application/x-www-form-urlencoded

action=getType&Typeid='SQLI_POC--

成功通过报错注入在响应爆出数据库版本信息


手机扫码阅读

孚盟云CRM LicManage.ashx SQL注入漏洞

金和OA MenuSort.aspx SQL注入漏洞

评 论