htaccess Bypass: Authentifizierungen umgehen

Um Verzeichnisse vor unbefugtem Zugriff zu schützen, werden sehr häufig HTTP-Authentifizierungen genutzt.

Beim Apache Server werden dazu .htaccess Dateien verwendet. Diese beinhalten unter Anderem den Pfad zur Passwortdatei .htpasswd, welche den Benutzernamen sowie das verschlüsselte Passwort (DES oder MD5) enthält.

Solche Authentifizierungen gelten allgemein als sicher, solange ein kryptisches Passwort gewählt wurde, um Brute-Force Attacken zu verhindern.

Es gibt jedoch eine Methode, mit der Angreifer viele solcher Authentifizierungen umgehen können. Darum geht es in diesem Artikel.

htaccess <Limit> Bypass durch Manipulation der HTTP-Methode

Mit der Direktive <Limit> kann angegeben werden, über welche HTTP-Methode die Dateien im angegebenen Verzeichnis geschützt werden sollen.

Meistens wird hier GET bzw. GET und POST angegeben. Wird ein Verzeichnis über den Browser per URL aufgerufen, sendet der Browser ein GET-Request an den Webserver. Ist in der <Limit> Direktive GET als HTTP-Methode angegeben, wird der Zugriff verweigert und man wird zur Eingabe der Logindaten aufgefordert. Manchmal soll auch das Absenden von Formularen nur bestimmten Usern vorbehalten werden - in solchen Fällen würde hier POST als HTTP-Methode angegeben werden.

Was passiert aber, wenn Dateien im geschützten Verzeichnis mit einer anderen HTTP-Methode aufgerufen werden?

Folgende HTTP-Methoden sind im RFC 2616 (HTTP 1.1) spezifiziert:

  • GET
  • POST
  • HEAD
  • PUT
  • DELETE
  • TRACE
  • OPTIONS
  • CONNECT

Die HTTP-Methode OPTIONS liefert eine Liste von Methoden, die vom Server unterstützt werden. HTTP-Methoden kann man mit diversen Browser-Addons ändern oder z. B. per Telnet / SSH Verbindung selbst festlegen.

Ich verwende in den folgenden Beispielen das Firefox Addon Live HTTP Headers.

HTTP-Methoden

Angreifer können dies ausnutzen und durch Manipulation der HTTP-Methode auf Dateien in einem htaccess-geschützten Verzeichnis zugreifen.

Die <Limit> Direktive wird erstaunlich oft verwendet - bei der Google-Suche nach "htaccess generator" ist das bei dem ersten Ergebnis schon der Fall.

Proof-Of-Concept

Hier nun ein Praxisbeispiel.

Das zu schützende Verzeichnis "secret" befindet sich hier: /home/www/secret/

In diesem Verzeichnis liegt eine geheime Textdatei "geheim.txt", welche Passwörter enthält und eine PHP Datei "backup.php", mit der ein vollständiges DB Backup heruntergeladen werden kann. Und natürlich die Dateien zur Authentifizierung.

.htaccess

AuthUserFile /home/www/secret/.htpasswd
AuthGroupFile /dev/null
AuthName "No Access"
AuthType Basic
<Limit GET>
require valid-user
</Limit>

.htpasswd

Admin:eI0E7d3r2XVWU

Ruft man das Verzeichnis "secret" per URL im Browser auf, wird man aufgefordert die Logindaten einzugeben.

Da in der <Limit> Direktive nur GET angegeben wurde, können Angreifer die Authentifizierung umgehen, indem sie die HTTP-Methode einfach in POST ändern.

Im folgenden Beispiel wird die Datei "secret.txt" per POST-Methode aufgerufen. Der Inhalt der Datei wird vom Server "freundlicherweise" zurückgeliefert.

htaccess Bypass via POST-Methode

Würde man das selbe nun mit der "backup.php" machen, könnte ein vollständiges Backup der DB heruntergeladen werden.

Nochmal zum Verständis: In diesem Beispiel wurde das Verzeichnis "secret" nur für den Zugriff per GET-Methode geschützt. Durch Änderung der HTTP-Methode in POST konnte somit die Authentifizierung umgangen werden.

Gegenmaßnahmen

Eine Gegenmaßnahme ist ganz einfach: Die <Limit> Direktive nicht verwenden.

Falls man doch mal, aus welchen Gründen auch immer, ein Zugriff über eine bestimmte HTTP-Methode erlauben will, sollte man zu der <LimitExcept> Direktive zurückgreifen. Hier wird bei jeder HTTP-Methode der Zugriff verweigert, außer bei der in der <LimitExcept> Direktive angegebenen.

Dir hat der Artikel gefallen? Dann abonniere doch einfach den RSS-Feed, damit du immer auf dem Laufenden bleibst und über neue Einträge kostenlos informiert wirst.

Diesen Artikel weiterempfehlen:
TwitterFacebookDeliciousTechnoratiMister WongWikio

4 Reaktionen zu “htaccess Bypass: Authentifizierungen umgehen”

Kommentare (2)

1Frage kommentierte am 16. Dezember 2009 um 10:36 Uhr

Soweit ersteinmal sehr interessant.

Wollte das ganze jetzt mal an meiner eigenen HP testen doch ich scheiter daran das Live HTTP Replay fenster zu öffnen !

Autor

2Maik kommentierte am 16. Dezember 2009 um 15:38 Uhr

Hi,

zuerst musst du Live HTTP Headers starten (Extras > Live HTTP headers) und sicherstellen, dass die Option “Mitschneiden” aktiviert ist.

Danach einfach die Seite im Browser neuladen, wo die Authentifizierung ist. Im Live HTTP headers Fenster scrollst du dann hoch, klickst einmal auf die URL und dann auf “Wiederholen…” – dann erscheint das Live HTTP Replay Fenster.

Falls noch irgendwas unklar ist, einfach bescheid sagen.
Dann mach ich ein kurzes Video darüber ;-)

Kommentar hinterlassen