Gehaxelts Blog

IT-Security & Hacking

Die Gefährlichkeit von Variablenfunktionen in PHP

Gestern las ich in meinem schlauen PHP-Buch, dass es möglich ist, in eine Variable einen String zu speichern, und diesen dann als Funktion aufzurufen.

Nun ist diese Sache ganz nett, kann aber zu einem Sicherheitsrisiko werden.

Ein Beispielcode sieht folgendermaßen aus, bei dem die Variablenfunktion ordnungsgemäß funktioniert:

function myecho() {
    echo "Variablenfunktion ausgefuehrt";
}

$function="myecho";

$function();

Man fügt an die zuvor definierte Variable einfach die Klammern an, und die Funktion wird daraufhin aufgerufen.

Ausgenutzt werden könnte, das bei einem solchen Quelltext:

<?php
    function myecho() {
        echo "Funktion aufgerufen";
    }

    $function=$_GET['func'];

    $function();
?>

Dabei wird der String des GET-Parameters “func” in der Variable $function abgelegt und dann als Funktion aufgerufen. Dies führt zu einem Problem, wenn ein potentieller Angreifer folgende URL aufrufen würde:

function.php?func=phpinfo

Dann wird der String “phpinfo” in die Variable abgelegt und anschließend ausgeführt, da diese Funktion in PHP zum Ausgeben sensibler Daten über den Webserver existiert.

Deswegen ist es wichtig, sich gegen solche Angriffe zu schützen, in dem man z.B. ein Switch nutzt, um nur bestimmte Funktionen ausführen zu lassen. Der Code würde dann folgendermaßen aussehen:

<?php
    function myecho() {
        echo "Funktion aufgerufen";
    }

    switch($_GET['func']) {
        case "myecho":
            $function="myecho";
            break;
        default:
            $function="myecho";
    }

    $function();
?>

Gruß

gehaxelt

Security

« Fanseite auf Facebook [Video] Variablenfunktionen in PHP »