Skript Mißbrauch durch Spammer - wo sind die Lücken?

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

  • Skript Mißbrauch durch Spammer - wo sind die Lücken?

    Hallo,

    unser Provider hat nun zum wiederholten Male die Website gesperrt, weil angeblich über unseren Account Spam-Mails versendet wurden. Momentan ist eine Diskussion im Gange, ob das Problem bei uns liegt, oder beim Provider.

    Darum möchte ich gerne wissen, welche Voraussetzungen gegeben sein müssen, das ein solcher Mißbrauch stattfinden kann.

    In zwei PHP-Files wurde die mail()-Funktion verwendet. Diese war eigentlich schon abgesichert und wurde inzwischen auch aus den Files entfernt. Der Spam-Versand ging munter weiter.

    Ich habe mehrere PHP-Files, die keine Argumente entgegen nehmen, sondern z.B. nur eine bestimmte(!) Datei öffnen und den Inhalt entsprechend formatiert ausgeben. Gibt es da Möglichkeiten zur Manipulation?

    Des weiteren habe ich Scripte, die ebenfalls eine Textdatei öffnen, aber nur einen bestimmten Teil davon ausgeben. Dabei wird nur der Startwert und die Schrittweite als Variable übergeben. Reicht es aus mittels preg_match("/^\d+$/",$start) zu prüfen, ob diese aus Ziffern bestehen?

    Ich verwende zur Anzeige des Inhalts ein Script namens

    viewpage.php?content=bla.html

    bla.html wird dann per include eingebunden. Reicht es aus sicherzustellen, dass keine externen Inhalte (also z.B. content=http://www.boeseseite.de/crack.html) eingebunden werden? Welche Tests sollte man evtl. sonst noch machen?

    Wie könnte ein Mißbrauch sonst noch geschehen?

    Eine Menge Fragen, ich weiß. Aber das Problem nervt extrem!
    Ich habe die Seite momentan auf http://www.billard-p3c.de/breakball verlagert, wer Lust hat kann sich das gerne mal ansehen.

    Gruß, J. Mayer

  • #2
    bla.html wird dann per include eingebunden. Reicht es aus sicherzustellen, dass keine externen Inhalte (also z.B. content=http://www.boeseseite.de/crack.html) eingebunden werden?
    das is schon mal klasse, bei Dir kann man ja dann alles einbinden und ausführen.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Das würde ich dicht machen, aber z.Z.

      Grob fahrlässig würde ich sagen.

      Kommentar


      • #4
        Original geschrieben von MelloPie
        das is schon mal klasse, bei Dir kann man ja dann alles einbinden und ausführen.
        Wieso bitte kann man alles einbinden? Es können doch auf diese Weise nur Dateien eingebunden werden, die auf unserem Webspace liegen. Oder gibt es Möglichkeiten, dass Unbefugte Dateien auf unserem Server ablegen? Bei einer Suche habe ich übrigens keine fremden Dateien gefunden.

        Gruß, J. Mayer

        Kommentar


        • #5
          naja, falls das kein stück überprüft wird, hängst du, wie selbst schon von dir gesagt, ein content=http://www.boeseseite.de/crack.html an und du bindest den seinen mist ein, vllt ist dort die mail() definiert, oder erstmal ein var_dump( get_defined_vars() ) um die möglichkeiten und sicherheitslücken deines skripts zu testen.

          du bist schon auf der sichereren seite, wenn du dir ein array definierst, in dem die adressen zu den seiten stehen und du nur den key mit der adresse übergibst. so bindest du nur den content aus dem array ein!
          also:

          PHP-Code:
          $pages=array( 1=>"bla.html"2=>"bli.html"3=>"blo.php" );

          if( 
          array_key_exists$_GET['content'], $pages ) ) {
            include 
          $pages[$_GET['content']];
          }
          else {
            echo 
          "böse!";

          Kommentar


          • #6
            Reicht es aus sicherzustellen, dass keine externen Inhalte (also z.B. content=http://www.boeseseite.de/crack.html) eingebunden werden? Welche Tests sollte man evtl. sonst noch machen?
            Also der Test gegen externe Inhalte ist schon mal gut. Du solltest aber auch noch sicherstellen, dass nicht irgendwelche Seiten bei dir angezeigt werden können z.B. die .htaccess oder irgendwelche conf Files. Ich würde dir daher eine Art Whitelist empfehlen wo du alle erlaubten Dateien einträgst. Auf diese Liste prüfst du jeden Aufruf.
            Oder gibt es Möglichkeiten, dass Unbefugte Dateien auf unserem Server ablegen? Bei einer Suche habe ich übrigens keine fremden Dateien gefunden.
            Wenn du noch irgendwo ein Upload Script hast dann könnte das dazu missbraucht werden dir ne PHP Datei hochzuladen und den Inhalt mittels dem include auszuführen. Das folgende soll nur ein Bsp sein, aber wenn dieser Code zu dir hochgeladen wird und dann noch ausgeführt wird, dann gute Nacht.
            Code:
            unlink('htdocs');
            Ich habe mehrere PHP-Files, die keine Argumente entgegen nehmen, sondern z.B. nur eine bestimmte(!) Datei öffnen und den Inhalt entsprechend formatiert ausgeben. Gibt es da Möglichkeiten zur Manipulation?

            Des weiteren habe ich Scripte, die ebenfalls eine Textdatei öffnen, aber nur einen bestimmten Teil davon ausgeben. Dabei wird nur der Startwert und die Schrittweite als Variable übergeben. Reicht es aus mittels preg_match("/^\d+$/",$start) zu prüfen, ob diese aus Ziffern bestehen?
            Zu 1) imho wird es da keine Manipulationsmöglichkeit geben, weil dazu immer Eingaben von aussen verwendet werden müssten. Und diese hast du ja nicht.
            Zu 2) Wenn es deine Textdatei ist dann sollte das ebenfalls kein Problem sein. Ausser jemand kann dir x-beliebiges Zeug hochladen...

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Hallo zusammen,

              erstmal Danke für die Antworten.

              Also der Test gegen externe Inhalte ist schon mal gut. Du solltest aber auch noch sicherstellen, dass nicht irgendwelche Seiten bei dir angezeigt werden können z.B. die .htaccess oder irgendwelche conf Files. Ich würde dir daher eine Art Whitelist empfehlen wo du alle erlaubten Dateien einträgst. Auf diese Liste prüfst du jeden Aufruf.
              Das Blocken der externen Inhalte ist natürlich schon von Anfang an Drin. Die anderen Tips werde ich heute mal einbauen.

              Wenn du noch irgendwo ein Upload Script hast dann könnte das dazu missbraucht werden dir ne PHP Datei hochzuladen und den Inhalt mittels dem include auszuführen.
              Ein Upload-Script gibt es nirgendwo auf der Seite. Wenn es sonst keien Möglichkeiten gibt, durch Sicherheitslücken Dateien einzuschleusen, kann ich das auch schon mal ausschließen.

              Zu 2) Wenn es deine Textdatei ist dann sollte das ebenfalls kein Problem sein. Ausser jemand kann dir x-beliebiges Zeug hochladen...
              Hochladen von Dateien sollte ja nicht gehen, siehe oben. Und die Dateien sind auf jeden Fall meine, der Dateiname ist auch fest im Script definiert und wird nicht als Variable übergeben.

              Gruß, J. Mayer

              Kommentar


              • #8
                unser Provider hat nun zum wiederholten Male die Website gesperrt, weil angeblich über unseren Account Spam-Mails versendet wurden. Momentan ist eine Diskussion im Gange, ob das Problem bei uns liegt, oder beim Provider.

                Es muss ja nicht über die webseite sein, es kann auch sendmail offen sein, oder etwa nicht? oder überhaupt irgendeine Fälschung der mails.

                Man müsste ja von faulen .php-Aufrufen zumindest irgendetwas im logfile sehen, dh einen Verdacht aufbauen.

                Kommentar


                • #9
                  Es muss ja nicht über die webseite sein, es kann auch sendmail offen sein, oder etwa nicht? oder überhaupt irgendeine Fälschung der mails.
                  Der Support des Providers meinte am Telefon, die Logfiles seien voll mit Fehlermeldungen von sendmail. Kann man etwas allein anhand dieser Tatsache von vorneherein Manipulationen über die Website ausschließen?

                  Gruß, J. Mayer

                  Kommentar


                  • #10
                    schau doch mal unter http://www.anders.com/projects/sysad...PostHijacking/

                    ab

                    you are using PHP, you can do this for each variable used in email headers:
                    PHP-Code:
                    $_POST['email'] = preg_replace("/\r/"""$_POST['email']); 
                    $_POST['email'] = preg_replace("/\n/"""$_POST['email']); 
                    cu berni

                    php-Entwicklung | ebiz-consult.de
                    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
                    die PHP Marktplatz-Software | ebiz-trader.de

                    Kommentar


                    • #11
                      @ Berni:

                      Danke für den Tip. Diese Problematik war mir bereits bekannt. Im Moment wird mail() überhaupt nicht mehr benutzt, alle Vorkommnisse wurden auskommentiert. Der Spam-Versand ging trotzdem weiter.

                      Ich habe mir selbst Formulareingaben zum überprüfen schicken lassen. Dabei sind aber in den Header keine Informationen aus Variablen eingeflossen. Absende- und Antwortadresse sind fest vorgegeben.

                      PHP-Code:
                      $titel="zurückgehaltener Eintrag im Breakball Gästebuch";

                      $header "From:BC Breakball<xxx@breakball.de>\n";
                      $header .= "Reply-To: xxx@breakball.de\n";
                      $header .= "X-Mailer: PHP/" phpversion(). "\n";         
                      $header .= 'Content-Type: text/plain;charset="iso-8859-1"'."\n";
                      $header .= "Content-Transfer-Encoding: 8bit";

                      $e=mail("jnmayer@t-online.de",$titel,$text,$header); 
                      Gruß, J. Mayer

                      Kommentar


                      • #12
                        Ich würde überhaupt die logfiles anschauen, was wurde aufgerufen?, und wie sieht es zeitlich mit den sendmail Fehlermeldungen aus? werden etwa freimütig mail-accounts @deine-domain.de vergeben?

                        Machst Du bei einem Gästebucheintrag zufälligerweise ein Kontrollmail an den Eintrager?

                        Ist der Schutz gegen index.php?seite=http:// dort schon aktiv?

                        Was sind das überhaupt für Fehlermeldungen von sendmail?
                        Zuletzt geändert von muh (newbie); 25.05.2006, 00:19.

                        Kommentar


                        • #13
                          Ich würde überhaupt die logfiles anschauen, was wurde aufgerufen?
                          An die komme ich nicht mehr heran, da der Zugriff im Moment gesperrt ist. Ich habe selbst eine Funktion eingebaut, welche alle Seitenaufrufe samt Zeit und IP-Adresse speichert. Ich hatte darum gebeten diesen File zur Analyse per eMail zu bekommen. Darauf warte ich noch immer.

                          Machst Du bei einem Gästebucheintrag zufälligerweise ein Kontrollmail an den Eintrager?
                          Nein. Aber seit 2-3 Wochen wird der Spam in unserem Gästebuch immer mehr. Ich habe deswegen ein paar Filter eingebaut, die unerwünschte Einträge aussortieren. Und solange ich noch an diesen Filtern programmiere, habe ich mir diese Einträge per eMail schicken lassen, um zu prüfen, ob dem Filter nicht auch echte Einträge zum Opfer fallen.
                          Der Block mit dem eMail-Versand wurde nach der ersten Sperrung auskommentiert. Doch ein paar Stunden nach der Freischaltung der Domain ging der Spam-Versand wieder los und die Seite wurde wieder abgeschaltet. Offenbar hat dann auch der Spam-Versand aufgehört.

                          Ist der Schutz gegen index.php?seite=http:// dort schon aktiv?
                          Dieser Schutz ist natürlich aktiv und kann gerne unter http://www.billard-p3c.de/breakball/ besichtigt werden.

                          Was sind das überhaupt für Fehlermeldungen von sendmail?
                          Ich hab's nicht zu Gesicht bekommen und kann auch nicht mehr darauf zugreifen. Aber am Telefon sagte mir der Support etwas von:

                          sendmail: fatal: No recipient addresses found in message header

                          Keine Garantie auf den genauen Wortlaut, aber so ungefähr lautete die Fehlermeldung. Vielleicht wird ja jemand schlau draus, unser Provider (top-hoster.de) kriegts jedenfalls nicht auf die Reihe.

                          Gruß, J. Mayer
                          Zuletzt geändert von jnmayer; 25.05.2006, 01:18.

                          Kommentar


                          • #14
                            Kein Empfänger gefunden.
                            Von welchen Script stammt der Aufruf?

                            http://www.billard-p3c.de/breakball/...ttp://heise.de

                            geht doch nicht.
                            Unberechtigter Zugriff. Ihre IP (vv.vv.vv.vv)wurde geloggt!

                            Kommentar


                            • #15
                              Original geschrieben von brusau
                              Kein Empfänger gefunden.
                              Von welchen Script stammt der Aufruf?
                              Was der Fehler bedeutet ist klar. Woher der Aufruf stammt kann ich nicht sagen. In die Logs kann ich wegen der Sperrung nicht mehr schauen. Und der Support kann oder will es auch nicht sagen.

                              Gruß, J. Mayer

                              Kommentar

                              Lädt...
                              X