Зафиксировать ESP на старте эльфа для эксплоита

Тема в разделе "WASM.UNIX", создана пользователем Quantum, 27 ноя 2006.

  1. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Заметил, что в последних Knoppix и Qubuntu на старте экзешника всегда меняется значение регистра ESP, причём меняется очень сильно. Т.к. я пытаюсь эксплотировать тестовое приложение через переполнение стека, желательно, чтобы ESP не менялся :) Я могу, конечно, изменить код экзешника, чтобы зафиксировать макушку стека, но, в общем случае, доступа к экзешнику у меня может и не быть (удалённый фтп-сервер и т.п.) Как же быть?

    Во-первых, можно ли как-то повлиять на загрузчик, чтобы начальное значение ESP не менялось?

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

    Заранее благодарен!
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Quantum
    Если в процессе есть что-то находящееся по известному адресу то можно поискать там команду call/jmp esp или с любым другим регистром который в момент переполнения имеет значение попадающее в переполняемый буфер. Но если там еще и код грузится по случайному адресу, тогда нереально.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Я конечно не силен в юникс системах, но может этот адрес можно узнать ? А вот если нельзя, то уже думать как избавитсья от этого...
    но это так, размышления
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    TermoSINteZ
    Для теста я в main() добавил код, который на старте распечатывает ESP. Вот и заметил, что на некоторых линуксах значение при каждом старте отличается. Потом в gdb загрузил - так и оказалось. Я, конечно, могу в тестовой проге создать процесс и явно указать для него адрес стека или просто направить ESP куда-нибудь в секцию данных, ведь базовый адрес кода и данных меняться не должен. Но это не решение, т.к. обычно модифицировать подопытное приложение нельзя.

    Black_mirror
    Не понял. В смысле, внедриться в процесс? Но это нарушает философию эксплоита, да и не выйдет, если эксплотировать удалённо. Сдаётся мне, что ты другое имеешь в виду, но что?..

    Код всегда грузится по базовому адресу, как в винде. Можно, конечно, сделать так, чтобы грузился по случайному адресу, но тогда зацепок вообще не останется и такой случай я пока не рассматриваю.
     
  5. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Quantum
    Этот метод описывался в какой-то статье, но в какой я не помню.
    Нужно в коде процесса найти байты FF E4(jmp esp) или FF D4 (call esp) находящиеся по какому-то известному адресу. Адрес возврата затираем адресом найденной команды (если конечно все байты адреса являются допустимыми для эксплоита). Тогда при возврате мы попадём на команду которая перейдет по адресу находящемуся в esp. Этот адрес попадает на начало области где были входные параметры уязвимой процедуры если она не чистит стек, или сразу за ними.
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Black_mirror
    Ясно. Спасибо! Попробую.
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Вчера попробовал! Повезло найти статический FFE4, немного подправил логику эксплоита - всё работает просто замечательно!!! Спасибо за идею!