Stellen Sie sich eine Spielzeug-PHP-Anwendung vor, die anfällig für absolute lokale Dateieinschlüsse ist, z.Warum funktioniert include ('php: // input') nicht?
<?php include($_GET['action']);
Ich habe versucht, die folgende Anforderung es zu nutzen:
POST /?action=php://input HTTP/1.1
Host: XXXXXXXXXXXXXXXXX
Content-Length: 3
foo
Dies führt effektiv include('php://input');
mit Anfrage Körper foo
, so würde ich erwarten, dass es foo
zu drucken. Allerdings erhalte ich den folgenden Fehler
<br />
<b>Warning</b>: include(php://input): failed to open stream: operation failed in <b>XXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
<br />
<b>Warning</b>: include(): Failed opening 'php://input' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in <b>XXXXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
Was ist das Problem hier? Ist das eine PHP-Sicherheitsfunktion? Wenn ja, kann jemand auf den verantwortlichen Teil des PHP-Quellcodes verweisen, der dies mildert?
Was über benutzerdefinierte Streams? Mit 'stream_wrapper_register' und all dem Jazz? – Halcyon
Überprüfen Sie den Wert dieser Option in Ihrer Konfiguration http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek
@Halcyon Ich höre. Es gibt keine Möglichkeit, dies in einem modernen LAMP-Setup ausnutzbar zu machen, außer wenn Sie ein primitives Dateischreibprogramm haben (wie 'session_start()' oder anwendungsspezifische Protokollierung usw.) –