Überprüfung meines include befehles

  • hallo an alle,

    ich bin der webmaster der homepage eines sportvereins. ich habe die seite "geerbt" und habe mich in die verwaltung der seite hineingearbeitet.
    mit php kenne ich mich gar nicht aus.´
    vor einigen wochen nun wurde unsere seite opfer eines hackerangriffes durch eine lücke in der coppermine galerie. nach update von coppermine auf die neueste version sind die angriffen weniger geworden, aber immer noch da, meistens am wochenende.

    heute bin ich nun drauf gestossen, dass evtl. ein nicht sicherer include befehl daran schuld sein könnte.

    ich habe mittlerweile gegoogelt und den code entsprechend den gefunden google-ergebnissen abgeändert. da ich nun leider, wie erwähnt, keine php kenntnisse habe möchte ich hier im forum darum bitten, ob mal jemand über diesen code schauen könnte ob das so ok ist.

  • hallo an alle, hallo jojo87,

    hier der code:

  • Code
    If ((!isset($_GET[“counter”]) || strpos($_GET["counter"],'://')) 
    { 
    $seite = “counter”; 
    } else {
    $seite = $_GET[“counter”]; 
    }

    Damit unterbindest du externe includes.
    Die Hacker konnten dateien von anderen webservern bei dir includen.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • argh

    Ich komm dann mit der URL

    Code
    datei.php?counter=../../../../etc/passwd

    oder ähnlich.
    überprüfe ob der pfad schlussendlich auch da hinzeigt wo er soll.

    Beispiel (ungestetet)

  • Oha, ich könnte mich manchmal über mich selbst aufregen. Du hst natürlich recht, RMB.
    Also gut, damit deine Suche nun in diesem Forum ein Ende hat, gast :wink:

    Includiert die Seite ./inc/$_GET['page'].php und beugt xss-Attacken denk ich gut vor. Wurde so mal hier von Bendor geposted.

    Gruß,
    Jojo


  • XSS Attacken sind wenn man html,css,js einfügen kann ;)
    Das wäre eine «Remote» oder «Local File Inclusion» Attacke

    Bin mir nicht sicher aber ich denke das «strpos($_GET['page'], "../")» könnte man umgehen mit ..\ (sollte auf windows servern funktionieren).

    Ich bevorzuge meine Variante, die überprüft ob man sich noch in dem Verzeichniss befindet.

  • Zitat von ::RMB::

    Bin mir nicht sicher aber ich denke das «strpos($_GET['page'], "../")» könnte man umgehen mit ..\ (sollte auf windows servern funktionieren).

    wie wärs dann damit? ;)

    Code
    if((!isset($_GET[“counter”]) || strpos($_GET["counter"],'://') || strpos($_GET["counter"],'../') || strpos($_GET["counter"],'..\'))

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Hallo jojo87, Dodo und ::RMB::,

    ich bin der Gast mit dem include-befehl-problem.

    Vielen Dank für eure Mühe.

    Jojo87 zu deinem Script muss ich sagen:
    die Datei mit dem Include-Befehl steht im Root,
    die Datei counter.php steht ebenfalls im Root.
    Ich verstehe bei deinem Script „./inc/“ nicht.
    Muss ich das abändern ?
    Unsere Start-Datei heisst „xx_index.php“ und
    Steht ebenfalls im Root.

    Gerne würde ich auch das Script von Dodo verwenden,
    obwohl ich bisher einige zeichen ( „||“) noch nicht verstehe.
    Ist das php-code ?
    Das Zeichen "|" ist das Anführungszeichen, das ist mir klar.
    Aber ( „||“) ??
    Kannst du vielleicht das als php-code posten ?

    Vielen Dank nochmals
    und bis bald.

  • || ist das selbe wie OR oder or
    Das ist einfach ein logisches "Oder"

    aber da ich auch noch C++ und ähnliches Programmiere bin ich das || gewohnt, denn dort gibt es nur || als logisches "Oder".

    Also das hier

    Code
    if($variable1==1 || $variable2==1)


    ist das selbe wie das hier

    Code
    if($variable1==1 OR $variable2==1)


    oder das hier

    Code
    if($variable1==1 or $variable2==1)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • zeig mir doch mal bitte den code, der auch noch verdeckt ist, ich denke, du hast nur eine klammer vergessen.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Zitat


    Ich verstehe bei deinem Script „./inc/“ nicht.


    Ich pack Dateien, die nur per inlcude aufgerufen werden, gerne in einen eigenen Ordner, der Übersichtlichkeit halber.
    Wenn du alles im Root liegen hast, nimm das inc einfach raus.

    Gruß,
    Jojo


  • wenn du einen array verwendest um mögliche dateien zu includen musst du nicht überprüfen ob diese existieren. oder ../ enthalten.

    nur ob der array key existiert isset($dateien[$site])...

    der erste array, da verwendest du array{... anstatt array(...
    dazu komische anführungszeichen beim wert.
    in der if(...) ist eine Klammer zu viel offen.

    P.S. wenn du bei einem if nur eine aktion ausführen willst kannst du die { nd } auch weglassen.

  • hallo ::RMB::,

    vielen Dank für deine Mitarbeit,

    1.- ich habe das komische Anführungszeichen ersetzt und auch die Klammer korrigiert. Es sieht jetzt ein bisschen besser aus, aber eben nur ein bisschen.
    Der Code nach der if-Abfrage ist immer noch rot. ( --> siehe Attachment )

    2.- kann ich auch gerne dein Script einbauen, nur weiss ich nicht, was ich da, wie anpassen soll. ( nochmal zur Info die Dateien liegen alle im Root )

    Viele Grüße
    empfl

  • uuups :oops: :oops:

    da waren wohl die finger schneller als das hirn^^
    Sorry hab das encaping nicht berücksichtigt :oops:

    Something big is coming. And there will be pirates and ninjas and unicorns...