Original von user-300
Hoffie: Ganz so einfach ist es wohl nicht, da eine Code Injection zu machen. PHP escaped die Teile die ersetzt werden ja jeweils noch. Oder kennst du vielleicht ein konkretes Beispiel?
Ich habe ja nichtmal behauptet, dass obiger konkreter Code wirklich exploitbar ist. Es passiert einfach nur verdammt schnell, dass der Code exploitbar wird -- durch irgendeine Mini-Änderung an die man vielleicht nicht denkt.
Besonders lustig finde ich jetzt die Tatsache, dass obiger Code tatsächlich exploitbar ist:
// das sind nur Beispiel-Werte:
$delimiterLe = '\[';
$delimiterRi = '\]';
// Template-Code, auf den eventuell User mit weniger Rechten Einfluss haben:
$tpl = '[include file="{${exit(exploitable)}}"]';
// Code aus dem Original-Post, nur wie vorgeschlagen mit e-Modifier und Variablennamen vereinfacht
$tpl = preg_replace("/".$delimiterLe."include file=\"(.*)(.*)\"".$delimiterRi."/iseU","file_get_contents(\"\\1.\\2\"", $tpl);
echo "code nicht verwundbar";
Ausgabe: exploitable (und nicht: code nicht verwundbar)
Und auch wenn PHP mit addslashes() versucht, das ganze zu entschärfen, kann man damit durchaus beliebigen Code ausführen.
Mit Single-Quotes im Replace-Teil wäre das nicht passiert. Das soll jetzt nicht heißen, dass ich das in Single-Quotes ändern würde, sondern lediglich demonstrieren, wie leicht man mit preg_replace + e-Modifier fatale Fehler basteln kann.