атакует стек - PullRequest
       6

атакует стек

1 голос
/ 03 ноября 2010

Есть бинарный файл, над которым я работаю. У него есть функция с адресом, начинающимся с 123. Мне нужно получить мой код для выполнения этой функции.

Двоичный файл принимает байтовый массив размера 'n' и не проверяет границы. Вся задача на самом деле - переполнить буфер и вызвать плохие вещи.

Опять же, задача состоит в том, чтобы позвонить по адресу 123 и заставить его выполнить. У меня сложилось впечатление, что если размер буфера равен, скажем, «4», и я передаю 9 символов…, 5 символов будут помещены в стек и выполнены. (это правда?)

Кроме того, для того, чтобы я мог добраться до нужного адреса, я хотел бы сказать «вызов 123». Из того, что я понимаю, "звонок" - это "е8", нет?

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

(Да, это домашнее задание)

Ответы [ 3 ]

4 голосов
/ 03 ноября 2010

Я настоятельно рекомендую вам прочитать Разбить стек ради удовольствия и прибыли . Он очень подробно описывает шаги, которые вам нужно сделать, чтобы сделать это.

1 голос
/ 03 ноября 2010

Стек не содержит код, но он содержит адрес возврата для функции. Типичная структура стека:

<stack data> <old frame pointer> <return address>

<old frame pointer> иногда опускается, и я думаю, что для этого придется, поэтому все, что вам нужно предоставить, - это данные для заполнения массива 123.

0 голосов
/ 03 ноября 2010

Обычная стратегия - найти код операции call ESP в фиксированном адресе памяти и перезаписать адрес возврата этим адресом.Таким образом, выполнение будет продолжено в стеке.Это будет работать, если DEP не активирован (или не поддерживается).

В вашем случае вы также можете искать abs_jump 123 в памяти.стек может быть выполнен.call esp имеет только два байта кода операции, поэтому существует высокая вероятность найти его где-нибудь в памяти.Второй подход не выполняет код из стека, но требует 5-байтовый код операции, который вряд ли будет найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...