Exploits mit Buffer



  • Hi,

    ich lerne gerade auf eine Prüfung und hab in einer Altklausur folgende Aufgabe gefunden:

    void cpy(char* t) 
    {
    
    	char buff[1024];
    
    	strcpy(buff, t);
    
    	fprint(buff);
    
    }
    
    int main(int argc, char** argv) {
    
    	if(argc == 1 || strlen(argv[1]) > 1024) {
    
    		fprint("Attack dectected!\n");
    
    		return 1;
    
    	}
    
    	cpy(argv[1]);
    
    	return 0;
    
    }
    

    3.a) Hat ihr Kommilitone recht? Begründen Sie.

    3.b) Erklären Sie was mit den Registern EPB und EIP passieren kann.

    3.c) Wie können Sie das Programm verbessern?

    1. Obwohl Sie den Bufferoverflow behoben haben gibt es immer noch ein Problem.

    4.a) Bereits ein Erstsemester-Student kann das Programm zum Absturz bringen. Wie?

    4.b) Ein MIN-Student kann sogar eigenen Code zur Ausführung bringen. Erklären Sie wie
    .
    4.c) Wie können Sie das Programm weiter verbessern?

    Also ich glaube, dass er ja 1024 bits von t in buff kopiert ohne die "\0" kann das Programm zum Absturz bringen. Und verbessern könnte ichs durch:

    char* buff = (char*) malloc(strlen(t) + 1 ));

    könnte bei 4) der Fehler sein, dass es frprintf ("%s", buff) sein muss?
    Ich weiß, dass eigener Code zur Ausführung kommen kann, wenn ich über den Buffer hinaus die Return Adresse auf meinen String setze und dort Schadende ausführe. Aber in dem gezeigten Programm komme ich doch gar nicht auf die EBP+return Address?

    Wäre für Hilfe dankbar! Würde das gerne verstehen 🙂



  • Ah und ich glaube, die 4er Fragen kann ich mit Format String Attacks beantworten?

    Es muss also fprint("%s", buff) sein?



  • 8.a) Erklären Sie den Unterschied zwischen C und C++

    In C++ würde man es mit std::string verbessern.

    Was auch immer irgendwelche Werte in diversen Registern bewirken, wird nicht im C++ Standard definiert.



  • Und wie ist die Funktion fprint deklariert?


Log in to reply