Virenwarnung: Wurm befällt PHP Seiten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Virenwarnung: Wurm befällt PHP Seiten

    . Der Santy-Wurm hat seine Angriffsstrategie geändert
    In der letzten Woche hatte es der Santy-Wurm noch auf Web-Seiten abgesehen, auf denen das Forensystem phpBB zum Einsatz kommt. Der Wurm nutzte die Suchmaschine von Google aus, um die Seiten ausfindig zu machen. Die Ausbreitung des Wurmes konnte aber zum Glück von Google schnell gestoppt werden. Vor wenigen Tagen sind nun mehrere Weiterentwicklungen des Santy-Wurms aufgetreten. Die Würmer Santy.C und Santy.E haben es nicht mehr nur auf Internet-Seiten mit phpBB abgesehen, sondern auch auf Seiten die generell in der Script-Sprache PHP programmiert wurden. Kurz gesagt der Wurm hat es auf schlecht programmierte Seiten abgesehen. Der Wurm versucht zunächst über Yahoo, Aol und Google, Seiten zu ermitteln die in PHP geschrieben wurden und auf denen die Funktion "include()" und "require()" vorkommen. Die Funktionen werden dazu benutzt sich die Dateien der Web-Seite anzeigen zu lassen. Hat der Programmierer die Funktion an dieser Stelle nicht sorgfältig geprüft, kann ein Angreifer diese Funktion missbrauchen und im schlimmsten Fall die gesamte Kontrolle über den Webserver einnehmen. Von den französischen Sicherheit************perten K-OTik Security wird empfohlen, PHP Seiten in denen die beiden Funktionen vorkommen so umzuprogrammieren, dass sie wieder sicher verwendbar sind.
    Das habe ich heute im Internet gefunden!

    Was heißt das genau für Seiten mit der include-Funktion ?
    Wie kann man diesen Befehl dann sicherer machen ?

  • #2
    gegenbeispiel zur anschaulichkeit.

    disclaimer: don't try this at home!
    PHP-Code:
    include($_GET["page"]); 
    ist dir die gefahr klar?

    Kommentar


    • #3
      ich kanns nicht mehr hören.

      nix gegen den threadstarter - habe nur schon seit wochen die befürchtung, daß die hoster sich verrückt machen lassen, und allow_url_fopen (o.s.ä.) deaktivieren.

      wer mit der vermeintlichen sicherheitslücke untergeht, hat es nicht anders verdient. punkt.
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #4
        So könnte eine sichere Version aussehen:

        PHP-Code:
        <?PHP

        $incArray 
        = array();
        $incDir=opendir ('./includes/');
        while (
        $inc readdir ($incDir))
        {
            if (
        $inc != '.' && $inc != '..')
            {
                
        $incArray[] = str_replace('.inc.php'''$inc);
            }
        }
        closedir ($incDir);

        if(
        in_array (addslashes ($_GET['inc']), $incArray))
        {
            include (
        './'.$include.'.inc.php');
        }
        else
        {
            
        /* Hier kann ein exit rein oder ein Standardmodul wird included */
            
        exit('Böser Code');
        }
        ?>
        Alle erlaubten includes liegen in einem Ordner in includes und haben zusätzlich die Endung .inc.php. Wenn das alles stimmt, wird auch included.

        Kommentar


        • #5
          PHP-Code:
          if(is_file($pfad_zu_meinen_includes.$_GET['datei']))
          {} 
          wäre zu einfach?
          Kissolino.com

          Kommentar


          • #6
            jupp, wäre es, weil $_GET auch so aussehen könnte:

            Code:
            ../../../../etc/passwd

            Kommentar


            • #7
              außerdem,

              in sämtlichen projekten muß ich nirgends $_GET oder $_POST oder sonstige, von außen kommende sachen, includen ... ich glaub, ihr macht da was falsch
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                mal ne frage am rande, ist es normal das ihr den Dateinamen in der URL angibt?

                Muster:
                domain/index.php?pfad=meine_datei


                sehe keinen Grund dafür, seiten so zu bauen.
                mfg
                marc75

                <Platz für anderes>

                Kommentar


                • #9
                  Original geschrieben von marc75
                  mal ne frage am rande, ist es normal das ihr den Dateinamen in der URL angibt?

                  Muster:
                  domain/index.php?pfad=meine_datei


                  sehe keinen Grund dafür, seiten so zu bauen.
                  Dafür gibts nur eine Erklärung: Anfänger

                  Kommentar


                  • #10
                    sag ich doch.

                    edit: bezogen auf marc75
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      Original geschrieben von S.Oliver
                      jupp, wäre es, weil $_GET auch so aussehen könnte:

                      Code:
                      ../../../../etc/passwd
                      hups, dass das funktioniert, auf die idee bin ich noch nie gekommen.

                      ansonsten haben die anderen recht: man sollte so nicht includen.
                      Kissolino.com

                      Kommentar


                      • #12
                        Jop is_file in Verbindung mit kicken aller relativen Verzeichnispfaden würde ja schon reichen......
                        [color=blue]MfG Payne_of_Death[/color]

                        [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                        [color=red]Merke:[/color]
                        [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                        Murphy`s Importanst LAWS
                        Jede Lösung bringt nur neue Probleme
                        Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                        In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                        Kommentar


                        • #13
                          Wie findet ihr die?

                          PHP-Code:
                          if(isset($_GET[action])){
                          $action "content/".$_GET[action];
                          if(!
                          file_exists($action.".php")
                              || 
                          strpos($_GET[action],"://")
                              || 
                          substr($_GET[action],0,1)=="/"
                              
                          || strpos($_GET[action],"/")
                              )
                              {
                          echo 
                          "Fehler!";
                          }
                          else {
                              
                          $include $action.".php";
                          include 
                          "$include";
                          }
                          }
                          else {
                          include 
                          "content/start_".$tmpsite.".php";

                          Kommentar


                          • #14
                            Der Vorteil ist halt, dass man eine neue Datei hochlädt und man hat eine neue Contentseite, die man auch sofort einbinden kann, ohne erst den Quelltext ändern zu müssen. Wenn man die möglichen Werte vernünftig absichert ist es ja auch sicher, sofern man die Probleme kennt, die dabei entstehen können. Von daher halte ich das Prinzip auch für Fortgeschrittene als durchaus legitim.

                            Kommentar


                            • #15
                              PHP-Code:
                              <?
                              if(!(strpos($HTTP_GET_VARS['site'],".."===false))    // alles was auf höhere Verzeichnisse zugreift
                              || substr($HTTP_GET_VARS['site'],0,1)=="/"            // alles was auf doc-root zugreift
                              || strpos($HTTP_GET_VARS['site'],"://")                // alles was Scripte von anderen Servern includet
                              || !isset($HTTP_GET_VARS['site'])                    // keine Seite übergeben
                              || !$HTTP_GET_VARS['site']                            // übergebene Seite ist leer
                              || !file_exists($HTTP_GET_VARS['site'])                // Datei gibt es nicht
                              )
                                  {
                                  $HTTP_GET_VARS['site']="content/home.php";
                                  }
                              include_once($HTTP_GET_VARS['site']);
                              ?>
                              von TBT, verbessert durch Wotan.
                              Sunshine CMS
                              BannerAdManagement
                              Borlabs - because we make IT easier
                              Formulargenerator [color=red]Neu![/color]
                              Herkunftsstatistik [color=red]Neu![/color]

                              Kommentar

                              Lädt...
                              X