Willkommen in der Webstatt Zum Webstatt Blog und Stories
Christian am 05.08.06 10:32

Seas,

wollte nur mal eben fragen obs für dieses kleine Kiddie Script irgendwelche bedenklichen Sicherheitsprobleme gibt


$inc_dir = "inc/";
$file_end = ".inc.php";
$default_include = "inc/projekt.inc.php";

$toinclude = $inc_dir . $_GET['go'] . $file_end;

if(isset($_GET['go']) && file_exists($toinclude)){
include($toinclude);
} else {
include($default_include);
}


Is für ne Hp mit mal 15 Seiten oder so

netcup.de Warum gibt es hier Werbung?
milahu milahu am 05.08.06 10:45

Sollte nicht, da du ja "inc/" voranstellst und somit schonmal verhinderst, dass eine URL eingebunden wird..

Christian am 05.08.06 11:01

wunderbar

bin doch ned so blöd wie ich dachte ^^

dookie dookie am 06.08.06 16:22

Es muss aber nicht immer eine externe Seite eingebunden werden. Dies ist meistens sowieso von der php.ini deaktiviert. Aber was ist wenn jemand ../config.ini%00 oder ähnliches eingibt. Dann gibst du deine Config Datei aus. Besser ist es eine Whitelist zu führen, und dann die eingabe mit der Whitelist zu vergleichen. Die Whitelist kannst du ja trotzdem dynamisch anlegen (glob() hilft dir hier weiter).

der_nic der_nic am 06.08.06 17:46

aber in seinem Fall wird ja auch die Endung ".inc.php" vorgegeben! So kann man eigendlich nie auf die Config zugreifen oder?

Snake am 06.08.06 17:59

du könntest auch überprüfen, ob der dirname von $toinclude wirklich zu dirname(__FILE__ ).'/inc' passt.
dann kannst du dir sicher sein, dass der user dich nicht in en anderen ordner gelockt hat


//edit:
oder du filtest gleich mittels basename alle pfadangaben aus der user eingabe

dookie dookie am 06.08.06 20:10

Quote
Original von der_nic
aber in seinem Fall wird ja auch die Endung ".inc.php" vorgegeben! So kann man eigendlich nie auf die Config zugreifen oder?

Falsch. Du hast wohl die %00 an meiner Beispieleingabe übersehen. Das ist eine Binäre Null. Eine Binäre Null schliest jeden String ab, und so fällt das .inc.php unter den Tisch.

milahu milahu am 06.08.06 21:11

Mhh, also Verzeichnis wechseln mit ".." geht, aber den Trick mit dem Nullbyte konnte ich nicht
reproduzieren.. mein Skriptaufruf: ?go=../blubb.php%00

dookie dookie am 06.08.06 23:28

Evtl hattest du Magic Quotes GPC o.ä. an, welche das Nullbyte "entschärfen", aber ansonsten funktioniert das prima ;)

yannick@netdirekt:~$ php -f test.php
<?php
readfile(__FILE__);
$querystr = "../config.ini\x00";
include 'foo/'.$querystr.'.inc.php';
?>
Warning: include(foo/../config.ini): failed to open stream: No such file or directory in /home/yannick/test.php on line 4

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt