近年针对企业级 ERP 与门户系统的攻击呈现出更强烈的自动化与规模化特征。CVE-2025-31324 是一个影响 SAP NetWeaver Visual Composer 的严重文件上传漏洞,攻击者可通过 /developmentserver/metadatauploader 端点在未认证情况下将任意文件写入服务器的 Web 可访问目录,从而实现远程代码执行。该漏洞被广泛滥用,造成包括捷豹路虎(JLR)与高端零售商哈罗德(Harrods)在内的多个高价值目标被植入 JSP webshell,导致信任链与业务系统遭到破坏。本文从技术层面逐步拆解常见利用脚本的结构、漏洞利用流程、常见载荷与隐蔽手段,给出检测线索与响应建议,便于 SOC 与 DFIR 团队快速识别与处置相关入侵事件。利用脚本总体结构通常包含若干功能模块:参数解析与并发控制、针对性探测(安全检测或 OAST 回调)、实际利用的文件上传流程、以及可选的后续交互或持久化步骤。脚本作者为了便于大规模扫描与利用,会设计灵活的命令行参数,支持单主机或批量目标、多线程、HTTP/HTTPS、忽略证书校验以及兼容旧版 TLS 的连接选项。
探测模式通常优先使用无持久化的低噪声方法,比如上传一个能够触发外联的 Java 序列化 gadget,从而通过 OAST(Out-Of-Band Assessment)平台确认目标可被利用而不会在目标上直接留下明显后门痕迹。这类探针有效地通过 DNS 或 HTTP 回调验证漏洞是否存在,便于攻击者筛选优质目标。当脚本进入利用模式时,核心动作是构造一个 multipart/form-data 的 HTTP POST 请求,目标 URL 为 http[s]://<目标>/developmentserver/metadatauploader(有时会拼接类似 ?CONTENTTYPE=MODEL&CLIENT=1 的参数以模拟合法请求)。请求体中包含名为 file 的表单字段,文件名通常设置为 .jsp 扩展并包含一个简易的 JSP webshell,例如以 request 参数 cmd 为入口调用 Runtime.getRuntime().exec() 执行系统命令,逐行读取输出并通过 HTTP 响应回显。部分脚本会内置默认的 helper.jsp,也支持操作人员自定义或指定上传文件。为了规避静态检测,脚本与载荷常以 Base64 或其它编码形式隐藏,运行时再解码发送;同时攻击者可能随机化生成文件名或使用看似无害的名称(例如 cache.jsp、404_error.jsp 或以点开头的隐藏文件名)以降低被发现概率。
实现上传的技术细节通常借助成熟的 HTTP 客户端库,例如 Python 的 requests。典型的伪代码示例如下:使用 files 参数指定文件部分,requests 自动构造 boundary 与必要头部。日志与实战证据显示,多个利用请求使用了默认的 python-requests/* User-Agent,从而成为检测异常访问的一个简单线索。上传成功后,文件一般被写到 Visual Composer 或 SAP Portal 的 Web 应用目录下,常见路径包括 .../irj/servlet_jsp/irj/root/<filename>,在 Windows 或 Linux 环境下路径结构仅根目录不同。上传过程的 HTTP 响应并不总是直接说明成功,脚本可能通过 HTTP 状态码或后续 OAST 回调、或者对上传后文件的请求验证来判断结果。关于载荷与后续利用,JSP webshell 是最常见的持久化方式,因为在 Java Web 容器中访问 JSP 会被动态编译并直接执行。
攻击者常用的 JSP 代码会接收 URL 参数执行系统命令,而更高级的样本可能包含密码验证、加密通信或者内存驻留的模块以避免磁盘证据。替代的有效载荷包括 WAR、JAR、CLASS 或基于序列化漏洞的二进制对象,攻击者可根据目标环境选择不同策略。值得注意的探测手段是利用序列化 gadget 触发远程回调从而验证目标是否会反序列化不受信任的数据,若成功则表明目标存在更广泛的 Java 反序列化攻击面。攻击者在实际行动中还采用了多种混淆与隐蔽手段。脚本与载荷中常见 Base64 编码、字符串拼接、注释变换(例如故意把 ysoserial 拼写变形为 xsyseryal)等,目的是逃避签名检测。上传后的 webshell 使用 Base64 编码命令或通过多层 echo + base64 -d 解码后执行的技巧来躲避简单的进程命令检测。
自动化脚本会支持多主机并发利用与重试逻辑,兼容不受信任的 SSL 证书,以提高在复杂企业环境中的成功率。基于以上攻击特征,可以列出若干高价值的检测与追踪线索。网络层面,任何来自外部的 POST 请求访问 /developmentserver/metadatauploader 均应被认为是高度可疑,尤其当请求缺少 SAP 认证 Cookie 或 SSO 信息时更应触发警报。深度包捕获或 WAF 日志可检索 multipart/form-data 中 filename="*.jsp"的部分内容,这通常直接暴露上传尝试。Web 日志中的 python-requests/ 或其他自动化工具 User-Agent 也可作为低噪声告警触发器。主机层面,应重点检查 Visual Composer 与 Portal 的 irj 目录,搜索近期创建或修改的 .jsp、.war、.jar、.class 文件。
通过静态扫描查找包含 Runtime.getRuntime().exec、ProcessBuilder 或常见 webshell 模式(cmd 参数、exec 调用、输入输出流处理)的文件,是快速识别 webshell 的有效方式。已知的常见恶意文件名包括 helper.jsp、cache.jsp、usage.jsp 以及大量随机短名文件,发现任意不属于 SAP 原生发布的 JSP 文件都应视为可疑样本并保存取证。进一步的检测可依赖于现成的 IoC 与规则集。Splunk、Sigma 与 Nuclei 社区均已发布针对该漏洞的检测模板,规则集中关注点包括对 /developmentserver/metadatauploader 的 POST 请求与对 /irj/ 下 JSP 文件的可疑访问。主机检测应配置进程父子关系告警:当 SAP 的 Java 进程(java 或 jstart/jlaunch 等)衍生出 /bin/sh、cmd.exe、powershell.exe、wget 或 curl 等进程时,表明可能存在 webshell 被用作执行器。网络监控还应识别 SAP 主机向可疑外部资源发起的连接,包括静态下载站点、公共云储存桶或已知 C2 域名。
若可用,启用 DNS 请求审计以捕捉可能由序列化 gadget 触发的外联查询。防护策略上,厂商补丁永远是最根本的修复手段。SAP 在漏洞被广泛利用后发布了补丁与缓解建议,受影响组织应当将相关补丁作为优先变更项部署。若暂时无法打补丁,建议通过网络策略临时隔离或阻断 /developmentserver/ 相关路径的对外访问,将其限制在受信任网络或关闭 Visual Composer 的开发服务。另外,部署 WAF 规则以拦截对可疑文件类型的上传请求、在代理层添加简单的白名单或强制身份验证都能在短期内降低风险。长期来看,应把 SAP 系统置于严格的网络分段与最小化外部可达设计中,限制服务器的出站访问以阻断二次下载与外联。
事件响应方面,发现被利用的证据后应立刻保存相关日志与可疑文件样本以便溯源。文件哈希与时间戳对于后期分析与清理至关重要。对受影响主机执行内存采集与磁盘冻结能够捕获运行时组件与可能的内存马。清理时不仅要删除恶意 JSP,还要检查是否存在已下载的二次工具、计划任务、持久化服务或篡改的配置;恢复前确保补丁已应用或受影响端点已从网络隔离。若确认攻击已导致深度入侵或数据外泄,应按照法律与合规要求通报相关监管机构与客户。关于威胁归属与工具作者痕迹,公开样本与脚本中存在的文本标识与语言风格可以作为情报线索,但不能单凭这些断言责任方。
已公开的利用脚本曾包含自夸或贬低性短语与注释,如某些样本留下的俚语或改写关键词,都可用于在大范围样本中聚类相似工具。然而,可靠的威胁归属应综合多个证据,包括基础设施复用、操作模式、后门技术、C2 解析历史以及反向关联的情报来源。从检测工程与规则研发角度,构建高置信度告警需结合多源信号。网络层的可疑 POST、文件层的未知 JSP、主机层的异常进程树以及出站行为的威胁域名共同形成有力的组合检测。建议 SIEM/EDR 团队将规则权重基于这些信号进行加权整合,并对历史日志执行回溯性搜索以覆盖利用爆发前后的时间窗口。YARA 与 Sigma 可用于静态样本识别,规则中可考虑的特征包括 Base64 长串解码后含有 Runtime.getRuntime.exec、multipart 字段名为 file、路径 /irj/servlet_jsp/irj/root/ 等显著指纹。
总之,CVE-2025-31324 的滥用暴露了企业对互联网可达应用组件防护不足的痛点。防止类似攻击的核心在于对外暴露的最小化、及时修补关键组件、强化上传与认证控制以及部署多层次检测机制。SOC 与 IR 团队应结合网络、日志与主机数据构建跨域检出能力,快速识别上传行为并对可疑 JSP 进行自动化分析与处置。通过提高监测覆盖与响应速度,可以在未来类似零日或漏洞被公开利用时显著降低风险与损失。 。