4

我编写了以下 C 代码将 env 变量设置为\x09. 但是当我使用时echo $EGG | hexdump,我看到它设置为00. 仅当第一个半字节为零时才会出现此问题。任何线索有什么问题?

char shellcode[] = "\x09";

main() {
    setenv("EGG", shellcode, 1);
    system("/bin/bash");

    return 0;
}
4

2 回答 2

4

问题是字符0x08, 0x09, 0x0a, 0x0b, 0x0c ...被认为是空白字符并从变量值中剥离。如果您尝试设置0x01,它将在外壳中可见。

PS看起来变量设置\x09但没有被shell回显:确实:

prev_sh_$ ./so2 
$ export IFS=" \n"
$ echo $EGG | hexdump
0000000 0a09                                   
0000002

0x0a( \n) 由 shell 添加以在下一行打印值。

于 2012-12-17T11:10:46.303 回答
2

好吧,您的代码可以正常工作;)

0x09是 ASCII 码tab键。

所以EGG设置为tabkey。当您打印它时,它实际上会打印tab您通常无法在控制台中识别的内容。

于 2012-12-17T11:08:40.140 回答