Ein sauberer Dateiscan ist keine saubere Website. Eingeschleuste Skripte wohnen bequem im Inhalt: im Text eines Beitrags, in einem Widget, in einer Einstellungszeile, in einer Theme-Option. Die Anwendung neu zu installieren ersetzt die Dateien und lässt jedes einzelne davon genau dort, wo es war.

Suchen Sie danach

SELECT * FROM wp_posts
 WHERE post_content LIKE '%<script%'
    OR post_content LIKE '%eval(%'
    OR post_content LIKE '%base64_decode%'
 LIMIT 50;

SELECT option_name, LEFT(option_value, 120) FROM wp_options
 WHERE option_value LIKE '%<script%' LIMIT 50;

Dasselbe gilt für jedes Schema: die Textspalten, die Besucher sehen, plus die Einstellungstabelle. Eine Suche nach einem Script-Tag in Inhalt, der niemals eines enthalten dürfte, findet das meiste.

Oder durchsuchen Sie gleich den ganzen Dump

Schneller als bei Tabellen zu raten, und es funktioniert auch bei einem Schema, das Sie nicht kennen.

mysqldump -u user -p dbname > /tmp/scan.sql
grep -n -E '<script|eval\(|base64_decode|document\.write' /tmp/scan.sql | head -40
shred -u /tmp/scan.sql

Bereinigen

  1. Sichern Sie zuerst die Datenbank — Sie sind im Begriff, UPDATE-Anweisungen auf lebende Inhalte loszulassen.
  2. Eine Zeile von Hand reparieren — Bestätigen Sie die genaue Zeichenkette und dass ihr Entfernen gültigen Inhalt zurücklässt.
  3. Dann der Rest, eng eingegrenzt — UPDATE wp_posts SET post_content = REPLACE(post_content, '<script src="//bad.example"></script>', '') WHERE post_content LIKE '%bad.example%';
  4. Zählen Sie vorher und nachher — Ein REPLACE, das mehr Zeilen anfasst, als Ihr SELECT gefunden hat, heißt: das Muster ist zu weit gefasst.
Führen Sie niemals ein breites REPLACE über alle Textspalten auf einmal aus. Das ist der schnellste Weg, aus einer Übernahme einen Datenverlust zu machen — und die Sicherung von vor zwei Minuten wird zur einzigen Kopie Ihrer Inhalte.

Dann die Tür schließen

Inhalt wird durch irgendetwas eingeschleust: ein altes Plugin, ein gestohlenes Admin-Passwort, ein beschreibbarer Upload-Ordner. Die Zeilen zu säubern, ohne das zu finden, heißt: in wenigen Tagen ist es wieder da. Siehe Eine übernommene Website säubern.