替换多个文件中的复杂字符串

替换多个文件中的复杂字符串

黑客进入 Web 服务器并添加了此字符串(出于安全目的删除了一些字符,添加换行符为了可读性)在所有index.php文件中:

<?php 
eval(gzuncompress(base64_decode('eF5Tcffxd3L0CY5WjzcyNDGGMV4+1dSwqSqzU0LQGAJCPCMM='))); 
eval(gzuncompress(base64_decode('eF5LK81LLsnMzKx+JjNW0rgUAqDUUxQ==')));  
eval(gzuncompress(base64_decode('eF6VlMmy/3sMxOez/iJOojHFT0Ig/8jlTymmN/I='))); 
?>

我尝试使用sed命令删除它(用任何东西替换它),但几乎不可能用这么大的字符串定义一个有效的正则表达式。

还有另一种方法,也许是从 .txt 文件读取字符串?

答案1

假设您不在任何地方使用这些技巧,为什么不这样做(正确执行,使用sed -i和 Maybe find -exec ...,这不是您问题的一部分,不是吗?)

$ sed 's/eval(gzuncompress(base64_decode(.*)));//' << EOF                     
> <?php eval(gzuncompress(base64_decode('eF5Tcffxd3L0CY5WjzcyNDGGMV4+1dSwqSqzU0LQGAJCPCMM=')));eval(gzuncompress(base64_decode('eF5LK81LLsnMzKx+JjNW0rgUAqDUUxQ=='))); eval(gzuncompress(base64_decode('eF6VlMmy/3sMxOez/iJOojHFT0Ig/8jlTymmN/I=')));?>
> EOF
<?php  ?>

...之后您可以处理空的<?php ?>s (这不会造成太大伤害,不是吗?)。

编辑删除换行符以确保它适合所描述的情况。

编辑2你最好将所有内容替换为 (已知良好)备份,如果有的话。

编辑3我刚刚抓住了“所有index.php 文件”位。因此你可以尝试类似的事情

find /path/to/wwwroot -name "index.php" -exec sed -i regex {} \;

相关内容