Злобные Shatter-атаки

DigitalScream

Xakep, номер #060, стр. 060-068-3


Пример эксплуатации

Пример успешной shatter-атаки - эксплоит к "NetDDE Agent", написанный Serus’ом (наш соотечественник). Что представляет собой эта программа? Это невидимое окно, которое все-таки существует и работает :). На данный момент уже есть версия под ОС Windows NT/XP/2000.

Скачать эксплоит в виде исходного кода можно в интернете по адресу imm.uinc.ru/getad/GetAd2.c. Все что остается - это откомпилировать и запустить его на компьютере, где требуется получить права администратора. Если программа найдет адрес shellcode в памяти, то атака пройдет успешно. Как результат, в течение секунды должна запуститься консоль с правами админа. Проверить свои права в системе можно, например, используя диспетчер задач или утилиту whoiam, которая входит в состав Resource Kit.

Модификация атаки

Как ты уже, наверное, догадался, основная проблема заключается в том, что атакующий может изменить ход работы программы, применяя сообщения Windows. Из этого следует вывод, что для атаки можно использовать сообщения, передающие некий адрес на исполнение. Таких сообщений более чем достаточно, но большинство из них не подходят из-за сложности воссоздания ситуации передачи управления на shellcode. В случае с WM_TIMER проблем не возникает, т.к. нужный хакеру код исполняется независимо от действий программы.

Но бывают и другие ситуации. Например, есть сообщение, которое задает адрес обработчика определенного события. Именно таким и является сообщение EM_SETWORDBREAKPROC. Сообщение EM_SETWORDBREAKPROC имеет два параметра. Первый параметр всегда равен нулю, а второй – это адрес нового обработчика прокрутки текста. Оно создано для управления текстом внутри поля вода, что значит следующее: если окно системного приложения содержит такое поле, то этот сервис можно использовать для повышения привилегий. Подобным приложением является WinVNC. Если при нажатии на его значке в System Tray выбрать пункт меню properties (свойства), то на экране должно появится новое окно, имеющее права системы.

На нем есть поле ввода, что делает это окно идеальной мишенью. Этим полем мы и воспользуемся. Будем считать, что, как разместить shellcode в поле ввода и найти его месторасположение, ты уже знаешь. А подготовка самого кода к запуску происходит следующей командой:

Подготовка к запуску

Shellcode = твой_shellcode

HWND hwndWindow;

hwndWindow = FindWindow (0, "WinVNC: Current User Properties" );

HWND hControl;

hControl = FindWindowEx (hwndWindow, 0, "Edit", 0);

SendMessage(hControl, EM_SETLIMITTEXT, 0, 0xFFFF);

SendMessage(hControl, WM_SETTEXT, 0, shellcode);

long intAddr;

intAddr = полученный_тобой_адрес_shellcode;

Назад на стр. 060-068-2  Содержание  Вперед на стр. 060-068-4