PHP Sicherheitslücke im Loginskript ???

Dieses Thema im Forum "Programmieren" wurde erstellt von FeeJai, 7. Dezember 2003.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. FeeJai

    FeeJai Guest

    Hi! Ich hab für unsere Homepage folgendes Skript für PHP zur Passwortüberprüfung geschrieben (Auszug):

    PHP:
    if (!$_POST[name] && $_GET[name] ) {
        
    mail("Felix.Jankowski@web.de""Possible breakin attempt/1"$_SERVER['REMOTE_ADDR']);
     
    /*   echo "Security violation, admin has been alerted. Your IP is: $_SERVER['REMOTE_ADDR'] Unix-Time: ". time(); */
         
    fwrite($datei"2\n##########\n");
        exit;
     }

     
    //2
      
    $urlRegEx =
         
    "/^" .
         
    "([0-9a-zA-Z-])*" .  // hostname and subdomains
         
    "$/";
       if (
    preg_match($urlRegEx$_POST[name])) {
     }  else {
         
    mail("Felix.Jankowski@web.de""Possible breakin attempt/2"$_SERVER['REMOTE_ADDR']. $_POST[name]\n $_POST[password]\n "time());
         echo 
    "Security violation, admin has been alerted. Your IP is:"$_SERVER['REMOTE_ADDR']. " Unix-Time: "time();
             
    fwrite($datei"2\n##########\n");
         exit;
     }

       if (
    preg_match($urlRegEx$_POST[password])) {
     }  else {
         
    mail("Felix.Jankowski@web.de""Possible breakin attempt/3"$_SERVER['REMOTE_ADDR']. $_POST[name]\n $_POST[password]\n "time());
         echo 
    "Security violation, admin has been alerted. Your IP is:"$_SERVER['REMOTE_ADDR']. " Unix-Time: "time();
             
    fwrite($datei"2\n##########\n");
         exit;
     }

    //3
    $_POST[name] = strtolower($_POST[name]);

     
    $sql 'SELECT * FROM `users`';
     
    $result mysql_query($sql);

    while(
    $name mysql_fetch_object($result)) {
    if (
    strtolower($name->name) ==  $_POST[name]) { break; }
    }
    if(
    $name == "") { echo "Benutzername falsch!"fwrite($datei"1\n##########\n"); exit(); }

     
    $sql 'SELECT * FROM `users` WHERE  `name` = \'. $_POST[name]. '\';
     $result = mysql_query($sql);

     if(mysql_num_rows($result) <> 1) {
        echo "Benutzername falsch!";
        fwrite($datei, "2\n##########\n");
        exit;
        }

    echo    "<body bgcolor=\"$bgcolor\"><font color=\"$fontcolor\" size=\"+1\" FACE=\"Arial Narrow,sans-serif\">Nickname: " .mysql_result($result, 0, 0). "<br>\n".
        "Vorname: " .mysql_result($result, 0, 2). "<br>\n".
        "Nachname: " .mysql_result($result, 0, 1). "<br>\n".
        "Email: " .mysql_result($result, 0, 3). "<br>\n".
        "Passwort: ";

    $_POST[password] = strtolower($_POST[password]);

    #if($_POST[password] == mysql_result($result, 0, 4) OR $_POST[password] == crypt("CR",mysql_result($result, 0, 4))) {
    if($_POST[password] == mysql_result($result, 0, 4) OR crypt($_POST[password], "CR") == mysql_result($result, 0, 4)) {
        echo     "richtig <br>";
        fwrite($datei, "0\n##########\n");
    } else {
        echo "falsch";
        fwrite($datei, "1\n##########\n");
        exit();
    }
    fclose($datei);

    $status=mysql_result($result, 0, 5);

    if($status == "1") {
        echo "Status: User";
    } elseif($status == "0") {
        echo "Account wurde bereits hinzugefügt, aber noch nicht aktiviert, oder deaktiviert, um die E-Mail-Adresse zu überprüfen. Klicken Sie <a href=\"loginskript.php?session=sendmail&nick=". mysql_result($result, 0, 0). "\">hier</a> um die E-Mail erneut anzufordern";
        exit();
    } elseif($status == "2") {
        echo "Status: VIP";
    } elseif($status == "3") {
        echo "Status: Administrator";
    } elseif($status == "4") {
            $sql = '
    SELECT FROM `blockedWHERE  `name` = \'. $_POST[name]. '\';
            $result = mysql_query($sql);
        echo "Account wurde von ". mysql_result($result, 0, 4) ." bis zum ". mysql_result($result, 0, 1) .".". mysql_result($result, 0, 2) .".". mysql_result($result, 0, 3) ." wegen (groben) Fehlverhaltens gesperrt!";
        exit();
    } elseif($status == "5") {
        echo "Account wurde von einem Administrator bis auf weiteres gesperrt! Für Gründe bite wenden an: <a href=\"mailto:$kontaktmail\">$kontakt</a>";
        exit();
    } else {
    exit();
    }


     $sql = '
    DELETE FROM `loginWHERE `usr` = \'. $_POST[name]. '\';';
     
    $result mysql_query($sql);
     
    $sql 'DELETE FROM `login` WHERE `ip` = \'. $_SERVER[REMOTE_ADDR]. '\';';
     
    $result mysql_query($sql);

     
    $sql 'SELECT * FROM `users` WHERE  `name` = \'. $_POST[name]. '\';';
     
    $result mysql_query($sql);

        
    $EXPIRE time() + 60*15;
        
    $BROWSER addslashes(substr($_SERVER[HTTP_USER_AGENT],-50));

     
    $sql 'INSERT INTO `login` ( `usr` , `expire` , `ip` , `browser` , `status` ) VALUES ( \' .mysql_result($result, 0, 0). '\', \'. $EXPIRE. '\', \'. $_SERVER[REMOTE_ADDR] .'\', \'. $BROWSER. '\', \'. mysql_result($result, 0, 5). '\' );';
     
    $result mysql_query($sql)  or DIE("MYSQL FEHLER!!");


    if(
    $debugmode <> 1) {

     
    #echo "<body onload=\"javascript:top.location.href = './$nextpage'\">"; }
    echo "<head>
    <script language=\"JavaScript\">

    function neu() {

    location.href = \"
    $nextpage\";
    setTimeout(\"neu()\", 
    $redirtime);

    }

    </script>
    </head>
    <body onload=\"setTimeout('neu()', 
    $redirtime)\">
    "
    ;
    }
    echo    
    "<br><p><a href=\"$nextpage\">Hier</a> gehts weiter";
    Leider hat jemand es geschafft, sich in dieses Skript zu hacken :heul: . Ich habe nach Sicherheitslöchern gesucht und keine gefunden und der typ kommt immer noch rein. Ich hoffe ihr könnt mir helfen, den Fehler zu finden, ich bin am Verzweifeln!!!

    FeeJai
     
  2. whisky

    whisky Ganzes Gigabyte

    Registriert seit:
    1. Oktober 2001
    Beiträge:
    11.014
    Vielleicht hat er einfach ein Passwort erraten wenn er dich kennt
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen