Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #91, ИЮЛЬ 2006 г.

Обзор эксплойтов

Крис Касперски ака мыщъх

Хакер, номер #091, стр. 091-060-5


Bernhard Mueller, работающий в австрийской компании SEC Consult Unternehmensberatung GmbH, нашел одно из таких мест (о чем и рапортовал разработчикам Оперы, немедленно исправившим версию 8.54 и текущую — 9.0), однако в программе по-прежнему присутствует большое количество ошибок подобного типа, которые ждут своего хакера, поэтому нелишне присмотреться к уже заткнутой дырке поподробнее.

Листинг 6: дизассемблерный листинг уязвимой функции n2k_vulnerably со знакомым переполнением

.text:67B8CEFE n2k_vulnerably proc near ; CODE XREF: sub_67B4DB72+9D6?p

.text:67B8CEFE ; sub_67B8AE6E+1B4?p

.text:67B8CEFE

.text:67B8CEFE arg_src = dword ptr 4

.text:67B8CEFE arg_len = dword ptr 8

.text:67B8CEFE

.text:67B8CEFE A1 60 EF F9 67 mov eax, dword_67F9EF60 ; pObj

.text:67B8CF03 53 push ebx ; сохраняем ebx

.text:67B8CF04 56 push esi ; сохраняем esi

.text:67B8CF05 57 push edi ; сохраняем edi

.text:67B8CF06 8B 7C 24 14 mov edi, [esp+0Ch+arg_len] ; edi := arg_len

.text:67B8CF0A 8B 70 40 mov esi, [eax+40h] ; pDestination

.text:67B8CF0D 81 FF 00 10 00 cmp edi, 1000h ; проверка длины arg_len

.text:67B8CF13 8B D9 mov ebx, ecx ; this call

.text:67B8CF15 7C 05 jl short loc_67B8CF1C ; see! over here!

.text:67B8CF17 BF FF 0F 00 00 mov edi, 0FFFh ; «усечение» arg_len

.text:67B8CF1C

.text:67B8CF1C loc_67B8CF1C: ; CODE XREF: n2k_vulnerably+17?j

.text:67B8CF1C 57 push edi ; size_t

.text:67B8CF1D FF 74 24 14 push [esp+10h+arg_src] ; wchar_t *

.text:67B8CF21 56 push esi ; wchar_t *

.text:67B8CF22 E8 E9 C0 31 00 call _wcsncpy ; копируем имя шрифта

.text:67B8CF27 66 83 24 7E 00 and word ptr [esi+edi*2],0 ; ставим завершающий нуль

.text:67B8CF2C 83 C4 0C add esp, 0Ch ; выталкиваем аргументы

.text:67B8CF2F 8B CB mov ecx, ebx ; this call

.text:67B8CF31 56 push esi ; скопированный arg_len

.text:67B8CF32 E8 D9 FD FF FF call sub_67B8CD10 ; обрабатываем имя шрифта

.text:67B8CF37 66 85 C0 test ax, ax ; все ок?

.text:67B8CF3A 7D 0C jge short loc_67B8CF48 ; имеем хэндл

.text:67B8CF3C 8B 8B D0 05 00 mov ecx, [ebx+5D0h] ; обработчик ошибки

.text:67B8CF42 E8 75 F8 FF FF call sub_67B8C7BC ; eax := [ecx]

.text:67B8CF47 40 inc eax ; eax++

.text:67B8CF48

.text:67B8CF48 loc_67B8CF48: ; CODE XREF: n2k_vulnerably+3C?j

.text:67B8CF48 5F pop edi ; восстанавливаем edi

.text:67B8CF49 5E pop esi ; восстанавливаем edi

.text:67B8CF4A 5B pop ebx ; восстанавливаем ebx

.text:67B8CF4B C2 08 00 retn 8 ; выталкиваем аргументы

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