ВЗЛОМ / ОБЗОР ЭКСПЛОИТОВванный xls-файл. В результате у атакующего появится возможностьвыполнить произвольный код на локальной машинес правами пользователя, запустившего уязвимое приложение.EXPLOITЗапись OBJ в Excel определяет такие объекты, как Line,Rectangular, элемент управления CheckBox и т. д. Существуютразные типы OBJ-записей, отличающиеся дочерними записями.Структура дочерних записей идентична структуре файлов форматаBIFF.Это означает, что первые два байта представляют собойидентификаторы дочерней записи, следующие два байта указываютразмер данных, а далее следуют сами данные. Приведемсписок возможных дочерних записей:Дочерняя запись Значение ОписаниеftEnd 00h Конец OBJ-записи(Зарезервировано) 01h(Зарезервировано) 02h(Зарезервировано) 03hftMacro 04h Fmla-style macroftButton 05h Command buttonftGmo 06h Group markerftCf 07h Clipboard formatftPioGrbit 08h Picture option flagsftPictFmla 09h Picture fmla-style macroftCbls 0Ah Check box linkftRbo 0Bh Radio buttonftSbs 0Ch Scroll barftNts 0Dh Note structureftSbsFmla 0Eh Scroll bar fmla-style macroftGboData 0Fh Group box dataftEdoData 10h Edit control dataftRboData 11h Radio button dataftCblsData 12h Check box dataftLbsData 13h List box dataftCblsFmla 14h Check box link fmla-style macroftCmo 15h Данные объектаПервой всегда идет дочерняя запись ftCmo, а последней — ftEnd.Перечислим также поля подзаписи ftCmo:Смещение Имя поля Размер Содержимое0 ft 2 =ftCmo (15h)2 cb 2 Размер данных ftCmo4 ot 2 Тип объекта6 id 2 Идентификатор ID объекта8 grbit 2 Опциональные флаги14 (Reserved) 12 Зарезервировано; должно == 0Значения в функции sub_30164E23, относящиеся к дочернейзаписи, сохраняются в буфере. Далее, как следует из кода,выполняется обработка дочерней записи. Одной из функций,участвующих в обработке, является функция sub_3012FABC:.text:3012FAC8 mov edi, [ebp+arg_0].text:3012FACB xor esi, esi.text:3012FACD cmp dword_307E1FB4, esi.text:3012FAD3 mov ebx, [edi+6].text:3012FAD6 mov [ebp+var_4], esi.text:3012FAD9 mov [ebp+var_4C], esi.text:3012FADC mov [ebp+var_48], esi.text:3012FADF mov [ebp+var_44], esi.text:3012FAE2 mov [ebp+var_40], esi.text:3012FAE5 ja loc_30274818.text:3012FAEB cmp dword_307DB7A4, esi.text:3012FAF1 jnz short loc_3012FAFB.text:3012FAF3 cmp ebx, esi.text:3012FAF5 jnz loc_30127293....text:30127293 push dword ptr [ebx+4].text:30127296 call sub_30127263В первой строке дизассемблерного листинга происходит копированиеадреса буфера, содержащего записи ftCmo, в регистр edi.Затем в ebx копируется значение по смещению 0x6 в этомбуфере. Если ты обратил внимание на структуру ftCmo, то долженбыл заметить, что, начиная с этого офсета, 12 байт резервируются.Поэтому результат, который копируется в ebx, представляетсобой первые четыре байта зарезервированного значения.Если ты посмотришь на последующий код, то увидишь, чтопо адресу 0x30127293 значение контролируемого нами регистраebx+4 заносится в стек. Впоследствии оно используется в качествеаргумента функции sub_30127263. На этом шаге фактическии возникает уязвимость, поскольку никаких проверок того, допустимоли значение для ebx, не проводится.Функция sub_30127263 прибавляет к значению аргумента(которое мы контролируем) 0x10 и передает результат в функциюMSO_804..text:30127263 push ebp.text:30127264 mov ebp, esp.text:30127266 mov eax, [ebp+arg_0].text:30127269 push esi.text:3012726A mov esi, [eax+0Ah].text:3012726D push esi.text:3012726E call MSO_804 ;[307D538C]...Функция MSO_804 увеличивает свой аргумент на 0x3c и возвращаетполученный результат.30E27FB0PUSH EBP30E27FB1MOV EBP,ESP30E27FB3MOV EAX,DWORD PTR SS:[EBP+8]30E27FB6TEST EAX,EAX30E27FB8JE mso.30C7A57230E27FBEMOV EAX,DWORD PTR DS:[EAX+3C]30E27FC1POP EBP30E27FC2 RETN 4Значение, возвращаемое функцией MSO_804 (до сих пор находящеесяпод нашим контролем) сохраняется в регистре ecx.А затем следует констркуция call dword ptr [ecx+0x11].......text:30127274 test eax, eax.text:30127276 jz short loc_3012728E.text:30127278 mov ecx, [eax].text:3012727A lea edx, [ebp+arg_0].text:3012727D push edx.text:3012727E push 0BEh.text:30127283 push esi.text:30127284 push eax.text:30127285 call dword ptr [ecx+11Ch];
coding