前段时间网上爆出ThinkPHP5.1.x的POP链,早就想分析一下,正好最近有空,就记录一下吧环境:MacOS10.13MAMAPProphp7.0.33+xdebugVisualStudioCode前言我所理解的POPChain:利用魔术方法并巧妙构造特殊属性调用一系列函数或类方法以执行某种敏感操作的调用堆栈反序列化常用魔法函数__wakeup,unserialize()执行前调用__destruct,对销毁的时候调用__toString,类被当成字符串时的回应方法__construct(),当对象创建(new)时会自动调用,注意在unserialize()时并不会自动调用__sleep(),serialize()时会先被调用__call(),在对象中调用一个不可访问方法时调用__callStatic(),用静态方式中调用一个不可访问方法时调用__get(),获得一个类的成员变量时调用__set(),设置一个类的成员变量时调用__isset(),当对不可访问属性调用isset()或empty()时调用__unset(),当对不可访问属性调用unset()时被调用。__wakeup(),执行unserialize()时,先会调用这个函数__toString(),类被当成字符串时的回应方法__invoke(),调用函数的方式调用一个对象时的回应方法__set_state(),调用var_export()导出类时,此静态方法会被调用。__clone(),当对象复制完成时调用__autoload(),尝试加载未定义的类__debugInfo(),打印所需调试信息phar文件通过phar://伪协议拓宽攻击面因为phar文件会以序列化的形式存储用户自定义的meta-data,所以在文件系统函数(file_exists()、is_dir()等)参数可控的情况下,配合phar://伪协议,可以不依赖unserialize()直接进行反序列化操作,深入了解请至:
转载请注明:http://www.aierlanlan.com/cyrz/8084.html