我有一个利用缓冲区溢出的C程序
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int overflow(char *input) {
char buf[256];
strcpy(buf, input);
return 1;
}
int main(int argc, char *argv[]) {
overflow(argv[1]);
printf("meow =^..^=\n");
return 1;
}
我尝试用0x90指令填充堆栈。为此,我使用以下命令并使用GDB检查:
./vuln $(python -c 'print ("\x41" * (272 - 96 - 74 - 4) + "\x90" * 96 + "\x44" * 74 + "\x42" * 4)')
0xffffd1cc: 0x41 0x41 0x41 0x41 0x41 0xc2 0x90 0xc2
0xffffd1d4: 0x90 0xc2 0x90 0xc2 0x90 0xc2 0x90 0xc2
0xffffd1dc: 0x90 0xc2 0x90 0xc2 0x90 0xc2 0x90 0xc2
0xffffd1e4: 0x90 0xc2 0x90 0xc2 0x90 0xc2 0x90 0xc2
0xffffd1ec: 0x90 0xc2 0x90 0xc2 0x90 0xc2 0x90 0xc2
0xffffd1f4: 0x90 0xc2 0x90 0xc2 0x90 0xc2 0x90 0xc2
如您所见,堆栈接收0xc2指令,其中穿插着0x90(我请求的唯一一个指令)。
这是保护吗?如果是,有没有办法绕过它?如果不是,会是什么?
谢谢你的帮助
1条答案
按热度按时间kzmpq1sx1#
问题是Python如何处理十六进制,我通过切换到PHP找到了替代方案。下面是实现的代码: