破損したWebサイトで数百のPHPファイルを使用し、各ファイルの上部に次の署名コードを挿入します。
<?php /*457563643457563643*/ ?><?php /*5467543654675436*/ ?><?php /*6745833567458335*/ ?><?php /*87934538793453*/ ?>
<?php
以下は、正当なPHPコードを持つ隣接セクションです。つまり、挿入されたコードは別の行にありません。
挿入されたコードを削除するために、次のコードを書きました。
grep -Rl 457563643457563643 . | xargs sed -i 's/<[?]php.*457563643457563643.*[?]>/<\?php \/\/ RECOVERED FILE \?>/g'
うまく動作しますが、残念ながら、挿入されたコードの後ろにある正当なPHPタグも削除します。
各ファイルの上部に挿入された次の部分を完全に削除する最良の方法は何ですか?
<?php /*457563643457563643*/ ?><?php /*5467543654675436*/ ?><?php /*6745833567458335*/ ?><?php /*87934538793453*/ ?>
答え1
これ最高方法は、侵入以前に持っていたバックアップの1つに移動してそこから始めることです。最善ではないアプローチが欲しいようです。これを行うには、sedを使用できます。
sedを使用して1行の正確なテキストブロックを削除する最も簡単な方法は、次を使用することです。s
コマンド明示的に削除します。
sed -e 's!<?php /\*457563643457563643\*/ ?><?php /\*5467543654675436\*/ ?><?php /\*6745833567458335\*/ ?><?php /\*87934538793453\*/ ?>!!'
*
これは、引用した正確な文字列を何でも置き換えます。メタ文字は毎回エスケープする必要がありますが、そうでなければs!pattern!replacement!
一般的な方法で使いやすいです。
私はできます。使用find -exec
(より良いこと、-execdir
得たら)パイプの代わりにxargs
、特に信頼できないディレクトリツリーがある場合。ファイル名にはさまざまな内容を含めることができます。特に、改行文字のため、望ましくないコマンドが実行される可能性があります。このsed
特定のコマンドラインで実際の問題になる可能性はありませんが、除外することはできません。
grep
内部でコマンドを実行しfind
、ファイルが一致する場合にのみ、そのファイルに対して操作を実行するか、単に処理するようにすることsed
ができます。パターンが一致しない場合、後でファイルは同じになります。
それにもかかわらず、私はまだ注意することをお勧めします。これらの兆候は物事の有害な部分ではなく、その部分がそれほど明確ではないかもしれません。
また見なさい:感染したサーバーを処理する方法は?