Я прохожу курс по безопасности, который требует от нас атаковать строку формата на виртуальной машине unix. Уязвимость представляет собой строку формата, использующую аргумент командной строки.
Мой вопрос: как мне записать значение в адрес в строке формата (например, записать адрес кода оболочки в адрес возврата функции)?
Например,
Я пробовал несколько строк вроде «AAAA_% 10 $ x»
, и это может привести к тому, что программа напечатает AAAA_41414141
.
Затем я заменяю буквы своим адресом и пытаюсь перезаписать это.
\xdd\xcc\xbb\xaa_%10$x_%54321x_%n"
Но это не работает. Я вижу статью, в которой говорится, что мне следует использовать меньшее число в % 54321x
, поскольку есть некоторые символы, которые я уже написал, но я не знаю, сколько символов я написал раньше % 54321x
, либо
примечание: в среде установлена старая версия gcc, поэтому не стоит беспокоиться о том, что значение слишком велико. Какие-либо предложения? Спасибо.