ShellCode + SEH?

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

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Добрый день. В неком приложении есть уявзимость, позволяющая по произвольному адресу записать шел-код.
    Вопрос: как передать на него управление? (методы типа CreateRemoteThread и про контекст не предлагать, т.к. я сижу с ограниченными правами и процесс можно открывать только на PROCESS_QUERY_INFO....)

    Зато я могу записать в несуществующий участок памяти, вылезет исключение (изучил материал по SEH).
    В регистре FS:[0] лежит адрес обработчика SEH, ему передается управление.
    Вопрос: думал записать в жестко забитый адрес 7FFDF000 адрес моего шел-кода (типа того). Но вот насколько я понял, адрес SEH должен указывать на память, которая принадлежит стеку (которая в общем-то границы которой определены рядом (FS:[4] - FS:[8]). И вообще, написано что для каждого потока эти обработчики свои, не совсем понятно, что за участко памяти FS.. И что за адрес 7FFDF000. На разных тредах он отличается...

    Если я изменю границы FS:[4] - FS:[8] на свою область, что-то ведь не заработает?

    Итого: как можно запустить свой шел?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Приложение написано на С++? Можно попробовать перезаписать таблицу виртуальных ф-ий, так, чтобы вызвался переданный код. Но для этого таблица должна быть в записываемой памяти (так иногда бывает). Для таблицы по адресу 0x403000 и состоящей из четырех указателей должно быть примерно такое:

    db 0x403010
    db 0x403010
    db 0x403010
    db 0x403010
    xor eax, eax
    ...

    Когда произойдет косвенный вызов виртуальной ф-ии по одному из указателей, управление передастся на код по адресу 0x403010. Но надо учитывать, что страница по адресу 0x403000 должна быть записываемой и, вероятно, исполняемой, если приложение защищено DEP'ом. А это уже зависит от версии OS/SP.

    Это как один из вариантов, который первым приходит в голову.
     
  3. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Кстати в таблицу импорта можно записать. Обычно приложения, когда АПИ вызывают, смотрят адреса в секции импорта. Как только приложение вызовет чтонить из, kernel32.dll например, будет вызван нужный код. Опять таки есть масса нюансов, но возможно получится.
     
  4. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    100gold, про "редактирование" указателей я знаю, тонкостей много. Это был запасной вариант, нужно было именно что-то иное.
     
  5. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    А разве права на чтение и выполнение не одно и тоже?
     
  6. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    test555
    Шелл код получает управление посредством переполнения буферов - затирается адрес возврата из процедуры в стеке.
     
  7. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Я не знаю адрес стека, куда и какие адреса переписывать.. Я могу лишь только писать в произвольные адреса.
     
  8. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    test555
    Значит это не шелл- код, что требует уточнения, что да как.
     
  9. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Для простоты:
    я хочу записать в память байты 0х9090909090 и потом их выполнить. Как?
     
  10. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    test555
    Запишите в память по адресу, на который перейдёт тред.
     
  11. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    под какую систему эксплоит пишите? Windows XP, Vista? 7? под все?
     
  12. test555

    test555 New Member

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

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    приложение по фиксированным адресам грузится?
     
  14. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    test555
    А ты считаешь уязвимость переполнение буфера делается по известному адресу?
    Сначала скажи что за уязвимость, которая позволяет тебе писать в память? Что за программа, что за ОС? Без этого остальные расуждения - глупость. Если ты можешь писать что хочешь, куда хочешь - пропатчи чтобы JMP был на твой второй кусок кодов. Какая проблема?
    Только боюсь, что ты как все новички понял из шелл-кодов только первую половину - запись лишних байт на стек. А вот прыгнуть туда - это новички считают что легко, но они не поняли и сейчас им дадут волшебный ключик...
     
  15. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    Mika0x65
    еще камень должен держать PAE + он должен быть включен..
     
  16. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Если можешь писать в память чужого процесса, то перезапиши указатель по адрессу FS:[C0](для вин 7 и возможно Vista) или 7FFE0300 для ХР на свой код.
    Через эти адресса идут вызовы системных сервисов(функций) так что полюбом получиш управление.
     
  17. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    XshStasX
    7FFE0300 - это адрес ссылки на системный шлюз в USD, данный регион нельзя открыть для записи. Более того, этот блок общий для всех процессов и при изменении там данных в одном процессе, они тутже изменяться во всех. Что приведёт к бсоду в конце концов(будет фолт например в csrss).
     
  18. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    klzlk
    Это куда ?..)
    А этот блок блок общий для всех ring -3 приложений ?
     
  19. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    XshStasX
    Да, конечно. Вот учите матчасть и без неё не следует утверждать совершенно нелепые вещи. Просто совет.