我正在寻找使用以下正则表达式行从我的网站中删除恶意代码;
find -type f -name \*.php -exec sed -i 's/.*eval(base64_decode(\"CmVycm.*/<?php/g' {} \;
这将保留<?php
我想要的,但我注意到许多注入都在多行的整个 php 文件中,这意味着不仅仅是第一个<?php
所以是否可以执行 if do else 语句,如果它在 php 文件的第 1 行保留php 标记,如果它在其他任何地方,否则删除整行?
我正在寻找使用以下正则表达式行从我的网站中删除恶意代码;
find -type f -name \*.php -exec sed -i 's/.*eval(base64_decode(\"CmVycm.*/<?php/g' {} \;
这将保留<?php
我想要的,但我注意到许多注入都在多行的整个 php 文件中,这意味着不仅仅是第一个<?php
所以是否可以执行 if do else 语句,如果它在 php 文件的第 1 行保留php 标记,如果它在其他任何地方,否则删除整行?
不接受来自 devnull 的响应,所以这是我的
如果恶意代码占用一行,您可以轻松执行以下操作:
sed -i "/eval(base64_decode(/d" filename
这将删除所有行。
如果你担心第一个<?php
sed -i -e "/<?php/! {1 s/^/<?php /}" filename
<?php
如果第一行不存在,它将添加一个标签。它是如何工作的 ?
/<?php/!
将匹配没有<?php
它的行。
{1 s/^/<?php /}
在第一行,<?php
在开头添加
更多的 ?
如果代码需要 2 行:
<?php
exec(base64_decode() ... ?>
sed -i '/<?php/{N;/exec(base64_decode/d;}' filename
如果一行匹配<?php
并且下一行匹配exec(base64_decode
,则删除这两行。
N;
用于加载当前缓冲区中的下一行。d;
删除当前缓冲区(= 两行)
如果代码需要 3 行:
<?php
exec(base64_decode() ...
?>
sed -i '/<?php/{N;/exec(base64_decode/{N;d;};}' filename
N;d;
同上,但在删除 ( )之前加载第三行
不够?
粘贴注入字符串的完整示例。
希望有帮助,加油