PHP代码审计 10 动态函数与匿名函数执行

本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 PHP 代码审计课程

PHP 代码审计博客目录

1. 环境准备

  1. 动态函数执行

    函数与函数之间的调用,可能会造成的漏洞

  2. 匿名函数执行

    匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。

    create_function 创建匿名函数

2. 测试

  1. 动态函数执行:

    1. 代码 test.php

      <?php
      function a(){
          echo "a";
      }
      
      function b(){
          echo "b";
      }
      
      function c($arg){
          echo"x";
          $arg();
      }
      
      $action=$_GET['c'];
      c($action);
      //浏览器获取到的值 b ,现在作为 c() 函数的参数插入到了函数中,并且在函数中作为函数名调用了另外一个函数
      ?>
      
    2. 结果

      浏览器执行 http://127.0.0.1/test.php?c=b

      浏览器执行 http://127.0.0.1/test.php?c=phpinfo

  2. 匿名函数执行

    1. 代码

      <?php
      $a=$_GET['c'];
      $lamda=creat_function('$a,$b','return (strlen($a)-strlen($b)+'."strlen($c));");
      //var_dump($lamda);
      $array=array('reall long string here, boy','this','midding lenth','larget');
      usort($array,$lamda);
      print_r($array);
      ?>
      
    2. 结果

      浏览器执行 http://127.0.0.1/test.php?c=1));)phpinfo();//

      原理是使用 URL 后面的闭合括号使代码中断

      结果显示 phpinfo() 页面

猜你喜欢

转载自blog.csdn.net/kevinhanser/article/details/81146083