远程代码执行(RCE)

RCE

RCE(Remote Code Execution,远程代码执行)是网络安全领域中危害极高的漏洞类型,指攻击者通过网络远程向目标设备(如服务器、客户端、IoT 设备等)注入并执行任意代码,从而完全控制目标系统的安全问题

RCE 的本质是目标系统存在 “可被滥用的代码执行入口”:攻击者无需物理接触目标,仅通过网络发送精心构造的恶意数据,即可绕过系统防护,在目标设备上执行自定义代码(如系统命令、脚本代码、二进制程序等)。

这种漏洞的核心风险在于 “远程” 和 “任意代码执行”—— 攻击者可直接接管目标设备的控制权,而非仅获取有限信息或功能。

原理

RCE 的产生通常源于系统设计或实现中的缺陷,核心原因是对用户输入 / 不可信数据的处理不当,具体包括:

  1. 输入验证缺失
    系统未对用户输入(如表单提交、URL 参数、文件内容等)进行严格过滤或校验,导致攻击者可注入恶意代码片段。
    例:
    Web 应用中,用户输入直接拼接进system()(PHP)、exec()(Python)等系统命令函数,攻击者输入; rm -rf /即可执行删除命令。
  2. 危险函数 / 接口的滥用
    系统使用了本身具有 “执行代码” 能力的危险函数(如动态代码执行函数),且未限制其输入来源。
    例:
    • PHP 的eval()assert():直接将字符串作为代码执行,若字符串包含用户输入,攻击者可注入phpinfo();等代码;
    • Java 的Class.forName()Method.invoke():若参数可控,可能被用于加载恶意类;
    • 命令行工具(如curl、wget):若参数包含用户输入,可能被拼接为恶意命令。
  3. 反序列化漏洞
    当系统对不可信的序列化数据(如网络传输的对象、文件中的序列化内容)进行反序列化时,若序列化格式可被篡改,攻击者可构造恶意序列化数据,触发代码执行。
    例:
    Java 的ObjectInputStream.readObject()、Python 的pickle.load()、PHP 的unserialize()等,若输入可控,可能被利用执行代码。
  4. 文件上传与解析漏洞
    系统允许用户上传文件,但未限制文件类型(如允许上传.php.jsp等可执行脚本),或存在 “文件解析漏洞”(如 Apache 的filename.php;.jpg被解析为 PHP 文件),导致攻击者上传的恶意脚本被执行。
  5. 第三方组件 / 库的漏洞
    统依赖的第三方组件(如框架、库)存在已知 RCE 漏洞,且未及时更新补丁。
    例:
    • Log4j2 的 JNDI 注入漏洞(CVE-2021-44228):通过日志输入触发 JNDI lookup,加载远程恶意类执行代码;
    • Struts2 的 OGNL 表达式注入漏洞:用户输入被当作 OGNL 表达式执行,导致代码执行。

攻击流程

  • 信息收集:确定目标系统类型(如 Web 服务器、操作系统)、使用的技术栈(如框架、组件版本),寻找潜在漏洞点(如已知组件漏洞、输入接口)。
  • 漏洞验证:通过发送测试 payload(如执行whoamiphpinfo()),确认是否存在 RCE 漏洞。
  • 代码执行:构造恶意代码(如反弹 shell、下载恶意程序),通过漏洞点注入并执行。
  • 权限提升与横向移动:若初始权限较低,利用系统漏洞提升权限;通过内网扫描,攻击其他设备。

危害

  • 完全控制目标系统:执行任意命令(如添加管理员账户、修改系统配置);
  • 数据窃取 / 破坏:读取、删除、加密数据库或敏感文件(如勒索软件攻击);
  • 横向渗透:以目标为跳板,攻击内网其他设备,扩大影响范围;
  • 持久化控制:植入后门(如 webshell、木马),长期控制目标;
  • 资源滥用:利用目标设备挖矿、发起 DDoS 攻击等。

防御

防御 RCE 需从 “输入过滤”“代码安全”“环境加固” 等多维度入手:

  1. 严格过滤用户输入
    • 对所有用户输入(包括 URL、表单、文件内容)进行 “白名单校验”(仅允许指定字符 / 格式),拒绝 “黑名单” 外的内容;
    • 避免直接将用户输入拼接进命令 / 代码执行函数(如用参数化查询替代字符串拼接)。
  2. 禁用 / 限制危险函数
    • 禁止在生产环境中使用eval()system()等危险函数,或通过配置(如 PHP 的disable_functions)限制其调用;
    • 若必须使用动态代码执行,确保输入来源绝对可信(如仅允许内部固定值)。
  3. 安全处理序列化 / 反序列化
    • 避免对不可信数据进行反序列化;
    • 若必须反序列化,使用 “白名单机制” 限制可反序列化的类(如 Java 的ObjectInputFilter);
    • 采用更安全的序列化格式(如 JSON,而非原生对象序列化)。
  4. 规范文件上传
    • 严格校验文件类型(通过文件头、后缀白名单双重验证),禁止上传可执行脚本;
    • 将上传文件存储在非 Web 访问目录,或通过中间层转发(如 Nginx 代理静态文件,不直接解析脚本)。
  5. 及时更新与补丁
    • 定期更新系统、框架、组件至最新版本,修复已知 RCE 漏洞(如 Log4j、Struts2 补丁);
    • 关注 CVE 漏洞库、厂商公告,对高危漏洞优先修复。
  6. 最小权限原则
    • 运行服务的账户仅授予必要权限(如 Web 服务器用非 root 用户,禁止访问/etc/passwd等敏感文件);
    • 限制网络访问(如通过防火墙禁止服务对外发起出站连接,减少 JNDI 注入等风险)。
  7. 安全监控与审计
    • 部署 WAF(Web 应用防火墙),拦截常见恶意 payload(如eval(;rm);
    • 监控异常命令执行(如ncbash -i反弹 shell 命令)、文件修改(如/etc/sudoers);
    • 定期进行代码审计、渗透测试,提前发现潜在 RCE 风险。

实战

靶机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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值