漏洞简介
上海孚盟软件有限公司是一家专业的外贸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--

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

