代码执行漏洞
代码执行漏洞原理
用户输入的数据会被当做后端代码执行
**RCE:**远程命令或代码执行。
造成代码执行函数解析
eval
可以执行多行代码。assert
可以执行单行代码。preg_replace
存在代码执行
<?php echo preg_replace('//e',$_GET[8],'') ?>
<?php echo preg_replace('//e',"$_GET[8]",'') ?>
当如果匹配成功的话可以触发
create_function
创建匿名函数
$a = create_function('$id','echo $id');
$a(8);
array_map
回调函数,调用某个函数
array_map("assert",array($_POST['c']));
"${phpinfo()}"
双引号命令执行
<?php echo "{${phpinfo()}}"; ?>
-
call_user_func_array
-
class_user_func
-
动态函数
$_GET['id']($_GET['data'])
这一类的
echo $_GET['func']($_GET['args']);
注意点
写入文件被"
包含的变量才会被执行,$_POST['']
一类的变量不会被执行。
# 以下代码会被执行
$a = "{${phpinfo()}}";
# 但是如果被作为传参,就不会执行,如下所示 5.4.45
$a = "$_GET[8]";