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

Syn*_*ose 8 c assembly buffer-overflow shellcode

我最近一直在学习计算机安全,遇到了几个问题,特别是我遇到了一些问题.

我给了一个带有固定缓冲区的函数,我需要溢出才能在文件shellcode中执行shellcode.功能很简单:

void vuln(char *str) {
    char buf[64];
    strcpy(buf, str);
    //function provided to display stack on command prompt
    dump_stack((void **) buf, 21, (void **) &str);
}
Run Code Online (Sandbox Code Playgroud)

我最初的猜测是修改函数的返回地址,eip,以便找到并执行shellcode文件中的内容,但我意识到我没有地址到我可以用十六进制值表示的文件.我很确定我需要操纵返回地址,所以我目前正在调用的是:

//the string is passed as a command line arg
./buffer_overflow_shellcode $(python -c "print 'A'*72 + '\x41\xd6\xff\xff' ")
Run Code Online (Sandbox Code Playgroud)

我的输出是:

Stack dump:
0xffffd600: 0xffffd7fd (first argument)
0xffffd5fc: 0x08048653 (saved eip)
0xffffd5f8: 0xffffd641 (saved ebp)
0xffffd5f4: 0x41414141
0xffffd5f0: 0x41414141
0xffffd5ec: 0x41414141
0xffffd5e8: 0x41414141
0xffffd5e4: 0x41414141
0xffffd5e0: 0x41414141
0xffffd5dc: 0x41414141
0xffffd5d8: 0x41414141
0xffffd5d4: 0x41414141
0xffffd5d0: 0x41414141
0xffffd5cc: 0x41414141
0xffffd5c8: 0x41414141
0xffffd5c4: 0x41414141
0xffffd5c0: 0x41414141
0xffffd5bc: 0x41414141
0xffffd5b8: 0x41414141
0xffffd5b4: 0x41414141
0xffffd5b0: 0x41414141 (beginning of buffer)
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

python脚本只是输出72个字母A来溢出缓冲区到edpeip的点,在我用额外的地址替换edp的地址并到达返回地址后,准备操作它.非常感谢任何帮助,谢谢!

pho*_*gon 17

好吧,我想这可能就像计算机系统中的缓冲区溢出实验室:程序员的观点.首先,objdump用来获取静态地址.其次,运行它gdb以找出堆栈的地址.然后,使用这样的字符串填充缓冲区,该字符串将返回地址覆盖到缓冲区(这样您可以放置​​漏洞利用代码,或者,您可以调用程序中的其他代码).

查看此pdf,作为本实验的指南.它可以为您提供一些见解.

正如所指出的,需要大量的编译时标志来实现这一点.(我会查看哪些并尽快回来).或者,这篇文章提供了如何编译这样一个例子的指南.