Der Authentifizierungsprozess ist manchmal nicht sicher implementiert. Beispielsweise kann es sein, dass die Authentifizierung im Header erfolgt und leicht ausgelesen werden kann:
Authorization: Basic base64(username:password)
Username Enumeration
Um Usernamen zu erlangen gibt es drei verschiedene Möglichkeiten. 1. Status Codes ändern sich, wenn der Username falsch ist. 2. Die Fehlernachrichten unterscheiden sich abhängig von einem falschen oder richtigen Nutzernamen. 3. Die Anfragedauer ist unterschiedlich. Dies kann beispielsweise auftreten, wenn geprüft wird, ob der Username existiert. Erst wenn dies korrekt ist wird das Passwort geprüft. Aufgrund dieser Implementierung dauert es länger einen validen User zu überprüfen. Dies funktioniert noch besser bei sehr langen Passwörtern.
Fehlerhafte Brute Force Implementierung
Um vor brute Force Attacken zu schützen ist es möglich eine IP zu sperren. Hierbei ist es manchmal so implementiert, dass ein gültiger Anmeldeversuch die fehlgeschlagenen resettet. Desweiteren ist es möglich durch den BruteForce Schutz gültige Usernamen zu enummerieren.
User rate limiting
Es ist auch möglich ein user rate limiting zu haben, bei diesem werden IPs nach fehlerhaften Versuchen geblockt.
Ein entblocken erfolgt durch eine der folgenden Methoden:
1. Automatisch nach einer bestimmten Zeit
2. Manuell durch einen Administrator
3. Manuell durch ein Captcha
Dies kann durch das spoofen der IP Adresse umgangen werden.
Zudem ist es auch möglich mehrere Passwörter in einem einzigen Request zu schicken um die Versuche zu erhöhen, wenn das limit auf http requests liegt.
Mit httpx sollte es möglich sein HTTP2 Multiplexing zu benutzen und mehrere Anmeldeversuche in einem Request auszuführen.
Auch ist es möglich falls die Werte als JSON übertragen werden dies auszunutzen um mehrere Passwörter auszuprobieren:
json
{"username":"user","password":["pass1","pass2"]}
Authentication vs Authorization
Bei der Authentifizierung wird verifiziert, dass der User wirklich der ist der er vorgibt zu sein. Bei der Autorisierung wird überprüft, ob der Nutzer wirklich die nötigen Rechte hat um eine Aktion auszuführen
multi-factor
Muss der Nutzer ein Passwort eingeben und erst dann den zweiten Faktor, befindet er sich bereits in einem eingeloggten Zustand. Hier kann die Implementierung des zweiten Faktors nicht korrekt sein, sodass es möglich sein kann, einfach die gewünschte Website aufzurufen, ohne den zweiten Faktor einzugeben.
Fehlerhafte zwei Faktor Logik
⛔ Labor trotz Lösungen nicht geschafft Manchmal ist es möglich nach dem der erste Anmeldeschritt abgeschlossen ist, die Website nicht richtig verifiziert, welcher Nutzer sich bei dem zweiten Faktor anmeldet. So ist es möglich den zweiten Faktor eines anderen Users zu erraten, ohne dessen Passwort zu kennen.
Brute Forcing 2FA
Gibt es keinen guten Brute Force Schutz gegen 2FA. Beispielsweise das ausloggen eines users, falls der 2FA Code zu viele male falsch ist, kann ein Angriff dagegen gestartet werden. create Zap Script for multistep 2fa brute force
Eingeloggt bleiben
Das eingeloggt feature speichert einen Cookie persistent. Dadurch ist es möglich, dass der Nutzer selbst nach einem schließen des Browsers eingeloggt bleibt. Manche Websites erstellen dieses Cookie auf vorhersagbare Weise. Dies wird dann beispielsweise basierend auf den Usernamen und dem Zeitstempel erstellt werden.
Passwort Reset
Es ist möglich den Passwort resett für einen Nutzer durchzuführen, wenn der Nutzername im Link angegeben ist. Es ist auch möglich, die Rücksetzungsanfrage nochmal zu schicken für einen anderen Nutzer, wenn das Token nicht richtig validiert wird.
Passwortänderungsfunktion
Nutzern wird oft die Möglichkeit gegeben ihr Passwort zu ändern, ist es möglich dies zu exploiten, wenn es einem Angreifer möglich ist auf diese Seite direkt zuzugreifen. Dadurch sind dann beispielsweise username enumeration oder Passwort Brute Force Angriffe möglich.
patator http_fuzz url=https://0a6100460473e9ba81b09e50008400a2.web-security-academy.net/login method=POST accept_cookie=1 -x ignore,retry:code=400 body='username=FILE0&password=FILE1' 0=cpass.txt 1=Dokumente/Hacking/Labor/passwords.txt -x ignore:fgrep='Your username is: wiener',fgrep='Invalid username',fgrep='Incorrect password' -x retry:fgrep='You have made too many incorrect login attempts. Please try again in 1 minute(s).'