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