【发布时间】:2013-02-14 23:06:39
【问题描述】:
我有一个环境变量,我正在尝试获取它的内存地址。我有
memset(&buffer, 0x90, 517);
memcpy(&buffer[517-strlen(shellcode)],shellcode,strlen(shellcode));
setenv("EGG",buffer,1);
putenv(buffer);
printf("EGG address: 0x%1x\n", getenv("EGG"));
system("bash");
它打印出来的内存地址是0x804b00c。那看起来不正确。我用 GDB x/x 0x804b00c 检查了它。它说无法访问0x804b00c 的内存。所以getenv 基本上是给我垃圾内存。我已经打电话给env 以确保设置了EGG 变量,并且确实如此。
为什么我无法获取EGG的内存地址?
【问题讨论】:
-
这对于任何人来说几乎是不可能调试的,除了你自己。变数太多。告诉你的环境变量在哪个地址是没有实际意义的,它可以在任何地址。
-
为什么需要环境变量的地址?你打算用它做什么?
-
尝试以正确的格式打印地址,
printf("%p\n", (void*)getenv("EGG"));。并不是说它可能会有所帮助。 -
这看起来非常可疑:
memset(&buffer, 0x90, 517);。典型的 sploitcoder 不太了解 C...也许您的意思是memset(buffer, 0x90, 517);或其他什么。 -
@modifiablelvalue:大多数“sploitcoders”确实非常了解 C。不过,Jake 不是一个很好的 sploitcoder,因为他假设环境变量存储在非随机地址,并且正在非可执行内存上编写 nop sled。