我编写了以下C代码,将env变量设置为\x09
。但是,当我使用echo $EGG | hexdump
时,我发现它将其设置为00
。仅当第一个半字节为零时才会出现此问题。有什么问题的线索?
char shellcode[] = "\x09";
main() {
setenv("EGG", shellcode, 1);
system("/bin/bash");
return 0;
}
答案 0 :(得分:4)
问题是字符0x08, 0x09, 0x0a, 0x0b, 0x0c ...
被视为空白字符,并从变量值中删除。如果您尝试设置0x01
,它将在shell中可见。
P.S。看起来变量 设置为\x09
但未被shell回显:
事实上:
prev_sh_$ ./so2
$ export IFS=" \n"
$ echo $EGG | hexdump
0000000 0a09
0000002
shell添加了 0x0a
(\n
)以在下一行打印值。
答案 1 :(得分:2)
嗯,您的代码正常运行;)
0x09
是ASCII码标签键。
因此EGG
设置为 tab 键。当你打印它时,它实际打印 tab ,你通常不会在控制台中识别它。