接下来:我如何利用缓冲区溢出?
我有一个代码编译使用-fno-stack-protector
:
#include <stdio.h>
void shellcode(){
printf("n Reached shellcode!");
}
int main(int argc, char **argv){
char buf[3];
sprintf(buf, "%s", argv[1]);
return 0;
}
但无法执行shellcode
功能。
就像我在那篇文章中使用的:
python -c 'print "A"*27+"x49x11x00x00x00x00x00x00"' > input
./a < input
获取段错误:
./a 12345678901
Segmentation fault (core dumped)
但是什么也没发生。
我的主要目标是在linux操作系统上执行ls
而不是shellcode
函数。但是现在什么都不行。
这里有两个潜在的问题:
-
通过使用
sprintf(.., argv[1])
,您似乎期望从argv输入。但是./a < input
将文件指向STDIN -
ASLR可能会把你的exploit搞砸。意思是你不知道地址是否正确。
如果没有二进制文件(a)本身,或者至少没有Makefile,很难回答这样的问题。
如果我是你,我会使用调试器(GDB是伟大的),直到利用工作。但值得注意的是,使用ASLR,这将是困难的。