PHP: Sessions stehlen

Dieser Artikel beschreibt nicht, wie man mittels eines Sniffers und/oder einer Man-In-The-Middle-Attacke Daten ausliest und so an die Session herankommt. Dass das bei fremden Daten verboten ist dürfte sowieso klar sein. Hier geht es um schlecht konfigurierte Server und natürlich auch darum, wie man es besser macht.

Sessions

Sessions sind nötig, um Benutzer im Web eindeutig identifizieren zu können. Meist werden sogenannte Session-IDs in Cookieform übertragen, durch die der Server „weiß“, wer gerade mit ihm kommuniziert und welche Daten er z.B. für die Skripte bereitstellen muss. In PHP kommt man mittels der $_SESSION []-Variable an diese Daten.

Rechteproblem

Hat man nun Zugriff auf den Server mit vielen Benutzern, wie es z.B. bei kostenlosen Webhostern üblich ist, so kann dies dazu führen, dass man fremde Sessions stehlen oder entführen kann. Alles was man braucht ist Zugriff auf das Verzeichnis, in dem PHP seine Sessions aufbewahrt. Dieses bekommt man mit session_save_path () heraus. Ist das Verzeichnis lesbar, besitzt also unter Unix-artigen Systemen die Attribute read und execute, so wird man eine Anzahl von Dateien mit dem Namen „sess_“ gefolgt von einem Hash sehen. Dieser Hash ist die Session-ID, an der alles hängt. Diese können wir nun in einem eigenen Skript der Funktion session_id ($sid) gefolgt von einem session_start () übergeben.

Nun sind wir der unrechtmäßige Mitbesitzer dieser Session und können uns mithilfe von print_r ($_SESSION) anschauen, ob Daten hinterlegt sind oder uns, sofern klar ist zu welcher Domain die Session gehört, z.B. in die Rolle eines angemeldeten Forennutzers begeben ohne sein Passwort zu wissen.

Lösungsmöglichkeiten

Man könnte den Zugriff der einzelnen Nutzer mit der php.ini-Einstellung „open_basedir“ beschränken, sodass sie das Verzeichnis, das die Sessions enthält nicht mehr öffnen können. Dabei ist das Verzeichnis aber durch Systemaufrufe wie system () oder passthru () weiterhin lesbar. Diese müssten also auch gesperrt werden.

Alternativ kann man auch allen Benutzern die Leserechte für dieses Verzeichnis entziehen. Dateien mit bekanntem Namen bleiben weiterhin erreichbar, sodass PHP noch auf die Sessions zugreifen und sie erstellen kann, aber ein Auflisten des Verzeichnisinhaltes, wie es ein Angreifer tun müsste, wird so verhindert.


#0006, erstellt: 2008-07-20, aktualisiert: 2008-07-20, src, meta
Start, Impressum, zurück: yooliety.de Partybilder herunterladen, vor: Der tägliche Wahnsinn im Kinderzimmer