Шел-код с использующий чужой код...

Тема в разделе "WASM.WIN32", создана пользователем test555, 23 сен 2011.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Привет всем.

    Встала задача обойти DEP.

    Задача: заставить выполнить приложение-жертву CreateProcess...

    Имеем: может запустить свою программу (генерирующую щел) на том компе.
    Эта программа может записывать байты по заданным адресам, а так же запускать код по нужному адресу.

    Не доступны функции, которые идут через OpenProcess (Vitrual*** и тд).

    Если бы не ДЕП - то записываем данные в любое свободное место с READ_WRITE аттрибутом и запускаем код.

    Но вот ДЕП не дает коду выполниться. (ОС - 7, виста)

    Какая идея:

    ищем в стандартных библиотеках участок кода, подожий на


    MOV EAX,DWORD PTR DS:[755737D4]
    PUSH [755737D8]
    CALL DWORD PTR DS:[EAX]

    В чем идея: адреса нужно найти такие, чтобы эта мапять (755737D4, 755737D8) была READ_WRITE .
    Меняем число по адресу :[755737D4] таким образом, чтобы CALL DWORD PTR DS:[EAX] попадал например на Sleep. А по адресу [755737D8] - пишем время, на которое нужно уснуть.

    Смысл ясен? Более сложные операции можно сделать из нескольких таких подобранных кусков.

    Но беглое изучение кода кроме этого подходящих кусков не дало...

    Может и велосипед изобретаю и давно этот фокус уже придуман?
     
  2. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Ну ROP же.
     
  3. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Придуман Solar Designer-ом где-то в конце 90-х, называется ret2libc, или ROP -- в современной инкарнации техники.
    ROP-программа представляет собой последовательность адресов на стеке, которые указывают на последовательно исполняемые ROP-гаджеты. Задачей таких гаджетов, обычно, является вызов VirtualProtect(MEM_EXECUTE_READWRITE) для стека, что бы можно было сделать jmp esp на "обычный" шеллкод (хотя бывают варианты с выделенеием новой исполняемой страницы и копированием туда шеллкода).

    Неплохой туториал по ROP:
    http://www.corelan.be/index.php/201...t-10-chaining-dep-with-rop-the-rubikstm-cube/

    Мой pykd скрипт для поиска ROP-гаджетов в WinDbg:
    http://www.everfall.com/paste/id.php?nlxq5erg07ho
     
  4. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Разобрался.

    Суть в том что я как бы могу записать в стек числа, которые будут использованы для гаджетов, и потом через ret возвращаться обратно в мою цепочку.
    Вопрос в другом: я не знаю адрес стека в чужом приложении.
    Я могу записать данные в произвольный участок памяти.
    Как мне записать адреса гаджетов в стек, да еще и так, чтобы на адрес первого гаджета попал ret ?

    Ну то есть можно ли в качестве стека юзать участок памяти READ_WRITE?