Шестнадцатеричные значения во входных файлах GDB - PullRequest
2 голосов
/ 16 февраля 2011

Я пытаюсь найти конкретный эксплойт на DVL, перенаправив ввод (для получения), используя run

Я могу успешно переполнить программу, но у меня возникают проблемы с добавлением шестнадцатеричных значений в строку.. Я пробовал цитаты, преобразуя значение mem addr в ascii и различные попытки выхода (\, \, \) безуспешно

Пример входного файла: AAAA \ x42

ВПриведенный выше пример может показаться, что обратный слеш читается как ascii char (5c), а значение 42 остается в стеке (как ни странно?).

Как можно было бы указать шестнадцатеричное значение во входе gdbфайл?

Спасибо

1 Ответ

4 голосов
/ 16 февраля 2011

Используйте Perl!:)

reader@hacking:~/booksrc $ ./overflow_example $(perl -e 'print "A"x30')

с опцией 'e' perl оценит следующую команду, а окружающие все будут воспринимать вывод perl как строку.Таким образом, приведенная выше команда идентична:

reader@hacking:~/booksrc $ ./overflow_example AAAAAAAAAAAAAAAAAAAAAAAAA

(добавление x30 после строки повторяет ее 30 раз).Конечно, Perl принимает другие шестнадцатеричные значения с пометкой \x??.Еще одно слово, для объединения строк используйте точку:

reader@hacking:~/booksrc $ perl -e 'print "A"x20 . "BCD" . "\x61\x66\x67\x69" ;'
AAAAAAAAAAAAAAAAAAAABCDafgi

Так что вы можете перенаправить вывод perl во входной файл или напрямую вызвать perl в gdb при запуске программы.

...