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


массив offsets хранит


В начале массива расположена довольно характерная структура, состоящая из двух двойных слов, первое из которых включает в себя двухбайтовую команду безусловного перехода JMP SHORT (опкод— EBh), дополненную до двойного слова парой NOP'ов (впрочем, поскольку, они все равно не исполняются, здесь может быть все, что угодно). Следующее двойное слово указывает куда-то вглубь адресного пространства — 004014E9h и, судя по значению, принадлежит прикладному приложению. В данном случае — программе mqsvc.exe, реализующей службу Message Queuing. Комментарий, заботливо оставленный создателем exploit'а, говорит, что по этому адресу он ожидает увидеть конструкцию pop reg/pop reg/retn. Это — классическая последовательность, используемая для передачи управления через подложные SEH-фреймы, подробно описанная в статье "Эксплуатирование SEH в среде Win32" (http://www.securitylab.ru/contest/212085.php), написанной houseofdabus'ом. Он же написал и разбираемый нами exploit.

Допустим, никакого комментария у нас бы не было. И что тогда? Загружаем mqsvc.exe в hiew, двойным нажатием ENTER'а переходим в дизассемблерный режим, давим <F5>
и вводим адрес ".4014E9" (точка указывает, что это именно адрес, а не смещение).

Видим:

.004014E9: 5F pop    edi    ; вытолкнуть одно двойное слово из стека

.004014EA: 5E pop    esi    ; вытолкнуть следующее двойное слово

.004014EB: C3 retn          ; выткнуть адрес возврата и передать по нему управление



Содержание раздела