【发布时间】:2014-05-07 17:45:42
【问题描述】:
如果程序接收到一个中间带有空终止符的字符串作为 argv[1] 参数会发生什么?例如:
./program test'\0'example
argv[1] 的值是多少?是测试吗?是测试\ 0示例吗?我有这几行代码
max = sizeof(filename);
len = strlen(argv[1]);
if (len > max) goto error;
strcpy(filename, argv[1]);
我需要为这个程序构建一个漏洞利用,我想做的是让 argv[1] 值得测试'\0'示例,所以 strlen(argv[1])=strlen("test")=4 和strcpy(filename, argv[1])=strcpy(filename, "test") 所以我可以使用字符串的其余部分(示例部分)来放置我的漏洞利用。是否可以?非常感谢?
【问题讨论】:
-
strlen和strcpy都停在一个空字符上,所以不会有什么不同。无论如何,该输入看起来不会输入空字符。 -
我很怀疑大多数 shell 甚至会传递空字符以外的任何内容。
-
提示:想想一个长度为
n的字符串需要多少字节。 -
我不认为这是一个空字符:
echo test'\0'example->test\0example... -
这是,至少在 bash 中:echo test$'\000'example
标签: c string terminator