Include-Attacke

Diese Attacke wird auch als Remote-Code-Injection bezeichnet.

Ein Front-Controller wird verwendet, um nach einigen Checks zu Beginn weitere Skripte aufzurufen. Dies ist ein gutes Vorgehen, muss beispielsweise vor der Auslieferung des gesamten dahinterstehenden Webs ein Einloggen des Benutzers erzwungen werden. Das Einloggen wird mit Hilfe des Front-Controller-PHP-Skriptes erzwungen, während die eigentlichen Aktionen in weiteren PHP-Skripts stattfinden, an die dieses Skript delegiert. So könnte die PHP-Datei index.php eines Front-Controllers wie folgt aussehen:

Die URL des Aufrufes des Front-Controllers kann daraufhin wie folgt aussehen: http://testserver/index.php?aktion=datensatz_bearbeiten.

Die Möglichkeit der Attacke springt nicht sofort ins Auge. Allerdings ist es hier möglich, die Aktions-Variable, welche in der URL enthalten ist, zu verändern. Das wäre noch nicht so schlimm, da die Aktionen entsprechend vorhanden sind und der Benutzer dann nur Aktionen ausführt, die er auch ausführen darf. Allerdings akzeptiert die Variable include eine Navigation durch das Dateisystem oder auch URLs. Das bedeutet, dass mit Hilfe des include()-Statements auf eine externe Seite zugegriffen wird, dort ein PHP-Skript heruntergeladen und dieses im lokalen Kontext ausgeführt. Somit kann der Angreifer alle möglichen Anweisungen auf dem angegriffenen Webserver ausführen.

Dies kann verhindert werden, indem eine Liste von erlaubten Aktionen in das Front-Controller-PHP-Skript hinterlegt wird. Nur erlaubte Aktionen werden mit include() eingebunden und abgearbeitet. Eine andere Möglichkeit wäre, die Variable aktion sehr strikt zu kontrollieren und beispielsweise nur kleine Buchstaben zuzulassen . Somit kann der Hacker keine externe URL in der Variablen mit einschmuggeln.

Weitere anfällige Funktionen neben include() und require() sind eval(), exec() und system() sowie preg_replace() mit /e-Patternmodifizierer wie auch create_function(). Solche Funktionen sollten tunlichst nicht verwendet werden. Mit Hilfe von allow_url_fopen = Off in der php.ini kann zusätzlich verboten werden, dass externer Code heruntergeladen wird, indem durch diesen Schalter externe Downloads unterbunden werden. Mit Hilfe von escapeshellcmd() lassen sich Shell-Kommandos escapen. Mit Hilfe von escapeshellargs() gelingt dies auch für die Argumente, so dass manipulierte Daten, die hier als Strings eingesetzt werden, das System nicht beschädigen können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert