| (In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene. |
Diskussion: Verständnisfrage Bufferoverflows im Forum (In)security allgemein, in der Kategorie Security Area; Guten Tag zusammen, ich habe am Montag eine mündliche Prüfung in der Uni und dazu eine Frage zum Thema Buffer ...
![]() |
| | #1 (permalink) |
| Guten Tag zusammen, ich habe am Montag eine mündliche Prüfung in der Uni und dazu eine Frage zum Thema Buffer Overflows. Ich habe das System so verstanden: Man hat einen Puffer mit Größe N. Nun werden, durch mangelnde Abfrage o.ä., in den Puffer N+1 (oder mehr) Byte geschrieben. Dadurch wird auch die Rücksprungadresse die bei N+1 liegt überschrieben, und zwar mit dem Code der in den Bytes ist, die größer als N sind. Erstmal: Ist das so prinzipiell richtig? Also dass die Rücksprungadresse bei N+1 liegt? Wie kann man dadurch jetzt Schadcode ausführen lassen? Heißt das, dass man in den Puffer seinen Schadcode einpflanzt und bei N+1 die Rücksprungadresse so manipuliert, dass der Schadcode ausgeführt wird? Oder wird von dem Programm aus jeder Code ab N+1 ausgeführt, weil hier ja die Rücksprungadresse liegen soll? Gruß und schönes Wochende | |
| | |
| | #2 (permalink) |
| Also das ganze mal am Beispiel eine stackbasierten overflows Das ganze funktioniert zB beim Aufruf der Funktion strcpy. folgendes Beispiel Code:
#include <stdio.h>
#include <string.h>
void overflow(char *str){
char toSmallBuffer[100];
strcpy(toSmallBuffer, str);
}
int main(){
char toBigBuffer[200];
for(int i = 0; i < 200; ++i)
toBigBuffer[i] = 'A'; // A == 0x41 ...
overflow(toSmallBuffer, toBigBuffer);
return 0;
} beim Aufruf der Funktion overflow wird ein Stackframe erzeugt, der zuerst die Funktionsargumente dann durch call die Returnaddresse auf denn Stack pusht. Jetzt wird eine "Sicherung" des StackFramePointers angelegt.Dann werden noch 100 bytes für toSmallBuffer frei gemacht der Stack sieht jetzt so aus: # REST des Stack # Das Funktionsargument , in diesem Fall ein Zeiger auf Char mit der Adresse von toBigBuffer # Die Rücksprungadresse, welche den EIP auf eine Postion nach dem call von overflow verweist # der Safed Frame Pointer welcher denn denn letzten Wert des FramePointers im letzten Stackframe enthält # Hier ist nun ein Raum von 100 Bytes (toSmallBuffer) # $ESP Wenn nun die 200 bytes in den nur für 100 Byte großen Raum geschrieben werden, wird zuerst der SafedFramePointer dann die Rücksprungadresse überschrieben. In unserem Fall würde die Rücksprung Adresse mit 4x ' A ' überschrieben werden, was den dem wert 0x41414141 entspricht. Jetzt springt der EIP(instruction pointer) an die Adresse und versucht dort die Ausführung des Programms fortzusetzen, leider ist das keine richtige Adresse (meistens) und es kommt zum Segmentation fault. Könnte man aber selbst bestimmen mit was die Rücksprung adresse überschrieben wird, zB wenn toBigBuffer vom Benutzer eingegeben wird, kann man auch den Programmfluss umlenken. Dann kann man die ungefähre Position des Buffers im speicher ausrechnen, und hier seinen Shellcode einfügen. Meistens bekommt man nicht die genaue Adresse deswegen füllt man denn ersten teil des Buffers mit einem NOP-Sled(No Operation == 0x90). Der Buffer sieht jetzt so aus [NOP | Shellcode | RET | ....] Wenn der Wert der Return-Adresse jetzt auf einen Bereich im NOP Sled verweist, springt der Instruction Pointer in den NOPsled(es passiert nicht ..) bis er zum Shellcode kommt, welcher dann ausgeführt wird. Shellcode ist ein Bytecode der Maschienencodeanweisungen enthält und heißt so weil er meist bezweckt eine Shell auszuführen. Das ist alles nur grob grob zusammengefasst , aber dazu gibts wirklich genug Material im Netz. mfg prEs | |
| | |
| HaBOT | |
| |
| | #3 (permalink) |
| Themenstarter | Super, ich danke dir. Jetzt hab ich das System verstanden und kann auch noch mit ein paar Fachbegriffen auftrumpfen :-) Gruß |
| | |
| | #4 (permalink) |
| ^^ Ging aber schnell Freut mich auf jeden Fall wenn ich dir helfen konnte. mfg prEs | |
| | |
| | #5 (permalink) |
| Guest Likes: | Ich finde http://www.w00w00.org/files/articles/heaptut.txt sehr nützlich, da es verschiedene Wege zeigt. Vielleicht verbergen sich da auch noch ein paar Passagen mit den Du auftrumpfen kannst |
|
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Ein paar Fragen zu Bufferoverflows | lone.wolf | Code Kitchen | 4 | 13.04.09 19:35 |
| Verständnisfrage zu md5 | crusaderv83 | Cryptography & Encryption | 16 | 29.08.07 22:31 |
| Bufferoverflows über ein Netzwerk | Hackse | (In)security allgemein | 11 | 27.06.07 23:22 |
| FSB Verständnisfrage bei 8*400Mhz Takt | Ben Q. | Hardware Probleme | 2 | 09.06.07 14:45 |
| Verständnisfrage zum WLAN | Hephaistos | WLAN-Zone | 15 | 13.12.05 14:29 |