#include <stdio.h>
int main(void){
int len;
char input[40]="";
printf("input length : \n");
scanf("%d", &len);
if(len > 40){
return 0;
}
read(0, input, len);
printf("%s", input);
return 0;
}
此代码容易受到缓冲区溢出攻击,我正在尝试找出原因。 (抱歉这个愚蠢的问题,我真的是新手。)我尝试了很多,但我的每个攻击代码都无法绕过“if”语句。 有没有简单又好的方法来利用这段代码?
当
len == 40
时,printf("%s", input);
尝试打印input
,期望它是一个字符串。然而,input
中不一定有空字符,因此它不是字符串。
结果:未定义的行为(UB)。