这个问题与前一个问题Previous QuestionLinux的缓冲区溢出返回到libc中
前一个问题的后续行动,通过改变可执行文件的权限与execstack
解决。我的新问题围绕另一个实现绕过堆栈执行保护。这使用return-to-libc并且涉及针对system()
的地址执行/bin/sh
。
我目前使用下面的代码:
#include <stdio.h>
void func(char *buff){
char buffer[5];
strcpy(buffer, buff);
printf("%s\n", buffer);
}
int main(int argc, char *argv[]){
func(argv[1]);
printf("I'm done!\n");
return 0;
}
我的问题occures当我需要溢出的func()
返回地址到地址0x00167100
。当我执行缓冲区溢出时,我使用的参数是$(echo -e "\x00\x71\x16\x00")
。但是,在\x71
从我的论点中删除之前,问题是最不重要的\x00
。事实上,我可以使用\x00\x00\x00\x00\x00...\x71\x16\x00
,而传入的参数仍然是\x71\x16\x00
。最终的结果是一些像0x08001671
之前的覆盖地址,当它真的应该是0x00167100
。
这是什么问题? – 2012-03-31 00:01:54
@OliCharlesworth为什么我失去了这些特定的字节。 – Blackninja543 2012-03-31 00:07:49