void CopyData (char *szdata) {
char cDest[32];
strcpy(CDest, szData);
printf("%s\n", cDest);
}`enter code here`
int main(int argc, char **argv){
CopyData(argv[1]);
}
攻击者如何在此代码中找到漏洞并利用它?
答案 0 :(得分:0)
好吧,你使用strcpy()复制到一个固定的char数组中。如果argv[1]
的长度大于32,那么您将超出数组中分配的空间,这可能会导致问题。
此外,您无需验证其存在即可访问argv[1]
。 argv
是char**
,表示指向char
字符串指针数组的指针。 argc
包含这些char
字符串的数量。当您在未验证argv[1]
大于或等于2的情况下阅读argc
时,您可能正在阅读垃圾。
这些错误意味着如果出现以下情况,您的程序将崩溃或出现未确定/不正常的行为: