sed finden ersetzen Script

BlackP

Blog Benutzer
Hallo,
brauche einen Script der rekursive in php Dateien nach einem code sucht und diesen entfernt.
Das habe ich bis jetzt.
Code:
for fl in *.php; do
sed --in-place '/<?php $lggbtzlimvz = ' NOCH VIEL CODE ' ?>/d'
"$f"; done
find -name '*.php' -exec sed '/<?php $lggbtzlimvz = NOCH VIEL CODE ?>/d' "{}" ';'

An der Stelle wo NOCH VIEL CODE steht befindet sich noch ne mänge an Zeichen aller Art.
Ich brauche jetzt das ganze so das er rekursive in allen php Dateien schaut wo er diesen String findet und den NOCH VIEL CODE Teil mit einem Wildcard eintrag.
Im endeffekt alles von <?php $lggbtzlimvz = ' NOCH VIEL CODE ' bis "?>" (alles in einer Zeile) entfernen.

Danke
 

Fusl

Blog Benutzer
I see what you did there.

Du versuchst ernsthaft deine Website die gehackt wurde automatisiert mit <i>sed</i> zu säubern?
Diese Art von Hilfe wirst du hier wohl kaum erwarten können.

Tipp von mir:

Website neu aufsetzen und Daten händisch migrieren um sicher zu stellen dass Schadcode bei der Migration nicht mitgenommen wird, sonst wird aus der Migration Tag für Tag eine Migräne.

Es hilft nichts, die Symptome zu bekämpfen wenn man nicht die Ursache findet und diese genauso beseitigt.
 

BlackP

Blog Benutzer
Ja das ist war.
Die Ursache ist aber leider unbekannt. Der Hoster kann nix finden und ich auch nicht. Es waren nur mein Kunde und ich an der Seite und alles ist auf dem aktuellsten stand.
Es ist ein grosses Fragenzeichen was das betrifft.

Hab das CMS auch schon neu aufgespielt, jetzt will ich nur die Module per Script bereinigen.
 

Fusl

Blog Benutzer
Es ist generell eine schlechte Idee Module 1:1 auf eine neue Installation des CMS zu kopieren, weil du dir damit ja immerhin die Sicherheitslücken mit kopierst und du nicht sichergehen kannst ob das jetzt nur diese eine Code-Zeile ist die das System "unsicher macht" oder ob da weitere Files sind die einfach als Backdoor dienen und so aussehen als wäre es normaler Code welcher von den Modul-Entwicklern geschrieben wurde.

Wie bereits erwähnt, alles neu installieren, auch Module und andere Scripte die mal installiert wurden, und generell immer doppelt und dreifach prüfen ob alles richtig abgesichert ist, ist zwar jetzt nicht die einfachste, aber mitunter einer der sichersten Lösungen.
 

Joe User

Zentrum der Macht
Quick&Dirty, ungetestet:
Code:
find /path/ -type f -name \*.php -print0 | xargs -0 sed -e 's|<\?php[[:space:]]*\$lggbtzlimvz[[:space:]]*=[[:space:]]*[^\?]>|/** malware deleted **/|g' -i -
 

BlackP

Blog Benutzer
Hallo funktioniert leider nicht.
Sind bei den Wildcard alle Zeichen und auch leer Zeichen enthalten?
Und das ganze auch rekursiv?
 

.A.

Bei den Wildcards dürfte es sich nur um Leerzeichen handeln, falls ich da nichts übersehe.

--
.A.
 

Joe User

Zentrum der Macht
Funktioniert es so?
Code:
find /path/ -type f -name \*.php -print0 | xargs -0 sed -e 's|<\?php[[:space:]]*\$lggbtzlimvz[[:space:]]*=[[:space:]]*.*[^\?]>|/** malware deleted **/|g' -i -
Bitte nur an einem Test-Backup testen, nicht am Original!

Eventuell musst Du mit den Escapes spielen, da erwartet jede Shell und jedes sed etwas Anderes.
 
Last edited by a moderator:

DeaD_EyE

Blog Benutzer
Mit regex in der Shell habe ich so meine diversen Probleme (kann ich mir nicht merken). Jeder Befehl und jede Shell unterstützen eine andere Untermenge der regulären Ausdrücke. Aus dem Grund greife ich persönlich lieber gleich zu Python und muss mir dann nur den einen Syntax merken ohne wie ein Wahnsinniger jedes Steuerzeichen vor der Shell zu escapen zu müssen. Lieber schreibe ich ein paar mehr Zeilen Code um den Überblick zu behalten. Die Einzeiler sind oftmals einfach nur quick&dirty.

Hier kann man seinen Regex auch online direkt testen: http://regexr.com

Viel Spaß beim Probieren.
 

.A.

Meintest Du nicht eher:
Code:
find /path/ -type f -name \*.php -print0 | xargs -0 sed -e 's|<\?php[[:space:]]*\$lggbtzlimvz[[:space:]]*=[[:space:]]*[^\?]*\?>|/** malware deleted **/|g' -i -

.* dürfte greedy sein und damit kannst Du dann auch gleich mit
Code:
find /path/ -type f -name \*.php -print0 | xargs -0 sed -e 's|<\?php[[:space:]]*\$lggbtzlimvz[[:space:]]*=.*$|/** malware deleted **/|g' -i -
alles zerschießen. Ok, ist ja ohnehin schon kaputt...
--
.A.
 

Joe User

Zentrum der Macht
Meintest Du nicht eher:
Code:
find /path/ -type f -name \*.php -print0 | xargs -0 sed -e 's|<\?php[[:space:]]*\$lggbtzlimvz[[:space:]]*=[[:space:]]*[^\?]*\?>|/** malware deleted **/|g' -i -

Jupp, so ist es richtig, danke.



@Dead_Eye
Was machst Du in Umgebungen ohne Python, etwa Rescue- oder Embedded-Systeme?
 

DeaD_EyE

Blog Benutzer
@Joe User
Auf meinen Systemen (Rescue, sowie embedded) ist Python. Wenn das bei dir nicht drauf ist, dann ist das doch nicht mein Problem. Hauptsache das SED-Konstrukt geht jetzt und keiner muss jetzt mehr drüber nachdenken.
 

.A.

sed-Konstruke für abwegige Aufgaben auszudenken ist doch ganz witzig. Solange es nicht mein System ist auf dem sie laufen...

--
.A.
 

DeaD_EyE

Blog Benutzer
sed-Konstruke für abwegige Aufgaben auszudenken ist doch ganz witzig. Solange es nicht mein System ist auf dem sie laufen...

--
.A.

Stimmt, witzig ist es. Witzig ist auch, dass man es dann selbst lieber nicht testet :-D
 

Joe User

Zentrum der Macht
Könnte daran liegen, dass es mit diff und patch viel einfacher, schneller und zuverlässiger geht, als mit dieser halbgaren "Lösung".

Der OP wollte es per sed und hat es bekommen, fertig.

Über den Sinn dieser "Lösung" will ich mich eigentlich gar nicht auslassen, denn der OP möchte offenbar keine echte Lösung seines Problems, also ist ihm die Sinnfreiheit dieser "Lösung" wohl bekannt und er will weiterhin verwundbar bleiben...

Insofern habe ich den sed einfach kurz aus dem Ärmel geschüttelt und bewusst auf einen zeitverschwendenden Test verzichtet. Das kann der OP selbst erledigen, er ist ja risikofreudig genug...
 

DeaD_EyE

Blog Benutzer
Joer: Hier hast du den 45er, ich hab ihn für dich schon mal geladen. Einfach da unten auf den Abzug drücken....

OP: Da kommt aber nichts und ich kann im Lauf auch keine Kugel sehen.

Joe: Stell doch mal den Hebel an der Seite um....
Joe: HALT
Joe: Hallo, Polizei? Ja, hier hat sich gerade jemand in den Kopf geschossen.
 

Joe User

Zentrum der Macht
Jo, russisch Roulette eben. So will es der OP nunmal. Andernfalls würde er das System aus sauberer Quelle neu aufsetzen, updaten, sauberes Nutzdatenbackup zurückspielen, updaten, etc. statt diese Frickellösung zu fordern.

Also Alles gut, der OP hat seinen Willen befriedigt bekommen und wir können uns wieder echten Problemen widmen. Ganz im Sinne der Gepflogenheiten des SSF, wo es bekanntlich unerwünscht ist, einem OP deutlich mitzuteilen, dass er Scheisse baut...

Naja, egal wie ich es mache, es meckern immer die Selben... Hauptsache sie haben mal wieder grundlos auf Joe User eingedroschen, ohne selbst eine vernünftige(re) Lösung geboten zu haben...

/EOD
 
Top