Der eingeflößte Code II

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

*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.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 2002 Andreas Borchert/Christian Ehrhardt, in HTML konvertiert am 18.06.2002