我不明白为什么这段代码容易受到缓冲区溢出攻击

问题描述 投票:0回答:1
#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”语句。 有没有简单又好的方法来利用这段代码?

c if-statement buffer-overflow
1个回答
0
投票

len == 40
时,
printf("%s", input);
尝试打印
input
,期望它是一个字符串。然而,input中不一定有
空字符
,因此它不是字符串

结果:未定义的行为(UB)。

© www.soinside.com 2019 - 2024. All rights reserved.