Ввод строк байтов в пользовательский ввод программы C - PullRequest
0 голосов
/ 26 мая 2019

Я работаю над проблемой, которая включает в себя переполнение буфера на C-программе. Программа запрашивает ввод командной строки у пользователя, и мне нужно использовать этот ввод для ввода в мою строку байтов, включая nops, шелл-код, адрес возврата и т. Д. Проблема в том, что программа c интерпретирует все, что я ввожу, как буквенную строку, поэтому, если я введу что-то вроде «\ xff \ xab \ x12 ...», программа будет интерпретировать каждый отдельный символ как отдельный байт. Я могу вводить отдельные байты, создавая строку соответствующих символов ASCII для каждого байта, но это ограничивает меня шестнадцатеричными значениями 00-7F для моих байтовых значений. Мне интересно, есть ли какой-нибудь способ, которым я могу использовать python для ввода в байтовой строке, или, возможно, отформатировать пользовательский ввод так, чтобы программа на C интерпретировала его так, как мне нужно. Обратите внимание, что я не знаю, каким будет адрес возврата байтовой строки, до тех пор, пока я не начну запускать программу, поэтому я не могу сделать байтовую строку до запуска программы на C. Я работаю над оболочкой Linux x86. и у меня нет исходного кода для программы на Си.

Я пытался вызвать python, чтобы напечатать нужную мне строку для ввода, используя такие команды, как,

$(python -c 'print "\x41" * 205 + "\x34\x86")

но программа на C просто интерпретирует все эти символы буквально. Я также пытался использовать расширенные символы ASCII, но программа на C, похоже, неправильно их интерпретирует, связывая их все с неизвестным символом и шестнадцатеричным значением 0xc3. Возможно ли, что C-программа может использовать какое-то другое символьное / шестнадцатеричное отображение?

Если кто-нибудь знает, как я могу ввести данные так, как мне нужно, ваша помощь будет очень признательна.

спасибо

1 Ответ

0 голосов
/ 26 мая 2019

Вы пропустили точку с запятой (') в вызове оболочки на python. Дополнительно:

Если ваш исполняемый файл принимает данные в виде аргумента CLI:

$ ./yourprog $(python -c 'print "\x41" * 205 + "\x34\x86"')


Если он принимает свой ввод в виде STDIN:

$ python -c 'print "\x41" * 205 + "\x34\x86"' | ./yourprog


Замените "./yourprog" именем вашего исполняемого файла.

...