Bash:警告:命令替换:忽略输入中的空字节

时间:2017-02-27 18:46:32

标签: c++ c

我正在尝试缓冲区溢出,我遇到了这个错误。有没有办法阻止bash忽略空字节? (注入shellcode)。 谷歌搜索对我帮助不大。

代码

`

  if(argc==1) {
      printf("Usage: %s input\n",argv[0]);
      exit(0);
  }

  strcpy(buf,argv[1]);
  printf("%s\n",buf);
  return 0;

`

1 个答案:

答案 0 :(得分:4)

Bash变量存储为C字符串。 C字符串是NUL终止的。因此,他们无法按照定义存储NUL

考虑将每个NUL分隔的组件存储为数组的单独元素。例如:

pieces=( a '' bc d ); tail='efg'
printf '%s\0' "${pieces[@]}"; printf '%s' "$tail"

...将发出a\0\0bc\0d\0efg,并使用文字NUL代替每个\0