RCE
RCE(Remote Code Execution,远程代码执行)是网络安全领域中危害极高的漏洞类型,指攻击者通过网络远程向目标设备(如服务器、客户端、IoT 设备等)注入并执行任意代码,从而完全控制目标系统的安全问题
RCE 的本质是目标系统存在 “可被滥用的代码执行入口”:攻击者无需物理接触目标,仅通过网络发送精心构造的恶意数据,即可绕过系统防护,在目标设备上执行自定义代码(如系统命令、脚本代码、二进制程序等)。
这种漏洞的核心风险在于 “远程” 和 “任意代码执行”—— 攻击者可直接接管目标设备的控制权,而非仅获取有限信息或功能。
原理
RCE 的产生通常源于系统设计或实现中的缺陷,核心原因是对用户输入 / 不可信数据的处理不当,具体包括:
- 输入验证缺失
系统未对用户输入(如表单提交、URL 参数、文件内容等)进行严格过滤或校验,导致攻击者可注入恶意代码片段。
例:
Web 应用中,用户输入直接拼接进system()(PHP)、exec()(Python)等系统命令函数,攻击者输入;rm -rf /即可执行删除命令。 - 危险函数 / 接口的滥用
系统使用了本身具有 “执行代码” 能力的危险函数(如动态代码执行函数),且未限制其输入来源。
例:- PHP 的
eval()、assert():直接将字符串作为代码执行,若字符串包含用户输入,攻击者可注入phpinfo();等代码; - Java 的
Class.forName()、Method.invoke():若参数可控,可能被用于加载恶意类; - 命令行工具(如curl、wget):若参数包含用户输入,可能被拼接为恶意命令。
- PHP 的
- 反序列化漏洞
当系统对不可信的序列化数据(如网络传输的对象、文件中的序列化内容)进行反序列化时,若序列化格式可被篡改,攻击者可构造恶意序列化数据,触发代码执行。
例:
Java 的ObjectInputStream.readObject()、Python 的pickle.load()、PHP 的unserialize()等,若输入可控,可能被利用执行代码。 - 文件上传与解析漏洞
系统允许用户上传文件,但未限制文件类型(如允许上传.php、.jsp等可执行脚本),或存在 “文件解析漏洞”(如 Apache 的filename.php;.jpg被解析为 PHP 文件),导致攻击者上传的恶意脚本被执行。 - 第三方组件 / 库的漏洞
统依赖的第三方组件(如框架、库)存在已知 RCE 漏洞,且未及时更新补丁。
例:- Log4j2 的 JNDI 注入漏洞(CVE-2021-44228):通过日志输入触发 JNDI lookup,加载远程恶意类执行代码;
- Struts2 的 OGNL 表达式注入漏洞:用户输入被当作 OGNL 表达式执行,导致代码执行。
攻击流程
- 信息收集:确定目标系统类型(如 Web 服务器、操作系统)、使用的技术栈(如框架、组件版本),寻找潜在漏洞点(如已知组件漏洞、输入接口)。
- 漏洞验证:通过发送测试 payload(如执行
whoami、phpinfo()),确认是否存在 RCE 漏洞。 - 代码执行:构造恶意代码(如反弹 shell、下载恶意程序),通过漏洞点注入并执行。
- 权限提升与横向移动:若初始权限较低,利用系统漏洞提升权限;通过内网扫描,攻击其他设备。
危害
- 完全控制目标系统:执行任意命令(如添加管理员账户、修改系统配置);
- 数据窃取 / 破坏:读取、删除、加密数据库或敏感文件(如勒索软件攻击);
- 横向渗透:以目标为跳板,攻击内网其他设备,扩大影响范围;
- 持久化控制:植入后门(如 webshell、木马),长期控制目标;
- 资源滥用:利用目标设备挖矿、发起 DDoS 攻击等。
防御
防御 RCE 需从 “输入过滤”“代码安全”“环境加固” 等多维度入手:
- 严格过滤用户输入
- 对所有用户输入(包括 URL、表单、文件内容)进行 “白名单校验”(仅允许指定字符 / 格式),拒绝 “黑名单” 外的内容;
- 避免直接将用户输入拼接进命令 / 代码执行函数(如用参数化查询替代字符串拼接)。
- 禁用 / 限制危险函数
- 禁止在生产环境中使用
eval()、system()等危险函数,或通过配置(如 PHP 的disable_functions)限制其调用; - 若必须使用动态代码执行,确保输入来源绝对可信(如仅允许内部固定值)。
- 禁止在生产环境中使用
- 安全处理序列化 / 反序列化
- 避免对不可信数据进行反序列化;
- 若必须反序列化,使用 “白名单机制” 限制可反序列化的类(如 Java 的
ObjectInputFilter); - 采用更安全的序列化格式(如 JSON,而非原生对象序列化)。
- 规范文件上传
- 严格校验文件类型(通过文件头、后缀白名单双重验证),禁止上传可执行脚本;
- 将上传文件存储在非 Web 访问目录,或通过中间层转发(如 Nginx 代理静态文件,不直接解析脚本)。
- 及时更新与补丁
- 定期更新系统、框架、组件至最新版本,修复已知 RCE 漏洞(如 Log4j、Struts2 补丁);
- 关注 CVE 漏洞库、厂商公告,对高危漏洞优先修复。
- 最小权限原则
- 运行服务的账户仅授予必要权限(如 Web 服务器用非 root 用户,禁止访问
/etc/passwd等敏感文件); - 限制网络访问(如通过防火墙禁止服务对外发起出站连接,减少 JNDI 注入等风险)。
- 运行服务的账户仅授予必要权限(如 Web 服务器用非 root 用户,禁止访问
- 安全监控与审计
- 部署 WAF(Web 应用防火墙),拦截常见恶意 payload(如
eval(、;rm); - 监控异常命令执行(如
nc、bash -i反弹 shell 命令)、文件修改(如/etc/sudoers); - 定期进行代码审计、渗透测试,提前发现潜在 RCE 风险。
- 部署 WAF(Web 应用防火墙),拦截常见恶意 payload(如
实战
靶机pikachu之RCE
操作
| Windows管道符 | ||
|---|---|---|
| 管道符 | 作用 | 举例 |
| | 直接执行后面的语句 | ping 127.0.0.1|whoami |
|| | 前面的语句执行出错则执行后面的语句 | ping 127.0.0.1||whoami |
& | 前面的语句为假则执行后面的语句 | ping 127.0.0.1&whoami |
&& | 前面的语句为假,直接出错,前面的语句为真,执行后面的语句 | ping 127.0.0.1&&whoami |
www.baidu.com|dir
尝试ping百度,并用管道符连接dir命令

echo phpinfo();
并用管道符连接dir命令

参考文章
网络安全-RCE(远程命令执行)漏洞原理、攻击与防御
作者:lady_killer9
&spm=1001.2101.3001.5002&articleId=150531179&d=1&t=3&u=8b3ae50f3da04df5b7ae492f1247c03b)
3770

被折叠的 条评论
为什么被折叠?



