Webstatt.org - Community seit 2006 - 2012 (2024?)

Sicherheitsfrage zu Includescript

user-150
05.08.2006 08: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

Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
Avatar user-255
05.08.2006 08:45

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

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-150
05.08.2006 09:01

wunderbar

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

Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
Avatar user-166
06.08.2006 14: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. user-158n 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).

[ » HesaSys - ein freies, schnelles und flexibles WCMS ]
Avatar user-162
06.08.2006 15:46

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

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
user-303
06.08.2006 15: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

Avatar user-166
06.08.2006 18:10

Original von user-162
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.

[ » HesaSys - ein freies, schnelles und flexibles WCMS ]
Avatar user-255
06.08.2006 19:11

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

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-166
06.08.2006 21:28

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

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

[ » HesaSys - ein freies, schnelles und flexibles WCMS ]