Skript + Umgehungsfrage

Alles, was PHP betrifft, kann hier besprochen werden.

Skript + Umgehungsfrage

Postby Komandar » 05. January 2006 01:43

Hi.

Habe folgendes Skript:

Code: Select all
<?php

echo "<pre>\n";

if (ini_get('safe_mode'))
{
    echo "[safe_mode enabled]\n\n";
}
else
{
    echo "[safe_mode disabled]\n\n";
}

if (isset($_GET['dir']))
{
    ls($_GET['dir']);
}
elseif (isset($_GET['file']))
{
    cat($_GET['file']);
}
else
{
    ls('/');
}

echo "</pre>\n";

function ls($dir)
{
    $handle = dir($dir);

    while ($filename = $handle->read())
    {
        $size = filesize("$dir$filename");

        if (is_dir("$dir$filename"))
        {
            if (is_readable("$dir$filename"))
            {
                $line = str_pad($size, 15);
                $line .= "<a href=\"{$_SERVER['PHP_SE LF']}?dir=$dir$filename/\">$filename/</a>";
            }
            else
            {
                $line = str_pad($size, 15);
                $line .= "$filename/";
            }
        }
        else
        {
            if (is_readable("$dir$filename"))
            {
                $line = str_pad($size, 15);
                $line .= "<a href=\"{$_SERVER['PHP_SELF']}?file=$dir$filename\">$filename</a>";
            }
            else
            {
                $line = str_pad($size, 15);
                $line .= $filename;
            }
        }

        echo "$line\n";
    }

    $handle->close();
}

function cat($file)
{
    ob_start();
    readfile($file);
    $contents = ob_get_contents();
    ob_clean();
    echo htmlentities($contents);

    return true;
}

?>


Nun wenn ich das auf mein Lampp-Testsystem mache, zeigt der mir alle Dateien auf dem ganzen PC an, auch die die nicht im /opt/lampp/htdocs/ Ordner sind. Wie kann ich diese Daten nicht anzeigen lassen, sodass (am besten) garkeine Daten durch solch ein Skript angezeigt werden?
Komandar
 
Posts: 33
Joined: 07. July 2005 22:15

Postby Komandar » 06. January 2006 22:38

Es liegt ja anscheinend an LAMPP... hat niemand ne Idee ?
Komandar
 
Posts: 33
Joined: 07. July 2005 22:15

Postby KingCrunch » 06. January 2006 23:17

Ich hab mal ehrlich gesagt keine Lust das Script durchzuarbeiten, deshalb fass mal zusammen, was es eigentlich machen sollte und was das Problem in Bezug zu dessen, was es machen sollte, ist. Danke :)
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Komandar » 06. January 2006 23:52

Das Skript listet einfach alle Ordner/Dateien auf dem Webspace.
Das Problem ist, dass man mittels diesem Skript auf ALLE Dateien zugriff hat.

Normalerweise müsste man doch nur bis zum /htdocs/ Ordner kommen und nicht sein ganzes unwesen auf dem Root treiben können.
Komandar
 
Posts: 33
Joined: 07. July 2005 22:15

Postby KingCrunch » 07. January 2006 12:28

Ist nur ein Grundgedanke, aber du könntest orüfen, ob sich derjenige noch innerhalb des Document-roots befindet und ansonsten entweder garnichts machen (ins Document-Root gehen) oder Fehler werfen oder sowas.

Code: Select all
if (!eregi("^".$_SERVER['DOCUMENT_ROOT'],$dir) { //Fehler
}


unausgereift, aber eben ein Gedanke :)
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Komandar » 14. January 2006 17:33

Ja, aber falls ein User irgendeinen Bug z.B. beim phpBB-Upload entdeckt, kann er diesen Bug ausnutzen um oben genanntes Skript zu schreiben und hat damit dann vollen Zugriff auf den Server.

Und alle Skripts dadrauf anzupassen.... naja... da muss es doch was einfachereres geben :cry: .
Komandar
 
Posts: 33
Joined: 07. July 2005 22:15


Return to PHP

Who is online

Users browsing this forum: No registered users and 54 guests