假设我有一个存在缓冲区溢出漏洞的代码,如下所示:
int func(const char *str){
char buffer[100];
unsigned short len = strlen(str);
if(len >= 100){
return -1;
}
strncpy(buffer,str,strlen(str));
return 0;
}
(摘自这个问题)
如果从另一个函数(而不是用户输入)获取输入,并且str的长度始终小于100,是否有利用此漏洞的方法?
例如:
int main() {
int user_input;
if (cin >> user_input) {
if(user_input == 1)
func("aaaa");
else
func("bbbb");
}
}
假设代码中没有其他漏洞。
这只是一个假设性的问题,有什么想法吗?
len
始终小于 100,那么我不明白为什么要使用if(len >= 100)
。 - Spikatrixstr
的长度大于65535,无论str
来自哪里,都会出现漏洞。 - Anton Savinmain
函数存在严重的内存损坏问题。你不能读取字符串字面量的字节,将其转换为非const
的char *
已经被弃用,并应该发出编译器警告。即使你被允许写入user_input
的字节,该数组也太短了,无法容纳字符串"1"
。此外,使用==
比较char
缓冲区可能不会产生你期望的结果。 - 5gon12eder