【发布时间】:2020-07-13 00:20:17
【问题描述】:
我正在通过实验室演示缓冲区溢出漏洞利用。我有它的工作,但有一个领域我不太了解,我希望有人可以为我解释。
这是带有漏洞利用的代码:
/* Vunlerable program: stack.c */
/* You can get this program from the lab’s website */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int bof(char *str)
{
char buffer[24];
/* The following statement has a buffer overflow problem */
strcpy(buffer, str); ➀
return 1;
}
int main(int argc, char **argv)
{
char str[517];
FILE *badfile;
badfile = fopen("badfile", "r");
fread(str, sizeof(char), 517, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}
实验的一个步骤是确定分配给缓冲区的内存大小[24]。为此,我在 bof 函数上运行 gdb,我可以看到在我的系统上分配的内存是 0x20,即 32 位。
如果我改变缓冲区的大小,我可以运行 gdb 并找到分配的内存插槽。但是我应该能够知道在没有 gdb 的情况下会为 buffer[24] 分配多少内存吗?如果我更改为 buffer[8],我应该一眼就知道 32 位系统上的内存块是什么,还是它在系统上有所不同?如果我应该知道,谁能解释一下。
【问题讨论】:
-
分配给缓冲区的大小取决于编码:
UTF-8, UTF-16, UTF-32, character encoding, ...地址根据您的系统以 32 位或 64 位表示 -
我在 32 位 ubuntu 16.04 上运行它。有了这些信息,就可以知道将分配给缓冲区的内存 [24] 还是最好使用 gdb 之类的东西来计算内存大小。
标签: c ubuntu buffer-overflow