gpt4 book ai didi

c - 对漏洞利用示例感到困惑?

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:18 25 4
gpt4 key购买 nike

我正在准备面试,一位在那里工作的 friend 向我提供了这部分代码,并说它为我将被问及的一些有关安全性的问题做了很好的准备。我对这方面的事情了解不多,我希望能学到一些东西,这样我至少可以在有人问我的时候说点什么。

这是代码:

#include <stdio.h>
#include <string.h>
#include <limits.h>
int main(int argc, char *argv[]){

FILE *inputFile;
char filename[128];
char strings[USHRT_MAX][40];
unsigned short c = 0;

strcpy(filename, argv[1]);
inputFile = fopen (filename, "r");

if (inputFile == NULL) {
perror("Error: ");
return(-1);
}

while (fscanf(inputFile, "%s", strings[c++] ) != EOF);
fclose(inputFile);
return(0);
}

我知道它有一个与能够溢出缓冲区有关的漏洞,正如他告诉我的那样,但除此之外我被卡住了。有人可以解释为什么这段代码容易受到攻击吗?

最佳答案

首先,我建议您阅读 this book ,它很好地解释了漏洞利用的工作原理。它带有一个 Linux VM,您可以尝试利用代码。 (仅供引用,我与这本书没有任何关系,我只是觉得它很好。)

第二,我想回答philippe评论中的问题:main() 的返回不是程序执行时发生的最后一件事。例如,您可以跳过 main()return 并看到很多有趣的事情发生:

Breakpoint 2, main (argc=1, argv=0x7fff5fbff320) at main.c:6
6 return 0;
(gdb) stepi
0x0000000100000f17 6 return 0;
(gdb)
0x0000000100000f1a 6 return 0;
(gdb)
0x0000000100000f1d 6 return 0;
(gdb)
0x0000000100000f20 6 return 0;
(gdb)
0x0000000100000f24 6 return 0;
(gdb)
Cannot access memory at address 0x0
0x0000000100000f25 in main (argc=1, argv=0x7fff5fbff310) at main.c:6
6 return 0;
(gdb)
Cannot access memory at address 0x0
0x0000000100000ee4 in start ()
(gdb)
Cannot access memory at address 0x0
0x0000000100000ee6 in start ()
(gdb)
0x0000000100000f26 in dyld_stub_exit ()
(gdb)
0x0000000100000f44 in dyld_stub_puts ()
(gdb)
0x0000000100000f49 in dyld_stub_puts ()
(gdb)
0x0000000100000f34 in dyld_stub_puts ()
(gdb)
0x0000000100000f3b in dyld_stub_puts ()
(gdb)
0x0000000100000f3d in dyld_stub_puts ()
(gdb)
0x00007fff83b396a0 in dyld_stub_binder ()
(gdb)
0x00007fff83b396a1 in dyld_stub_binder ()
(gdb)
0x00007fff83b396a4 in dyld_stub_binder ()
(gdb)
0x00007fff83b396ab in dyld_stub_binder ()
(gdb)
0x00007fff83b396af in dyld_stub_binder ()
(gdb)
0x00007fff83b396b4 in dyld_stub_binder ()
(gdb)
0x00007fff83b396b9 in dyld_stub_binder ()
(gdb)
0x00007fff83b396be in dyld_stub_binder ()
(gdb)
0x00007fff83b396c3 in dyld_stub_binder ()
(gdb)
0x00007fff83b396c8 in dyld_stub_binder ()
(gdb)

...等等

关于c - 对漏洞利用示例感到困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15510571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com