Der eingeflößte Code II

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

exploit.c
char links[] =
   "\xff\xbe\xf7\xd0" /* %fp: unchanged */
   "\xff\xbe\xf6\xe4" /* %i7: start address of name buffer */
;

*Hauptproblem: Wo ist die Startadresse des Buffers? Diese muß dem Angreifer zuvor bereits bekannt sein, um die gesicherte Kopie von %i7 entsprechend überschreiben zu können.
 
*Winzigste Abweichungen (anderer C-Compiler, andere Übersetzungsoptionen, andere Bibliotheken, anderes Solaris-Release) führen zu nicht unbedeutenden Änderungen dieser Adresse.
 
*Die nop-Operationen (no operation) erhöhen etwas die Toleranz beim ``Treffen''.
 
*Nächstes Problem: Wie kann relativ zum Code adressiert werden? Lösung: Nach der call-Operation zeigt das Register %o7 genau auf diese.
 
*Hinweis: Der SPARC-Prozessor ist eine Drei-Adreß-Maschine, bei der zuerst die Operanden und dann das Ziel angegeben wird.
 
*Danach findet die Vorbereitung des exec-Systemaufrufs statt: %o0, der auf den Pfad des auszuführenden Programmes zeigt, ist der erste Parameter. Hier: ``/bin/sh''.
 
*Der zweite Parameter in %o1 zeigt auf den argv[]-Vektor, der aus ``/bin/sh'', ``-c'' und dem aufzurufenden Kommando besteht, das unmittelbar hinter dem Code abgelegt wird.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]
Copyright © 2002,2003 Andreas F. Borchert, in HTML konvertiert am 11.02.2003