Как скопировать символ BS (0x08) для ввода для переполнения буфера в GDB?

Мне нужно переполнить буфер конкретным значением, которое содержит 0x08. Если я использую echo -ne "AA\x08A", выход AA, как символ возврата и один A удаляются.

Как мне скопировать это значение на вход моей уязвимой программы? Я бы хотел, чтобы он был в GBD, чтобы потом я мог проверить стек.

1 ответ

Если я использую 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
Другие вопросы по тегам