Как скопировать символ 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