4

env 変数を に設定するために、次の C コードを作成しました\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、シェルによってエコーされません:確かに:

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

0x0a( \n) は、次の行に値を出力するためにシェルによって追加されます。

于 2012-12-17T11:10:46.303 に答える
2

さて、あなたのコードは正しく動作します;)

0x09ASCIIコードtabキーです。

だからキーEGGに設定されていtabます。tab印刷すると、通常はコンソールで認識されないものが実際に印刷されます。

于 2012-12-17T11:08:40.140 に答える