Name="Perl-Sicherheitslücken decken" Stich="Perl Sicherheitslücke Angreifer ausfiltern erlaubt system() exec()" Zeit="Fre Jun 22 15:20:00 MEST 2001" Kurz="Perl kann fast alles. Gerade deshalb hat es auch einige Sicherheitslücken, von denen dieser Artikel zwei decken will." Lang="
  1. Der$esCodes system()$esCodee- bzw.$esCodes exec()$esCodee-Aufruf. Angenommen, das Perl-Skript fragt den Benutzer nach einem Namen, welcher dann (umständlich) mittels von$esCodes system("echo \$Name") ausgegeben werden soll. Wenn der Benutzer als$esCodes \$Name$esCodee$esCodes | rm -rf /$esCodee eingibt, werden (Superuser-Rechte vorrausgesetzt) alle Dateien abfragslos gelöscht. Besser: `exCodes system\(\)` system("/bin/echo", \$Name); `exCodee` Nun werden etwaige Metazeichen nicht mehr ersetzt.
  2. Um den bekannten ../-Trick ( bsp. http://www.sourceforge.net/../../../../etc/passwd - die Anzahl der dotdotslashes hängt vom Server ab) abzuwehren, ist es unratsam, nur die Slashes bzw. Punkte auszufiltern. Es bleit dann nähmlich noch die Möglichkeit,$esCodes %2E$esCodee als Punkt zu benutzen. Oder man könnte die Shell-Metazeichen ausnutzen (${esCodes}| rm -rf /*$esCodee). Besser ist es, nur die erlaubten Zeichen durchzulassen, alle anderen auszufiltern: `exCodes ../` { print "Nice try"; exit; } unless (\$eingabe =~ /[a-zA-Z0-9,.äüöÄÖÜ]/); `exCodee`
" case $1 in Name) echo $Name; exit;; Stich) echo $Stich; exit;; Zeit) echo $Zeit; exit;; Kurz) echo $Kurz; exit;; Lang) echo $Lang; exit;; esac # if [ "$1" = "Name" ]; then echo $Name; fi mself_vA="txt/0031.txt txt/0039.txt txt/0023.txt txt/0049.txt txt/0051.txt txt/0053.txt txt/0089.txt"