|
Damit wir flexibel sind, führt der Code
einen exec-Systemaufruf aus, der den angegriffenen
Prozeß durch /bin/bash ersetzt.
| |
Hauptproblem: Wo ist die Startadresse des Buffers?
Diese muß dem Angreifer zuvor bereits bekannt sein,
um die gesicherte Kopie der Rücksprungadresse
überschreiben zu können.
| |
Winzigste Abweichungen (anderer C-Compiler, andere
Übersetzungsoptionen, andere Bibliotheken, andere Version des
Betriebssystems) führen zu nicht unbedeutenden
Änderungen dieser Adresse.
| |
Die nop-Operationen (no operation)
erhöhen etwas die Toleranz beim ``Treffen''.
| |
Der eigentliche Code bereitet die Parameter für
den exec-Aufruf vor. Die Instruktion ``int \$0x80''
führt dann den Systemcall durch.
| |
Problem: Damit fscanf das Einlesen nicht in der Mitte
des Buffers abbricht, muß der ganze Buffer als ein einziger
String erscheinen. Im Assemblercode dürfen daher keine Zeichen
vorkommen, die als Whitespace interpretiert werden.
Dadurch wird der Code ein wenig komplizierter.
| |
Um für die Shell die Rechte der effektiven und nicht der
realen User-ID zu bekommen, wäre vor dem Aufruf von exec noch
der Aufruf von setuid oder setreuid notwendig.
|
Copyright © 2002 Andreas Borchert/Christian Ehrhardt, in HTML konvertiert am 18.06.2002 |