Die Infektion war auch schon auf der alten Seite und im Backup enthalten, ich habe von hackuni Zugriff aufs SSH bekommen und bin dran mit Ihm die Bereinigung durchzuführen, hierfür muss aber erstmal PHP von Ihm deaktiviert werden. Hier mal die KI unterstütze Analyse:
Symptome
- index.php im Webroot ist stark vergrößert (tausende Zeilen statt 2)
- Unbekannte Verzeichnisse unter wp-content/ mit Zufalls-Hash-Namen (z.B. wp-content/ad6ccaf1/)
- Darin: index.php oder edit.php mit obfuskiertem Code
- Löschen hilft nicht – Dateien erscheinen nach wenigen Sekunden wieder
- Im Access-Log: massenhaft 200 OK auf URLs die nicht existieren (/items/involved/123.htm, /goods.php?detail/...)
- Alle diese Responses haben exakt dieselbe Byte-Größe
Infektionskette (vereinfacht)
httpdocs/index.php ← Stufe 1: SEO-Cloaker + Trigger
└── wp-content/[hash]/*.php ← Stufe 2: Remote-Code-Loader
└── C&C-Server ← Stufe 3: Web-Shell (im RAM, nie auf Disk)
Stufe 1: index.php – SEO-Cloaker
Die echte WordPress-index.php (normalerweise 2 Zeilen) wurde durch eine massiv obfuskierte Version ersetzt.
Obfuskierungstechniken:
- Hunderte goto-Sprünge um den Kontrollfluss zu verschleiern
- Alle Strings als Oktal/Hex-Escape-Sequenzen ("\x47\x45\x54" = "GET")
- C&C-Domain rückwärts eingebaut + per strrev() zur Laufzeit zusammengesetzt
- Zusätzlich alle Zeichen um -5 verschoben (ASCII-Verschlüsselung)
Was der Code macht:
- Prüft ob Besucher ein Suchmaschinen-Bot ist (Googlebot, Bingbot, Baidu, Yandex...)
- Für normale Nutzer: lädt WordPress normal
- Für Bots: liefert gefälschte Shop-Seiten mit JS-Redirect auf Spam-Domains aus
- Baut bei jedem Request den C&C-Server-Hostname zusammen und ruft Stage 2 auf
- Kann Google-Verifikationsdateien ins Webroot schreiben (Domain-Hijacking in Search Console)
- Exfiltriert das komplette $_SERVER-Array an den Angreifer
Stufe 2: wp-content/[hash]/*.php – Stage-2 Loader
Diese Dateien sind der eigentliche Regenerator. Solange sie aktiv sind, wird alles andere nach dem Löschen sofort neu erstellt.
Zwei Varianten gefunden:
Variante A (edit.php) – Voller HTTP-Client:
- Baut URL rückwärts zusammen: https://*/1ser.txt
- Holt PHP-Code vom C&C (cURL, Fallback: raw TCP-Socket)
- Tarnt sich als echter Chrome-Browser (User-Agent-Spoofing)
- SSL-Zertifikat-Verifikation deaktiviert
- eval() auf den heruntergeladenen Code
Variante B (index.php) – Backup-Loader:
- Anderer C&C: https://*/tt.txt
- Bewusst redundant – fällt Server A aus, übernimmt Server B
Stufe 3: tt.txt – die eigentliche Payload (Web-Shell)
Das ist der gefährlichste Teil. Die Datei auf dem C&C-Server enthält:
<?php
// Passwortschutz (doppeltes SHA256)
if (hash('sha256', hash('sha256', $_POST['pwdyt'])) == '[hash]') { ... }
// Komprimierte Web-Shell (~35KB gzinflate)
$ULTRA = "eJwB...";
// Triple-kodierter eval:
@eval(base64_decode(base64_decode("\x57\x6c...")));
// → eval(gzinflate(base64_decode($ULTRA)));
Die Web-Shell wird nie auf Disk geschrieben – sie läuft ausschließlich im PHP-Prozess-Speicher. Enthält nach Analyse:
- File Manager (lesen/schreiben/löschen)
- Shell-Command-Execution
- PHP-eval-Interface
- SQL-Client (direkter Datenbankzugriff)
- File-Upload
- Reverse-Shell-Funktionalität