U8cloud 所有版本 NCCloudGatewayServlet 远程命令执行和任意文件上传(基于该漏洞的变种)
字数 2648 2025-10-01 14:05:44

U8cloud NCCloudGatewayServlet 漏洞分析与利用教学

一、 漏洞概述

  • 漏洞组件: NCCloudGatewayServlet
  • 影响产品: 用友 U8cloud 所有版本
  • 漏洞类型:
    1. 远程命令执行 (RCE)
    2. 任意文件上传
  • 危险等级: 严重 (Critical)
  • 漏洞本质: 该Servlet作为U8cloud对外的统一网关服务,未能对接收的请求进行有效的身份认证、权限校验和参数过滤,导致攻击者可以构造恶意请求绕过所有安全机制,直接调用后端高风险内部方法。

二、 漏洞背景与定位

  1. U8cloud 架构理解:
    U8cloud采用典型的多层B/S架构。NCCloudGatewayServlet 通常位于网关层/接入层,作为许多前端请求(如移动端API)的统一入口。其设计初衷是接收请求、进行简单路由和协议转换,然后将请求转发给内部真正的业务服务(Service层)进行处理。
  2. Servlet 路径:
    该Servlet的标准URL路径通常为:
    http(s)://[target]:[port]/U8Cloud/NCCloudGatewayServlet
    
    这是漏洞利用的起点。

三、 漏洞核心成因分析

漏洞根源于 NCCloudGatewayServletdoAction 方法。该方法处理POST请求,并从请求中获取关键参数(如 serviceactionparams 等),然后通过反射机制动态调用指定的后端Java类和方法。

关键缺陷:

  1. 缺失身份认证: 该Servlet自身不校验调用者身份(如Session、Token),允许未授权访问。
  2. 缺失权限控制: 调用内部服务(service)和方法(action)前,未校验当前用户是否有权执行此操作。
  3. 危险的反序列化/参数传递: 请求中的参数(params)被直接反序列化或传递给目标方法,没有进行安全过滤或白名单校验,导致攻击者可以控制方法调用的全部参数。

四、 漏洞利用链详解

利用过程的核心是构造一个特殊的POST请求,通过serviceaction参数指定一个高风险的内部服务和方法,并通过params参数传递恶意数据。

利用链一:任意文件上传 (IPFxxFileService)

这是获取Webshell最直接的途径。

  1. 目标服务: 通常为文件操作相关的Service,例如 IPFxxFileServicexx可能为具体模块名,如IPFDocumentFileService)。

  2. 目标方法: uploadFile 或类似方法。

  3. 恶意请求构造:

    POST /U8Cloud/NCCloudGatewayServlet HTTP/1.1
    Host: target.com:port
    Content-Type: application/x-www-form-urlencoded
    
    service=ipfxxfile&action=uploadFile&params={"参数名":"参数值"}
    
    • params 是一个JSON字符串,其具体结构需要分析后端代码,但通常包含:
      • filePath: 指定文件上传的服务器路径(如 ../webapps/ROOT/shell.jsp)。
      • fileData: 文件内容的Base64编码。
      • 或其他类似字段(如fileID, fileContent等)。
  4. 利用过程:
    a. 将恶意JSP Webshell代码进行Base64编码。
    b. 构造paramsJSON对象,指定路径和内容。
    c. 发送请求。若上传成功,响应中可能会包含文件路径或成功状态。
    d. 直接访问上传的Webshell路径(如 http://target.com:port/shell.jsp),完成利用。

利用链二:远程命令执行 (ActionInvoke)

这是更通用的命令执行方式,通过调用能够执行命令或代码的底层方法。

  1. 目标服务/方法: 可能存在多种,一个常见的入口是调用 ActionInvoke 相关服务,或者直接调用包含runExecinvoke等方法的后台服务。

  2. 利用原理: 通过反射机制,最终调用到 java.lang.Runtime.getRuntime().exec()ProcessBuilder().start()

  3. 恶意请求构造:

    POST /U8Cloud/NCCloudGatewayServlet HTTP/1.1
    Host: target.com:port
    Content-Type: application/x-www-form-urlencoded
    
    service=某个底层服务&action=某个执行方法&params={"command":"whoami"}
    
    • params 中的参数名可能是 command, cmd, expr, code 等,取决于目标方法的具体定义。
  4. 利用过程:
    a. 探测可用的Service和Action。这通常通过代码审计、fuzz测试或分析补丁比对来确定。
    b. 构造请求,执行系统命令(如 whoami, ifconfig, 或者写入Webshell的命令)。
    c. 从HTTP响应中读取命令执行的结果(标准输出或错误输出)。

五、 漏洞检测与验证

  1. 指纹识别:
    • 访问 /U8Cloud/ 目录,看是否有U8cloud的登录页面或特征。
    • 检查HTTP响应头中的ServerX-Powered-By等字段是否包含U8Cloud关键字。
  2. 漏洞探测:
    • 文件上传探测: 使用一个无害的文件(如一个只包含 `` 的txt文件)尝试上传,观察是否返回成功路径。
    • 命令执行探测: 尝试执行 echo test123ping -n 1 your-dnslog-domain(DNSLog探测),观察响应或是否有DNS查询记录。

六、 修复建议

  1. 官方补丁: 立即联系用友官方获取最新补丁并升级。修复方案通常包括:
    • NCCloudGatewayServlet 入口添加严格的权限校验。
    • 对可调用的 serviceaction 建立严格的白名单机制。
    • 对输入参数进行严格的过滤和校验。
  2. 临时缓解措施:
    • 在WAF或网关设备上设置规则,拦截对 /NCCloudGatewayServlet 路径的恶意请求,特别是包含 uploadFile, ActionInvoke 等关键字的请求体。
    • 如果业务不需要此接口,可在反向代理(如Nginx)或应用服务器(如Tomcat)中配置规则,直接禁用或拦截对该Servlet的访问。

七、 总结

该漏洞是一个典型的 “网关型”未授权漏洞,由于架构设计上信任了所有传入请求,导致攻击者可以“为所欲为”。其危害极大,利用方式直接。在审计此类系统时,应重点关注:

  • 所有无需认证即可访问的API接口和Servlet。
  • 任何使用反射机制来动态调用类和方法的代码段。
  • 接收JSON/XML等参数并直接进行反序列化操作的端点。

免责声明: 本文档仅用于安全研究与教学目的,请勿用于任何非法活动。在测试任何系统之前,请确保已获得明确的书面授权。

U8cloud NCCloudGatewayServlet 漏洞分析与利用教学 一、 漏洞概述 漏洞组件 : NCCloudGatewayServlet 影响产品 : 用友 U8cloud 所有版本 漏洞类型 : 远程命令执行 (RCE) 任意文件上传 危险等级 : 严重 (Critical) 漏洞本质 : 该Servlet作为U8cloud对外的统一网关服务,未能对接收的请求进行有效的身份认证、权限校验和参数过滤,导致攻击者可以构造恶意请求绕过所有安全机制,直接调用后端高风险内部方法。 二、 漏洞背景与定位 U8cloud 架构理解 : U8cloud采用典型的多层B/S架构。 NCCloudGatewayServlet 通常位于 网关层/接入层 ,作为许多前端请求(如移动端API)的统一入口。其设计初衷是接收请求、进行简单路由和协议转换,然后将请求转发给内部真正的业务服务(Service层)进行处理。 Servlet 路径 : 该Servlet的标准URL路径通常为: 这是漏洞利用的起点。 三、 漏洞核心成因分析 漏洞根源于 NCCloudGatewayServlet 的 doAction 方法。该方法处理POST请求,并从请求中获取关键参数(如 service 、 action 、 params 等),然后通过反射机制动态调用指定的后端Java类和方法。 关键缺陷 : 缺失身份认证 : 该Servlet自身不校验调用者身份(如Session、Token),允许未授权访问。 缺失权限控制 : 调用内部服务( service )和方法( action )前,未校验当前用户是否有权执行此操作。 危险的反序列化/参数传递 : 请求中的参数( params )被直接反序列化或传递给目标方法,没有进行安全过滤或白名单校验,导致攻击者可以控制方法调用的全部参数。 四、 漏洞利用链详解 利用过程的核心是构造一个特殊的POST请求,通过 service 和 action 参数指定一个高风险的内部服务和方法,并通过 params 参数传递恶意数据。 利用链一:任意文件上传 (IPFxxFileService) 这是获取Webshell最直接的途径。 目标服务 : 通常为文件操作相关的Service,例如 IPFxxFileService ( xx 可能为具体模块名,如 IPFDocumentFileService )。 目标方法 : uploadFile 或类似方法。 恶意请求构造 : params 是一个JSON字符串,其具体结构需要分析后端代码,但通常包含: filePath : 指定文件上传的服务器路径(如 ../webapps/ROOT/shell.jsp )。 fileData : 文件内容的Base64编码。 或其他类似字段(如 fileID , fileContent 等)。 利用过程 : a. 将恶意JSP Webshell代码进行Base64编码。 b. 构造 params JSON对象,指定路径和内容。 c. 发送请求。若上传成功,响应中可能会包含文件路径或成功状态。 d. 直接访问上传的Webshell路径(如 http://target.com:port/shell.jsp ),完成利用。 利用链二:远程命令执行 (ActionInvoke) 这是更通用的命令执行方式,通过调用能够执行命令或代码的底层方法。 目标服务/方法 : 可能存在多种,一个常见的入口是调用 ActionInvoke 相关服务,或者直接调用包含 runExec 、 invoke 等方法的后台服务。 利用原理 : 通过反射机制,最终调用到 java.lang.Runtime.getRuntime().exec() 或 ProcessBuilder().start() 。 恶意请求构造 : params 中的参数名可能是 command , cmd , expr , code 等,取决于目标方法的具体定义。 利用过程 : a. 探测可用的Service和Action。这通常通过代码审计、fuzz测试或分析补丁比对来确定。 b. 构造请求,执行系统命令(如 whoami , ifconfig , 或者写入Webshell的命令)。 c. 从HTTP响应中读取命令执行的结果(标准输出或错误输出)。 五、 漏洞检测与验证 指纹识别 : 访问 /U8Cloud/ 目录,看是否有U8cloud的登录页面或特征。 检查HTTP响应头中的 Server 、 X-Powered-By 等字段是否包含 U8Cloud 关键字。 漏洞探测 : 文件上传探测 : 使用一个无害的文件(如一个只包含 `` 的txt文件)尝试上传,观察是否返回成功路径。 命令执行探测 : 尝试执行 echo test123 或 ping -n 1 your-dnslog-domain (DNSLog探测),观察响应或是否有DNS查询记录。 六、 修复建议 官方补丁 : 立即联系用友官方获取最新补丁并升级。修复方案通常包括: 在 NCCloudGatewayServlet 入口添加严格的权限校验。 对可调用的 service 和 action 建立严格的白名单机制。 对输入参数进行严格的过滤和校验。 临时缓解措施 : 在WAF或网关设备上设置规则,拦截对 /NCCloudGatewayServlet 路径的恶意请求,特别是包含 uploadFile , ActionInvoke 等关键字的请求体。 如果业务不需要此接口,可在反向代理(如Nginx)或应用服务器(如Tomcat)中配置规则,直接禁用或拦截对该Servlet的访问。 七、 总结 该漏洞是一个典型的 “网关型”未授权漏洞 ,由于架构设计上信任了所有传入请求,导致攻击者可以“为所欲为”。其危害极大,利用方式直接。在审计此类系统时,应重点关注: 所有无需认证即可访问的API接口和Servlet。 任何使用反射机制来动态调用类和方法的代码段。 接收JSON/XML等参数并直接进行反序列化操作的端点。 免责声明 : 本文档仅用于安全研究与教学目的,请勿用于任何非法活动。在测试任何系统之前,请确保已获得明确的书面授权。