Problem Include

birwac66

Well-known member
ID: 178958
L
20 April 2006
558
17
Ich habe ein problem. Ich habe ein script auf meiner festplatte gefunden.
Hier hab ich denn fehler entdeckt.
Hier der CODE des fehlers:
Code:
$include=$goto . ".php";
if(file_exists("dateien/".$include)==1){
include ("dateien/".$include);
}
else{
if ($user[0]){
include ('dateien/userhome.php');
}else{
include ('dateien/home.php');
}
}
Hier muss was geändert werden, da die datei nicht eingefügt wird.
(Es wird nur immer die Datei dateien/homephp eingefügt. Wenn jedoch efolgendes übergeben wird ?goto=123 wird nicht die seite dateien/123.php eingefügt )
Hatte den richtigen code auch schon jedoch finde ich ihn nicht mehr.
Ich hoffe ihr könnt mir helfen hab schon rumprobiert jedoch keine lösung gefunden. Danke schon mal für eure Hilfe.
 
Versuche es mal lieber so:

PHP:
<?
$goto = str_replace('../','/',$_GET['goto']).'.php';
if (file_exists("dateien/".$goto))
{
	include ("dateien/".$goto);
}
else if ($user[0])
{
	include ('dateien/userhome.php');
}
else
{
	include ('dateien/home.php');
}
?>
 
Sicher ist es nicht. Hast recht. Aber er geht ja unten in Dateien/ rein.

dann wäre ja der Link:

../dateien/xy.php
 
Sicher ist es nicht. Hast recht. Aber er geht ja unten in Dateien/ rein.

dann wäre ja der Link:

../dateien/xy.php

Er geht in 'dateien' rein, dann wäre die includede Datei 'dateien/../owned.php'. Danach kannst du ja wieder einen Ordner hochhüpfen und machen was du willst. Hat er jetzt noch magic-quotes = off (was ja zu empfehlen ist) und sich nicht richtig abgesichert, dann kannst du noch ein Null-Byte einschleusen und den kompletten Dateinamen inkl. Endung bestimmen.

Naja, wenigstens erhalten solche Lösungen die Sicherheitsindustrie am Leben :mrgreen:
 
Klar aber was ist ein Null Byte? Würde mich dafür interessieren und Goolge spuckt nichts darüber heraus. Soweit ich weis, ist Null Byte nichts anderes wie eine Leere Datei. Datei ohne Sektor. Aber das man sowas anhängen kann? Ich frage deshalb, weil es mich interessiert, wie man das ".php" umgehen kann. Ich könnte mir das nur mit einen overflow vorstellen, was aber beim Apache im Request garnicht mehr möglich ist. Ich denke das besonders an file_exists(). Der Anhang ".php" wird im Script (also hinterher) zugegeben. Also wäre mir neu, dass das möglich wäre. Sicher er kann jeder beliebige PHP include lassen. Aber wie er das im Script umgehen wird, ist mir noch nicht klar.
 
Zuletzt bearbeitet:
Klar aber was ist ein Null Byte? Würde mich dafür interessieren und Goolge spuckt nichts darüber heraus.[...]

Ein Null-Byte (0x00) markiert in C das Ende eines Strings. Das '.php' wird dann also gar nicht weiter beachtet.
Wie gesagt, magic_quotes = on escaped das Null-Byte automatisch.

Einige Links dazu (auch wenn ich im Internet noch nichts richtig ergiebiges gefunden habe):
https://en.wikipedia.org/wiki/Null_character
https://www.a-m-i.de/tips/strings/strings.php#basics

Dazu kannst du beispielsweise folgenden Source-Code testen:

PHP:
<?php
$blub = "test.tpl\0"; // Das ist der Userinput

$blubnew = $blub.'.php'; // ... und das der String mit der scheinbaren Endung '.php'

var_dump($blubnew);
include $blubnew;

?>

Ergebnis:

Code:
string(13) "test.tpl 
Warning: include(test.tpl): failed to open stream: No such file or directory in F:\apachefriends\xampp\xampp\htdocs\test\_debug_tmp.php on line 7 
Warning: include(): Failed opening 'test.tpl' for inclusion (include_path='.;C:\php5\pear') in F:\apachefriends\xampp\xampp\htdocs\test\_debug_tmp.php on line 7
 
Em nocheinmal meine Frage.

Wie bekomme ich das ESCAPE Zeichen in den Code (von Außen)?

\0

Im übrigen sehr interessant. Denn im String würde PHP selbst \0 an das Ende hängen. Mit Get geht das nicht. Das hätte ich mir auch denken können. Naja es ist interessant zu wissen. Habe was zu gelernt!
 
Em nocheinmal meine Frage.

Wie bekomme ich das ESCAPE Zeichen in den Code (von Außen)?

Nocheinmal meine Antwort:

Ein Null-Byte (0x00)[...]

0x00 => Hexadezimal => Via GPC im Browser: %00

Im übrigen sehr interessant. Denn im String würde PHP selbst \0 an das Ende hängen. Mit Get geht das nicht.

Das \0 hängt schon C für dich an, das macht PHP nicht.
Du kannst auch ein Null-Byte per Get übermitteln , siehe Bild: