sedコマンドを使用して2回目の発生前のすべてを置き換える方法は?

sedコマンドを使用して2回目の発生前のすべてを置き換える方法は?

私のウェブサイトは、少なくとも3135ファイル(私のすべてのWordPressサイト)にマルウェアを挿入したマルウェアに感染しました。

以下は感染したファイルの1つです。http://pastebin.com/FXU1ht4R

これが私が望む結果です:http://pastebin.com/YPJwjiWH

find私はいくつかの簡単なコマンド以外にgrepUnixコマンドについて何も知りません。

私は少し調査の終わりにこのコマンドを見つけましsedたが、私の場合はこのコマンドの使い方がわかりません。

上記のコードに示されているように、一般的なパターンは、コードが各ファイルの上部、つまり元のタグの前<?php<?php挿入されているということです。

cnajwp =それで、その前に2番目のタグを含むすべてのファイルを見つけてすべて削除することができると思いました<?php

cnajwp以下を使用して埋め込みファイルを見つけることができます。

find * -type f -name "*.php" -exec grep -l "cnajwp =" {} \;

<?phpしかし、これらのイベントの2番目のラベルより前のすべての項目を置き換える方法はわかりません。

ここで誰でも私を助けることができますか?

ベストアンサー1

次に、コマンドを使用して感染ファイルを見つけ、最初の行で式を実行するxargsにリストを提供します。

find * -type f -name "*.php" -exec grep -l "cnajwp =" {} \; |
xargs sed -i -E '1s/^(<\?php) \$ocnajwp =.*$/\1/'

入力ファイルの例に基づいて、これはトリックを実行する必要があります。

同時に、感染がわずかに異なる場所にあるファイルを見つけ、最初の行に両方のファイルが含まれているため、次のコマンドを<?php実行してそのファイルを修復できます。

find * -type f -name "*.php" -exec \
gawk -i inplace 'NR==2 && /^<\?php$/ {next} 1' {} \;

おすすめ記事