C 如何在此代码中找到漏洞?
此代码中有4个漏洞。有人知道怎么找到他们吗C 如何在此代码中找到漏洞?,c,security,buffer-overflow,C,Security,Buffer Overflow,此代码中有4个漏洞。有人知道怎么找到他们吗 char *alloc_and_copy(char *dst,char src[], unsigned int nbcells) { unsigned char size; size = nbcells; dst = (int*)malloc(size); strcpy(dst, src); return dst; } int main() {
char *alloc_and_copy(char *dst,char src[], unsigned int nbcells) {
unsigned char size;
size = nbcells;
dst = (int*)malloc(size);
strcpy(dst, src);
return dst;
}
int main() {
char t1[256];
char *t2;
scanf("%s", t1);
t2 = *alloc_and_copy(t2, t1, 256);
sprintf("%s", t2);
free(t2);
return 0;
}
如何在此代码中找到漏洞
有经验的话,一套好的编译器选项,一个静态源代码分析器,一个动态分析器。。。任何你知道如何使用的东西。如果你不知道如何使用这样的工具,恐怕你必须学会
通过将编译器的警告级别提高到最大,甚至为GCC提供类似-pedantic
的选项,您可以发现最严重的问题。这同样适用于静态类型使用非常简单的分析仪
然后,您可以构建可能的控制流和数据流的表。例如,scanf()
可以执行以下任何操作:
t1
中完全不读取任何内容,使其完全未初始化,可能是因为I/O错误'\0'
将存储在t1
中t1
,但不要使其溢出t1的字符串
为其提供空间t1
提供的空间长得多的字符串 char *alloc_and_copy(char *dst,char src[], unsigned int nbcells) {
unsigned char size;
size = nbcells;
dst = (int*)malloc(size);
strcpy(dst, src);
return dst;
}
int main() {
char t1[256];
char *t2;
scanf("%s", t1);
t2 = *alloc_and_copy(t2, t1, 256);
sprintf("%s", t2);
free(t2);
return 0;
}
是的,很多人都知道这一点
好吧,你没有问过漏洞。从你的评论来看,你不想这么做,太完美了 你觉得怎么样?你甚至把这个问题标记为“缓冲区溢出”。只有4个?我觉得这是偏低的。打开编译器警告应该有助于解决一些问题。1)缓冲区溢出2)分段3)输入验证4)无符号int(4字节)到无符号char(1字节)可能您误解了这个问题。我不想让任何人发现代码中的粗俗之处(代码摘自大学考试曲目),但想帮助我了解应该寻找什么,以及我们可以建议在这一行代码中存在漏洞的线索。@Vincenzorrodolaforgia这听起来像“给定任意代码,我如何知道是否存在漏洞?”你认为正确答案会是什么形式?这里的答案是“使用编译器警告,然后使用静态分析器,然后检查代码。”你认为正确的答案会说其他的话吗?如果你更深层次的观点是“C很难正确”,是的,这是正确的。几十年的程序语言研究已经开始用更容易理解的东西取代C语言。然而,我们经常在C工作,这很难。