Ankündigung

Einklappen
Keine Ankündigung bisher.

If Statement manipulieren (Login)

Einklappen

Neue Werbung 2019

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

  • If Statement manipulieren (Login)

    Hallo,

    ist es möglich eine einfache Passwortabfrage durch die Nutzereingabe zu manipulieren? Ähnlich wie bei SQL Injections?

    Hier ein Beispiel:

    PHP-Code:
    if($_GET["password"] == 'passwort')
    {
        
    $_SESSION["user"] = true


  • #2
    So nicht - außer ich kenne natürlich deinen Code oder schaffe es, den Server dazu zu bringen, PHP als Text auszuliefen (DDoS, andere Sicherheitslücken im Server)

    Kommentar


    • #3
      Also das ist eigentlich schon alles. Es wird dann halt nur noch geprüft ob die Session gesetzt ist.

      Sicherheitslücken am Server lassen wir mal vorweg. Geht nur um den Code.

      Kommentar


      • #4
        Anmerkung:
        Wo es geht, sollten keine typeschwachen Stringvergleiche benutzt werden.

        Das modifizierte obige Beispiel:
        PHP-Code:
        if($_GET["password"] == '0x1')
        {
            
        $_SESSION["user"] = true

        macht einen erfolgreiches Login auch wenn nur eine '1' eingegeben wird. Ein typestrenger Vergleich === unterbindet das.

        -> Fallstricke bei typeschwachen Stringvergleichen

        LG jspit

        Kommentar


        • #5
          Besser: Passwort beidseitig hashen. Dann bringt auch der ausgelieferte Code nicht (wirklich) viel.

          Kommentar


          • #6
            Anmerkung:
            Wo es geht, sollten keine typeschwachen Stringvergleiche benutzt werden.

            Das modifizierte obige Beispiel:
            PHP-Code:
            if($_GET["password"] == '0x1')
            {
            $_SESSION["user"] = true;
            }
            macht einen erfolgreiches Login auch wenn nur eine '1' eingegeben wird. Ein typestrenger Vergleich === unterbindet das.

            -> Fallstricke bei typeschwachen Stringvergleichen

            LG jspit
            Danke für den Hinweis!

            Besser: Passwort beidseitig hashen. Dann bringt auch der ausgelieferte Code nicht (wirklich) viel.
            Wie ist das gemeint?

            An Anlehnung an SQL Injections - warum würde folgendes nicht funktionieren:
            Usereingabe: 1==1 || 1
            Wie wird hier die Manipulation verhindert?
            PHP-Code:
            if($_GET["password"] == 'password'

                
            $_SESSION["user"] = true;  

            Kommentar


            • #7
              Zitat von _snake Beitrag anzeigen
              warum würde folgendes nicht funktionieren:
              Usereingabe: 1==1 || 1
              Weil im Code dann effektiv folgendes steht:

              PHP-Code:
              if('1==1 || 1' == 'password'

                  
              $_SESSION["user"] = true;  

              was offensichtlich "false" ergibt.

              Bei SQL-Injection mit folgendem Code:

              PHP-Code:
              $query 'SELECT username FROM users WHERE username = "' $_GET['username'] . '" AND password = "' md5($_GET['password']) . '"'
              und der Eingabe " or 1 = 1 --

              Dann folgendes steht:

              PHP-Code:
              $query 'SELECT username FROM users WHERE username = "" OR 1 = 1 --" AND password = "' md5($_GET['password']) . '"'
              Und, da -- einen Kommentar in SQL anfängt, der rest des queries auskommentiert ist, und 1 = 1 immer "true" ergibt, man den SQL string ausgetrickst hat. Die Datenbank führt dann nämlich lediglich den Teil

              Code:
              SELECT username FROM users WHERE username = "" OR 1 = 1
              aus. Und schon bin ich eingeloggt.

              Kommentar


              • #8
                Weil kein Kontextwechsel stattfindet.

                Kommentar


                • #9
                  @snake: Infos/Lesestoff dazu (Kontextwechsel, Injection, etc..): http://php-de.github.io/#security

                  Kommentar

                  Lädt...
                  X