私のウェブサイトは、少なくとも3135ファイル(私のすべてのWordPressサイト)にマルウェアを挿入したマルウェアに感染しました。
以下は感染したファイルの1つです。http://pastebin.com/FXU1ht4R
これが私が望む結果です:http://pastebin.com/YPJwjiWH
find
私はいくつかの簡単なコマンド以外にgrep
Unixコマンドについて何も知りません。
私は少し調査の終わりにこのコマンドを見つけまし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' {} \;
答え2
このソリューションは、悪意のあるスクリプトが複数行にまたがって機能し、内部編集を使用してサーバー上のファイルを直接変更します。
find /base/path/here -type f -name "*.php" -exec \
sed -Ei '/<\?php/{:l1;/.*\?><\?php/!{N;bl1};s/<\?php.*\?>(<\?php)/\1/}' {} \;
これが法案に合うことを願っています。
答え3
私が知っている限り、削除したいマルウェアはすべて1行目に配置されています。ただし、マークアップもその行に配置されるため、最初の行を削除するのではなく、最初の行全体を変更する<?php
必要があります。<?php
必要なのは、次のコマンドを使用することです。
sed -i '1 s/^.*$/<?php/g' yourFile.php
-i
オプションはファイルをその場で変更します。
したがって、findコマンドの場合は、次のようにします。
find * -type f -name "*.php" -exec sed -i '1 s/^.*$/<?php/g' {} \;
1行目と2行目に2つのラベルを含むファイルの場合は、<?php
上記のfind命令を実行してから次の命令を実行する必要があります。
find * -type f -name "*.php" -exec perl -ni -e 'print if $. < 1 or $. > 3 or !$seen{$_}++' {} \;
したがって、行1から行3までに見つかった重複行を削除します。-i
オプションはファイルをその場で変更します。