Старый 19.02.2014, 09:10   #11
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Статья по сабжу на французском в фурнале XMCO
http://xmco.fr/actusecu.html

Также разбор вариации этого эксплойта из состава TDL4:
http://labs.bromium.com/2013/10/22/t...-enhancements/

Последний раз редактировалось SynQ; 12.07.2014 в 10:24..
SynQ вне форума   Ответить с цитированием
Старый 19.02.2014, 20:15   #12
Fffort
 
Регистрация: 19.02.2014
Сообщений: 2
Репутация: 0
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
Никита Тараканов нашел еще один баг в win32k.sys рядом с EPATHOBJ:


Код:
.text:002CBC46 ; __stdcall NtGdiPATHOBJ_bEnum(x, x)
.text:002CBC46 _NtGdiPATHOBJ_bEnum@8 proc near         ; DATA XREF: .data:0031BC08o
.text:002CBC46
.text:002CBC46 var_34          = dword ptr -34h
.text:002CBC46 var_30          = dword ptr -30h
.text:002CBC46 var_2C          = dword ptr -2Ch
.text:002CBC46 var_28          = dword ptr -28h
.text:002CBC46 var_24          = byte ptr -24h
.text:002CBC46 var_20          = dword ptr -20h
.text:002CBC46 var_1C          = dword ptr -1Ch
.text:002CBC46 ms_exc          = CPPEH_RECORD ptr -18h
.text:002CBC46 arg_0           = dword ptr  8
.text:002CBC46 arg_4           = dword ptr  0Ch
.text:002CBC46
.text:002CBC46                 push    24h
.text:002CBC48                 push    offset stru_31A158
.text:002CBC4D                 call    __SEH_prolog4
.text:002CBC52                 xor     ebx, ebx
.text:002CBC54                 mov     [ebp+var_34], ebx
.text:002CBC57                 mov     [ebp+var_30], ebx
.text:002CBC5A                 mov     [ebp+var_2C], ebx
.text:002CBC5D                 mov     esi, ebx
.text:002CBC5F                 call    ds:__imp__PsGetCurrentThreadWin32Thread@0 ; PsGetCurrentThreadWin32Thread()
.text:002CBC65                 mov     edi, [eax+20h]
.text:002CBC68                 mov     [ebp+var_1C], edi
.text:002CBC6B                 mov     [ebp+var_28], edi
.text:002CBC6E                 mov     [ebp+var_24], bl
.text:002CBC71                 lea     ecx, [ebp+var_28]
.text:002CBC74                 call    ?bInit@UMPDENGCALL@UMPDOBJ@@QAE_NXZ ; UMPDOBJ::UMPDENGCALL::bInit(void)
.text:002CBC79                 test    al, al
.text:002CBC7B                 jnz     short loc_2CBC8F
.text:002CBC7D
.text:002CBC7D loc_2CBC7D:                             ; CODE XREF: NtGdiPATHOBJ_bEnum(x,x)+B0j
.text:002CBC7D                 cmp     [ebp+var_24], bl
.text:002CBC80                 jz      short loc_2CBC88
.text:002CBC82                 mov     eax, [ebp+var_28]
.text:002CBC85                 mov     [eax+10h], ebx
.text:002CBC88
.text:002CBC88 loc_2CBC88:                             ; CODE XREF: NtGdiPATHOBJ_bEnum(x,x)+3Aj
.text:002CBC88                 xor     eax, eax
.text:002CBC8A                 jmp     loc_2CBDA0
.text:002CBC8F ; ---------------------------------------------------------------------------
.text:002CBC8F
.text:002CBC8F loc_2CBC8F:                             ; CODE XREF: NtGdiPATHOBJ_bEnum(x,x)+35j
.text:002CBC8F                 push    [ebp+arg_0]
.text:002CBC92                 mov     ecx, edi
.text:002CBC94                 call    ??$GetDDIOBJ@U_PATHOBJ@@@UMPDOBJ@@QAEPAU_PATHOBJ@@PAU1@@Z ; UMPDOBJ::GetDDIOBJ<_PATHOBJ>(_PATHOBJ *)
.text:002CBC99                 mov     ecx, eax
.text:002CBC9B                 test    ecx, ecx
.text:002CBC9D                 jz      loc_2CBD55
.text:002CBCA3                 test    dword ptr [edi+0D0h], 100h
.text:002CBCAD                 jz      short loc_2CBCE1
.text:002CBCAF                 cmp     [ecx+8], ebx
.text:002CBCB2                 jnz     short loc_2CBCE1
.text:002CBCB4                 cmp     ?gfUMPDDebug@@3HA, ebx ; int gfUMPDDebug
.text:002CBCBA                 jz      short loc_2CBCCE
.text:002CBCBC                 push    0EF0h
.text:002CBCC1                 push    offset aWindowsCore_36 ; "windows\\core\\ntgdi\\gre\\umpdeng.cxx:%d:N"... <---- oh thanks MS for such info ;)
.text:002CBCC6                 call    ds:__imp__DbgPrint
.text:002CBCCC                 pop     ecx
.text:002CBCCD                 pop     ecx
.text:002CBCCE
.text:002CBCCE loc_2CBCCE:                             ; CODE XREF: NtGdiPATHOBJ_bEnum(x,x)+74j
.text:002CBCCE                 mov     edi, [ebp+arg_4] second arg
.text:002CBCD1                 mov     [edi+4], ebx <---- zeroing arbitrary memory!!! (no ProbeForWrite check!!!!!)
.text:002CBCD4                 mov     [edi], ebx <----
.text:002CBCD6                 mov     [edi+8], ebx <---- 

reaching this code is an excercise for the reader ;)
PS А в 2003 винде есть сравнение этого аргумента с _W32UserProbeAddress Microsoft...
К сожалению, неэксплуатабельный только(:
Fffort вне форума   Ответить с цитированием
Старый 19.02.2014, 20:20   #13
Fffort
 
Регистрация: 19.02.2014
Сообщений: 2
Репутация: 0
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
Статья по сабжу на французском в фурнале XMCO
http://xmco.fr/actusecu.html
Хм, по-моему, один из самых понятных обзоров. У самого Тависа в объяснениях в финальном x86 сплойте, имхо, жуткая каша.
P.S. Всё хотел сделать подробный обзор one-shot варианта на русском языке, но не уверен, что он сейчас кому-то нужен.
Fffort вне форума   Ответить с цитированием
Ответ

Метки
privilege escalation, ring0, windows

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot