Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #48, НОЯБРЬ 2004 г.

Чиним зло через Internet Explorer

Петр Каньковски

Спецвыпуск: Хакер, номер #048, стр. 048-014-1


(kankowski@narod.ru)

Как создать полезный Active-X для ослика

Дырок в IE столько, что их exploit'ацией не баловался разве что совсем ленивый. Но использовать многократно описаные в интернете методы – это не наш выбор, поэтому предлагаем твоему вниманию нетривиальный способ, основанный на Active-X, поддельных электронных подписях и социальной инженерии. Наслаждайся!

Что такое Active-X и чем его кодят?

Active-X - это майкрософтовская технология внедрения в web-страницы и программы контролов (элементов управления). Контрол есть обычная библиотека с расширением DLL или OCX, которая выводит на web-страницу что-нибудь вроде кнопки с прыгающей картинкой. Кнопка прорисовывается, реагирует на мышедвижения и кнопконажатия, имеет свои свойства и методы, которыми можно управлять из JavaScript. Вспомним, например, мультики и баннеры на Macromedia Flash в окне IE. Это и есть Active-X.

Писать Active-X можно на C++, Delphi, теоретически даже на Ассемблере. Можно ваять их и на Visual Basic, но это скорее грустно, чем смешно. Для MS Visual C++ есть две основные альтернативы - MFC и ATL. MFC - очень мощная и гибкая библиотека, но ее нужно либо статически прилинковывать к своей программе (тогда exe’шник получается слишком большим), либо устанавливать DLL (что еще более муторно и чревато кошмаром DLL Hell).

Поэтому Active-X для IE пишут с помощью ATL. Чтобы испытать это на практике, загрузим VC++ 6.0, выберем File -> New -> Projects -> ATL COM AppWizard. В мастере можно сразу нажать Finish. Нашему взору откроется заготовка нового приложения ATL. Затем смело выбираем Insert -> New ATL Object -> Controls -> HTML Control, а дальше проходим по шагам мастера и ставим нужные параметры. Он сгенерирует каркас контрола, на который затем можно будет навешивать код для прорисовки кнопки, обработки нажатий на нее и прочих телодвижений.

Наш контрол - простая DLL

Сначала я так и сделал (точнее, просто переделал пример ATLButton из MSDN, который вообще очень интересен тем, кто собирается кодить Active-X-контролы). А потом задался вопросом, какой в этом смысл. Ведь наша цель - запустить вредоносный код. А для этого не нужно ни инициализировать COM, ни регистрировать контрол в реестре, и уж тем более не нужно рисовать кнопки на экране. В итоге получается, что Active-X не требуется вообще :).

Как всякая технология, Active-X базируется на другой технологии, а именно, на DLL. А в библиотеках DLL есть такая любопытная вещь, как функция DllMain, которую Windows вызывает при подгрузке и выгрузке библиотеки. Чтобы создать Active-X контрол, система будет обращаться к функциям DllRegisterServer и DllGetClassObject в нашей библиотеке, но перед этим ей так или иначе придется эту библиотеку загрузить. А что если разместить злой код в DllMain, с которой начинается эта цепочка вызовов?

BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID Reserved)

{MessageBox(0, "hacked!", "Xakep", 0);

//Здесь ставится произвольный код ;).

return TRUE; }

Вот и вся программа. Если убрать CRT, то останется всего 2,5 Кб. А самый простой ATL-контрол весит больше 30 Кб - что называется, почувствуйте разницу! Теперь создаем HTML-файл, в котором пишем что-нибудь вроде:

Содержание  Вперед на стр. 048-014-2