我编写了以下 C 代码将 env 变量设置为\x09
. 但是当我使用时echo $EGG | hexdump
,我看到它设置为00
. 仅当第一个半字节为零时才会出现此问题。任何线索有什么问题?
char shellcode[] = "\x09";
main() {
setenv("EGG", shellcode, 1);
system("/bin/bash");
return 0;
}
问题是字符0x08, 0x09, 0x0a, 0x0b, 0x0c ...
被认为是空白字符并从变量值中剥离。如果您尝试设置0x01
,它将在外壳中可见。
PS看起来变量设置为\x09
但没有被shell回显:确实:
prev_sh_$ ./so2
$ export IFS=" \n"
$ echo $EGG | hexdump
0000000 0a09
0000002
0x0a
( \n
) 由 shell 添加以在下一行打印值。
好吧,您的代码可以正常工作;)
0x09
是 ASCII 码tab键。
所以EGG
设置为tabkey。当您打印它时,它实际上会打印tab您通常无法在控制台中识别的内容。