我目前正在做一个学校项目,我在ubuntu上使用gdb找不到缓冲区溢出漏洞。
我之前从未使用过gdb,但是在互联网上进行了一些研究,当我使用“disas main”命令时,我对我所看到的内容感到非常不知所措。
我想知道是否有人可以告诉我如何调试此程序或任何其他程序,并告诉我如何找到返回地址。
我这里有这个代码:
/* This program has a buffer overflow vulnerability. */
/* Our task is to exploit this vulnerability */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int bof(char *str)
{
char buffer[12];
/* The following statement has a buffer overflow problem */
strcpy(buffer, str);
return 1;
}
int main(int argc, char **argv)
{
char str[512];
FILE *badfile;
badfile = fopen("badfile", "r");
fread(str, sizeof(char), 5122, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}
答案 0 :(得分:1)
在调试器中,您可以看到反汇编的代码,只需在函数的ret
操作数上添加一个断点即可。停止时,请查看指向堆栈地址的esp
寄存器的值。然后探索此地址的内存,前4个(取决于您的平台)字节将为您提供将用于返回的地址。