RCE漏洞原理及危害、相关危险函数
字数 1251 2025-08-10 17:51:46
RCE漏洞原理、危害及防御措施
一、RCE漏洞概述
RCE(Remote Code/Command Execute)漏洞是指由于程序中预留了执行代码或者命令的接口,并且提供了给用户使用的界面,导致被黑客利用控制服务器的安全漏洞。
RCE漏洞分为两种主要类型:
- 代码执行漏洞
- 命令执行漏洞
二、代码执行漏洞
原理
传入PHP代码到执行函数的变量,客户端可控,并且没有做严格的过滤,攻击者可以随意输入他想执行的代码,这些代码会在服务端执行。
危害
- 攻击者可以通过RCE继承web用户的权限执行PHP代码
- 如果web权限较高,可以读写目标服务器任意文件内容
- 可能控制整个网站
相关危险函数
| 函数 | 描述 |
|---|---|
eval() |
将字符串当作PHP代码执行 |
assert() |
将字符串当作PHP代码执行 |
preg_replace() |
将字符串正则匹配后替换(特别是使用/e修饰符时) |
call_user_func() |
回调函数 |
array_map() |
回调函数 |
三、命令执行漏洞
原理
应用在调用系统命令函数时,将用户输入作为系统命令的参数拼接到命令行中,如果没有对用户输入进行过滤,就会造成命令执行漏洞。
危害
- 继承web服务器程序权限执行系统命令
- 继承web服务器权限读写文件
- 反弹shell
- 控制整个网站或服务器
相关危险函数
| 函数 | 描述 |
|---|---|
system() |
将字符串当作OS命令执行 |
exec() |
将字符串当作OS命令执行(只输出最后一行) |
shell_exec() |
将字符串当作OS命令执行 |
passthru() |
将字符串当作OS命令执行 |
popen() |
执行OS命令并将结果输出到文件 |
`(反引号) |
执行OS命令 |
四、DVWA命令注入实例分析
测试过程
在DVWA的命令注入模块中,输入IP地址后提交,程序会执行ping命令:
127.0.0.1 & whoami
127.0.0.1 && whoami
127.0.0.1 | whoami
127.0.0.1 || whoami
127.0.0.1; whoami
这些命令尝试执行多条指令,测试命令注入可能性。
源代码分析
<?php
if(isset($_POST['Submit'])) {
$target = $_REQUEST['ip'];
if(stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec('ping '.$target);
} else {
$cmd = shell_exec('ping -c 4 '.$target);
}
echo "<pre>{$cmd}</pre>";
}
?>
代码执行流程:
- 检查是否点击了提交按钮
- 通过GPC方式获取IP地址赋值给$target变量
- 拼接命令"ping $target"并由shell_exec()执行
- 当用户提交时,服务器执行拼接后的命令
五、防御措施
-
避免使用危险函数:
- 尽量避免使用eval等危险函数
- 如果必须使用,要进行严格的过滤
-
函数使用规范:
- 放弃使用preg_replace()函数的/e修饰符
- 在php.ini中禁用危险函数:
disable_functions=system,assert
-
输入处理:
- 参数值尽量用引号包裹
- 在拼接前调用addslashes()进行转义
-
其他措施:
- 实施最小权限原则
- 使用白名单验证用户输入
- 对命令参数进行严格过滤和转义
- 使用安全的替代函数
通过以上措施,可以有效降低RCE漏洞的风险,保护服务器安全。