Если я использую echo -ne "AA\x08A", вывод будет AA, так как символ возврата на одну позицию и один A удаляются.
Это выглядит только потому, что вы выводите выходные данные на терминал, и в этом случае обратное пространство имеет особое значение: удалите предыдущий символ, аналогичный тому, который вы получаете при нажатии клавиши возврата на клавиатуре. Это означает, что он отобразит первый A, второй A, удалит второй A и вернется после первого A и отобразит 4-й символ, то есть A:
$ echo -ne "AA\x08A"
AA
Но на самом деле он напечатает все 4 октета - так как дисплей с hd
(или hexdump
или xxd
...) покажет:
$ echo -ne "AA\x08A" | hd
00000000 41 41 08 41 |AA.A|
И те же 4 символа также будут напечатаны в любой другой программе, например, в вашем уязвимом скрипте perl:
$ echo -ne "AA\x08A" | perl -e 'print unpack("H*",<STDIN>),"\n"'
41410841