私のサイトの1つは、いくつかの悪質なコードに感染しています。コードは、唯一のすべてのPHPファイルの最初の行に追加され、以下のようになっている。sedで長い文字列を削除する
<?php $ulhmjwklj = '#-#O#-#N# .......xqxe-1; ?> /*BEGIN LEGIT CODE HERE*/ <?php....
悪意のあるコードが長い特殊文字とスペースのたくさんの文字で何千ものであるので、私はそれを削除するスクリプトを作成してみました:最初の行に正当なコードを残しながら
for i in $(find . -name \*.php); do
sed -i -E "s/<\?php\s$ulhmjwklj.*\?>//" $i;
echo $i;
done;
このsed
コマンドが正常に悪質なコードを削除しますが、その後、後続のすべての行では、すべての<?php ... ?>
のタグを削除します。だから私は、最初の行に置き換える/のみ検索にsed
コマンドを変更してみました:
for i in $(find . -name \*.php); do
sed -i -E "1s/<\?php\s$ulhmjwklj.*\?>//" $i;
done;
今すぐsed
コマンドは、各ファイルの最初の行で実行されますが、それはまた、追加されているすべての合法的なPHPタグを削除します悪質なコードの直後の最初の行に移動します。
誰かがここで間違っていると説明していただけますか?
は、すべてのファイルで修正された悪意のあるコードの長さですか?それともファイルごとに違いますか? – anacron
また、いくつのPHPファイルがありますか?すべてが影響を受けていますか? – anacron
'。*'は貪欲です... – jm666