PHP-Injektion

Über SQL-Injektion spreche ich oft und gerne, weil es eine bedeutende Sicherheitslücke in vielen PHP-Quelltexten ist. Direkt dadurch kam mir auch in den Sinn, dass man auch PHP irgendwie “initieren” kann. Heute habe ich mir deshalb eine einfache Aufgabe gestellt:

Aufgabe: Entführe die GET-Daten und gebe die Variable $passwd_db aus:

<?php
$passwd_db = "MySQL-Passwort-das-ganz-lang-ist";
echo $_GET['hack'];
?>

1.Schritt: Verhalten dokumentieren. Ich habe eine Ergebnistabelle erstellt, um die Lösung schneller zu finden:

Aufruf: Ergebnis:
?hack="; echo $passwd_db; echo " "; echo $passwd_db; echo "
?hack=echo $passwd_db; echo $passwd_db;
?hack=<?php echo $passwd_db; ?>
?hack=$passwd_db $passwd_db
?hack=<?php echo "true"; ?>

2.Schritt: Parser. Um jetzt nicht einfach darauf los zu testen, habe ich mich gefragt, durch welche das Skript läuft:

HTML: sinnlos
CSS: sinnlos
PHP: unbekannt; erst starten? schon aktiv?

Wird der Text einfach ersetzt? Also ?hack=<?php echo "true"; ?> ergibt im Quelltext echo <?php echo "true"; ?>. Das bezweifle ich, weil das sehr unsicher klingt. Also müsste ich bereits innerhalb der Conditional Comments sein.

3.Schritt: Aus Verhalten schlußfolgern.

" wird escaped: “
<?php ?> alles zwischen den CC wird ausgelassen.

Ich komme zu dem Schluß, dass alles zwischen <?php ?> ignoriert wird, da es eine erhebliche Sicherheitslücke wäre. Deshalb hat diese Aufgabe keine Lösung… zum Glück.

PS:
Sehr leicht wäre es mit eval (und sehr kriminell!).

<?php echo eval($_GET['hack']); // Sicherheitslücke eval() ?>
<?php echo htmlspecialchars($_GET['hack']); // Die einfachste Sicherheitsvorkehrung für das obrige Bsp. ?>

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>