smt*_*tsp 7 c c++ security exploit
假设我有一个具有缓冲区溢出漏洞的代码,如下所示
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;
}
Run Code Online (Sandbox Code Playgroud)
(取自这个问题)
如果从另一个函数(而不是用户输入)获取输入并且str的长度始终小于100,是否有办法利用此漏洞?
例如
int main() {
int user_input;
if (cin >> user_input) {
if(user_input == 1)
func("aaaa");
else
func("bbbb");
}
}
Run Code Online (Sandbox Code Playgroud)
假设代码中没有其他漏洞.
只是一个假设的问题,任何想法?
简而言之,不存在漏洞。每个输入都已清理=没有漏洞。
但这并不意味着您应该不修复它。虽然不存在物理漏洞,但存在很大的潜在漏洞。现在您不会传递任何超过 100 个字符的内容。但从现在起几个月后呢?您还记得只能传递少于 100 个字符的输入吗?我不这么认为。
您可以通过以下方式修复它:
strlen)size_tmalloc成功strnlen与 一起使用sizeof(buffer)而不是strlenlen作为第二个参数传递(可能很烦人)使用strncpy(a, b, strlen(b))与使用相同strcpy(a,b)。通过指令中的检查在一定程度上可以防止这种情况if,但是其存储的选择unsigned short无论如何都使其毫无价值。最好使用它strncpy(a, b, len)来表明确实len需要在那里,以防检查被重构。
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |