Funktion per Overflow aufrufen



  • Hallo!

    Möchte mal ins Thema Buffer overflow einsteigen, und dachte an ein einfaches Beispiel. Habe mir hier ein template gebastelt. Ich möchte nun das übersetzte Programm nur mittels input dazu bringen, die funktion callme() auszuführen.

    Dies müsste doch m.E. möglich sein, in dem ich beim scanf einfach weiterschreibe.

    Aber, ist das tatsächlich nur durch die Eingabe möglich? Oder müsste ich das Binary selbst modifizieren?

    Falls es so möglich ist:
    Wie starte ich?
    Wie finde ich die Sprungaddresse von callme()?
    Könnte ich sagen ich überschreibe die nächste Instuktion bzw den Rücksprung aus io() anstatt zurück nach main() einfach an den anfang von callme()?

    Bitte um kompakte, leichte Kost für Anfänger und evtl. konkrete Tips!

    Danke im Voraus, hier das Programm.

    #include "stdio.h"
    #include "stdlib.h"
    
    void io(void);
    void callme(void);
    
    int main() {
    	io();
    	return 0;
    }
    
    void io(void) {
    	char input[16];
    	printf("input:\n");
    	scanf("%s", input);
    	printf("%s\n", input);
    }
    
    void callme(void) {
    	printf("you made it!\n");
    }
    


  • scanf (möglicherweise) und das neuere scanf_s (sicher) wehren sich je nach Kompiler dagegen.

    Wie man trotzdem einen Überlauf ausprobieren kann findet man vielleicht hier

    http://home.f1.htw-berlin.de/scheibl/c/index.htm?./Struktur/String.htm

    unter dem Punkt "Pufferüberlauf".


Anmelden zum Antworten