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

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

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .