--------------------------------Linux Guide----------------------------------
by Ingo Blechschmidt (c) 2002
-----------------------------------------------------------------------------
------------------------- Perl-Sicherheitslücken decken
------------------------- Fre Jun 22 15:20:00 MEST 2001
------------------------- Perl Sicherheitslücke Angreifer ausfiltern erlaubt system() exec()
-----------------------------------------------------------------------------
Perl kann fast alles. Gerade deshalb hat es auch einige
Sicherheitslücken, von denen dieser Artikel zwei decken will.
-----------------------------------------------------------------------------
* Der system()- bzw. exec()-Aufruf.
Angenommen, das
Perl-Skript fragt den Benutzer nach einem Namen, welcher dann
(umständlich) mittels von system("echo $Name")
ausgegeben werden soll. Wenn der Benutzer als $Name
| rm -rf / eingibt, werden (Superuser-Rechte vorrausgesetzt) alle
Dateien abfragslos gelöscht. Besser:
--------CODE--------: system()
system("/bin/echo", $Name);
--------/CODE--------
Nun werden etwaige Metazeichen nicht mehr ersetzt.
* 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, %2E als Punkt zu benutzen. Oder man
könnte die Shell-Metazeichen ausnutzen (| rm -rf /*).
Besser ist es, nur die erlaubten Zeichen durchzulassen, alle anderen
auszufiltern:
--------CODE--------: ../
{ print "Nice try"; exit; } unless ($eingabe =~
/[a-zA-Z0-9,.äüöÄÖÜ]/);
--------/CODE--------
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
This document is distributed under the terms of the GNU Free Documentation
License.