漏洞简介
上海孚盟软件有限公司是一家专业的外贸SaaS服务和行业解决方案提供商。其旗下产品孚盟云AjaxContractList.ashx接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。
影响版本
fofa语法
app="孚盟软件-孚盟云"
漏洞分析
直接看 AjaxContractList.ashx 对应的dll文件 FumaCRM_BS.NewWeb.dll 里有关 AjaxContractList 方法的实现如下
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string str = context.Request["method"].ToString();
if (!string.op_Equality(str, "moreLoad"))
{
if (!string.op_Equality(str, "getTitle"))
return;
this.getTitle(context);
}
else
this.moreLoad(context);
}
当 method=getTitle 时,进入getTitle方法
private void getTitle(HttpContext context)
{
string ScNo = context.Request["ScNo"];
string str1 = context.Request["type"];
string FID = context.Request["FID"];
string str2 = string.Empty;
string str3 = str1;
if (!string.op_Equality(str3, "C"))
{
if (!string.op_Equality(str3, "L"))
{
if (string.op_Equality(str3, "F"))
str2 = this.GetFieldAttach(this.mouldId, FID);
}
else
str2 = this.GetProductList(ScNo);
}
context.Response.Write(str2);
}
当 type=F 时进入 GetFieldAttach
public string GetFieldAttach(string mouldId, string FID)
{
DataTable attachList = new CreatePageManager().GetAttachList(mouldId, FID);
DataTable dataTable = new DataTable();
继续跟进 GetAttachList
public DataTable GetAttachList(string MouldID, string FID)
{
return this.GetDataSource($" SELECT A.*,B.DocExtDescrip AS FileTypeName,C.CNEmpName AS OwnerName,\r\n \tD.CNEmpName AS KeyInName,E.CNEmpName AS NearEditEmpName \r\n \tFROM dcFileMouldRelation F \r\n \tJOIN dcFile A(nolock) ON F.FileFUID = A.FUID \r\n\t \tLEFT JOIN dcDocType B(nolock) ON upper(A.FileType)=upper(B.DocExtSign) \r\n \tLEFT JOIN bfEMP C(nolock) ON A.OwnerID=C.EmpID \r\n \tLEFT JOIN bfEMP D(nolock) ON A.KeyInID=D.EmpID \r\n \tLEFT JOIN bfEMP E(nolock) ON A.NearEditEmpID=E.EmpID \r\n \tWHERE F.MouldID = '{MouldID}'\r\n AND F.PKFieldValue = '{FID}'\r\n \tAND ISNULL(A.IsDeleted,0) = 0 \r\n \tORDER BY A.KeyInDate");
}
最终可以看到,未经过滤或参数化绑定的参数 MouldID 被直接拼接进SQL语句中进行执行,造成SQL注入漏洞。
漏洞复现
GET /m/Dingding/Ajax/AjaxContractList.ashx?method=getTitle&type=F&FID=SQLI_POC HTTP/1.1
Host: fumacrm.mrxn.net

通过报错注入 成功在响应回显数据版本信息
以及当 type=L 时,进入GetProductList方法的ScNo参数的SQL注入漏洞






