我目前正在练习缓冲区溢出和逆向工程。我的代码包含一个未使用的函数。我的意图是通过修改 EIP Register 来调用未使用的函数。但是当我这样做时,程序启动了一个进程并退出。函数似乎被调用了,但 txt 文件没有按预期创建。
我的代码:
#include <stdio.h>
#include <unistd.h>
int helper(){
system("touch pwn.txt");
}
int overflow() {
char buffer[500];
int userinput;
userinput = read(0, buffer, 700);
printf("\nUser provided %d bytes. Buffer content is: %s\n", userinput, buffer);
return 0;
}
int main(int argc, char *argv[]) {
overflow();
return 0;
}
我用 gdb 得到了“帮助”函数的地址,如下所示
如图所示,我将其反转以将其发送到缓冲区中。
运行时,程序启动一个进程并退出。没有按预期创建 txt 文件。
伙计们,我该如何解决?
注意:我在 peda 工具中找到了使用模式模块修改 EIP 寄存器的偏移量。
EXE 文件在 64 位操作系统上使用 -m32 标志和 gcc 编译器构建为 32 位可执行文件。
OS : PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
ID=kali
VERSION="2020.2"
VERSION_ID="2020.2"
VERSION_CODENAME="kali-rolling"
ID_LIKE=debian
GCC : gcc version 9.3.0 (Debian 9.3.0-10)