martes, 20 de septiembre de 2016

Resolviendo (Billy Madison 1.1 CTF - Walkthrough)

Sin dudas un gran CTF, congrats a Brian Johnson. Como se me hizo costumbre y adicción a estos ctfs, es mi tercer writeup. Les dejo mis dos anteriores Walkthroughs:

https://insecuritynotes.blogspot.com/2016/09/completando-ctf-breach21.html
https://insecuritynotes.blogspot.com/2016/08/completando-ctf-pwnlab-walkthrough.html

O en la misma web de VulnHub: https://www.vulnhub.com/author/cnfs,358/























Billy Madison 1.1 @ Vulnhub.com.

En mi caso la ip objetivo es : [192.168.0.110]. Procedo a escanear el sistema objetivo con nmap y obtenemos el siguiente resultado:


  • root@X55:/home/cnfs# nmap -T5 -v -A 192.168.0.110 -p0-65535

  1. Discovered open port 445/tcp on 192.168.0.110
  2. Discovered open port 23/tcp on 192.168.0.110
  3. Discovered open port 22/tcp on 192.168.0.110
  4. Discovered open port 139/tcp on 192.168.0.110
  5. Discovered open port 80/tcp on 192.168.0.110
  6. Discovered open port 2525/tcp on 192.168.0.110
  7. Discovered open port 69/tcp on 192.168.0.110


Ok, 7 puertos.. vamos a investigar.

# PORT_445 y 139:

Pertenece a SMB. Verificamos y nos damos cuenta que permite el ingreso de usuario anónimo:


Si hacemos un 'more ebd.txt' logramos leer el siguiente contenido:

"Erics backdoor is currently CLOSED"

Mm que raro nos dará info veraz sobre el estado de algún troyano en el servidor?.. sigamos. Los archivos restantes los verifique y no logre obtener info relevante, así mismo la carpeta IPC$ no me permitía hacer nada de momento.

# PORT_23:

El puerto por default de telnet... veamos:








Wow... se pone interesante.  Parece que hemos sido 'baneados' momentáneamente, y si intentamos re-conectar al puerto con netcat, ya no nos deja.

Me llama la atención esta frase "I don't use ROTten passwords like rkfpuzrahngvat anymore"...

ROTten.. passwords.. rkfpuzrahngvat... mmm todo parece indicar que se refiere a un cifrado. Y creo estar en lo cierto, ROT13 es un cifrado Cesar que suele utilizarse para esconder un texto. Se suele cambiar las letras por 13 posiciones del abecedario adelante. Es decir para "R"+13 lugares hacia delante seria "E" y así.. utilizo el diccionario INGLES en este caso. Compruebo con la siguiente web que me facilita el trabajo:

































Y el resultado es: exschmenuating

Mmmm espero tener razón y que esto me sirva en algún momento.
Seguimos investigando los puertos.

# PORT_22:

Intente de mil maneras conectarme y tratar de obtener información relevante pero no logro obtener nada. Procedo a seguir con otro puerto.

# PORT_80:

Nos conectamos via browser al puerto HTTP y nos arroja el siguiente resultado:


















Bueno parece que nos da un poco de información sobre que pudo haber sucedido.. nos dice que si estamos leyendo esto, es porque ha clickeado en el link que le enviaron y que la pc fue bloqueada y no se puede acceder al trabajo en el que tanto ha trabajado Billy para graduarse.

# PORT_2525:

No nos da mucha información solo podemos rescatar un banner que nos da referencia a que esta corriendo "220 BM ESMTP SubEthaSMTP", si googleo un poco entiendo según la siguiente web (https://github.com/voodoodyne/subethasmtp) que es una implementacion SMTP en java. Pero no podemos saber mas nada sobre esto actualmente... seguimos.

# PORT_69:

Si revisamos con atención el resultado de NMAP nos decía lo siguiente sobre el puerto 69:

  • 69/tcp   open   http  BaseHTTPServer
  • | http-generator: WordPress 1.0
  • | http-methods: 
  • |_Supported Methods: HEAD GET POST OPTIONS
  • |_http-server-header: MadisonHotelsWordpress
  • |_http-title: Welcome | Just another WordPress site
Parece ser que corre un tipo de Wordpress site... vamos a verificarlo via browser:































Efectivamente, vemos que parece ser un tipo de blog. Voy a proceder a correr la conocida herramienta WPSCAN y ver en que puede ayudarme:

  • cnfs@X55:~/bin/wpscan$ ruby ./wpscan.rb --url 192.168.0.110:69

Y el resultado es el siguiente:



















Hay algunas cosas que resaltar, parece ser un Wordpress 1.0 lanzado en el 2004... sin embargo tiene un theme que pertenece al 2011.. (si bien no es relevante esto, hace ruido..) sin ningún tipo de plugin instalado, por otro lado no logra encontrar el path del THEME. "wp-content" parece no existir.

Y por ultimo el header segun WPSCAN lo resalta como interesante: "MadisonHotelsWordpress".

Esto me hizo volver al mensaje del netcat en el puerto 23. Donde descifre el mensaje en ROT13, intente agregarlo como "http://192.168.0.110:69/exschmenuating/".. sin embargo no funciono.. ya dándome por vencido pensando que era una mala idea, intente ingresarlo en el default HTTP puerto 80: "http://192.168.0.110/exschmenuating/", y... funciono!:
















Vemos al parecer que son unas notas hechas por Eric, (el que intenta arruinar la vida de Billy). Anota que intentara atacar otras victimas, entre ellas la novia de Billy, "Veronica".. intentara atacarla mediante un phishing y ver si ella cae. Luego por la ultima nota vemos que al parecer funciono, Veronica cayo ante el phishing.

Nos da a entender que el "capturo todo el trafico" y el nombre del file contiene la palabra "veronica". Luego hay un monitor log que indica las ip's baneadas. Entre ellas en la actualidad aparece mi IP jeje... recuerdan cuando me baneo el telnet?. 

Seguramente haya otras maneras de hacerlo quizás sin usar tantos recursos, o en algún wordlist pre-creado por internet, pero prefiero utilizar crunch como modo 'creativo' y crear mi propio Wordlist, mediante el cual lo invocaremos con dirbuster para bruteforcear el path http y encontrar el ".cap" que dice que guardo.

Luego de algunos testeos decido crear con Crunch el siguiente wordlist:










Una vez generado, lo invoco con dirbuster y bruteforceo el path http:




Y al parecer funciono, obtengo un código [200] con el siguiente file:






FILE: "012987veronica.cap"









Una vez descargado lo siguiente era abrir el archivo ".cap" con el wireshark y analizarlo.

Bien, logramos entender como es que Veronica cayo en el PHISHING enviado por Eric.
Hay una serie de e-mails capturados en el "012987veronica.cap". El primero de ellos:


















Luego con la seguidilla de mails, Veronica le responde que el Antivirus bloqueo ese archivo, que intente subirlo el directamente via FTP. El cual permanece oculto hasta que se lo invoca mediante el "Spanish Armada" combo... mmm que sera esto. Y nos adjunta una direccion de Youtube en relación a BillyMadison y su teacher (hermosa).

El le contesta que por favor le cree la siguiente cuenta en el FTP username: "eric" y el password "ericdoesntdrinkhisownpee".. Luego ella le responde que fue creada, el envía un nuevo email diciéndole que uplodeo el file y que debería ejecutarlo ella con su cuenta. Finalmente ella le envía el ultimo e-mail reportandole que ejecuto el archivo y que su pc se comporta de manera extraña, el antivirus reporta alerta y que apagara la pc luego de enviarle este ultimo email ya que esta preocupada sobre los archivos que contiene la pc y sobre todo los de Billy sobre su trabajo final de grado.

Termina allí la captura "012987veronica.cap".

Activando el FTP service: Port Knocking.

Ok, para activar el servicio ftp remoto, en el mail de la captura de trafico nos decía que se activaría solo si recibía el "Spanish Armada" combo. Y nos proveía un video de youtube.

Si vemos el video, la teacher le pregunta por "spanish armada" y Billy responde una serie de fechas incorrectas... opto por entender que ese es el 'combo'. Anoto las fechas que dice: (mejoren su listening de Ingles.. o.. un pequeño truquito: activan subtitulos ;D).

El combo: 1466; 67; 1469, 1514; 1981; 1986.

Ok si prestamos atención al mail, nos dice que se activara el ftp si recibe el spanish armada combo, esto podría asimilarse a "Port Knocking". El port knocking es una manera discreta de abrir puertos específicos que el firewall mantiene cerrado. Requiere hacer ciertos intentos de conexiones a una determinada serie o 'combo' de puertos. Una vez sabiendo esto, y determinando que ese combo del video son puertos, vamos a intentar hacer un script para verificar el port knocking, siguiendo referencias de esta web:












Quedaría algo así el script:


  • for port in 1466 67 1469 1514 1981 1986; do nmap -Pn --host_timeout 201 --max-retries 0 -T5 -p $port 192.168.0.110; done
Verificamos:

















Luego intento conectar por FTP, cruzo los dedos y.. :








Bingo!!.. verifico si puedo loguear con usuario Anónimo y lo logro. No hay mucho que ver solo un file que parece ser el archivo de final de grado de Billy!..


  • $> cat Billys-12th-grade-final-project.doc 
  • HHAHAAHAHAH I CAN'T BELIEVE YOU ACTUALLY THOUGHT THIS WAS IT!!!!  WHAT A LOSER! Why don't you go pass
  • out by the pool for another hour!
  • -EG


Parece que nos engaño Eric. De todos modos recuerdo que en uno de los mails, Eric le decía a Veronica que le creara una cuenta de FTP con una especifica credencial. Verificamos si funciona:





















Ok estamos dentro, verificamos que existen varios archivos, procedo a revisarlos uno por uno, en su mayoría son 'exploits', y luego encuentro un ".notes" interesante, ya que me da cierta información importante:






















Resumiendo, posee un backdoor (como suponiamos desde el principio), en el sistema de Billy, el cual funciona en el puerto 22. Este parece activarse enviando un e-mail en el cual debe incluirse el siguiente texto "My kid will be a____ _____", y luego comenta que podra loguearse con su wifi passwd, no lo vio en el billy folder, pero quizas este en lo de Veronica.. Ok let's go.

La respuesta esta en ese link de youtube. En donde dice que sera un "soccer player.." ;D

Ok, procedo a buscar al manera para enviar un email con el mensaje "My kid will be a soccer player".. recuerdo que había prestado atención a la ventana de wireshark donde analizaba esos mails capturados, y veía que los mails habían sido enviados desde swaks:





Procedo a instalarlo y familiarizarme con su uso mirando el swaks man.
Luego de unos minutos.. creo que intento dar con la estructura correcta luego de varios intentos para enviarlo:















































Considerando que no hay nada que nos avise si funciono o no, tendré que realizar un escaneo nuevamente con NMAP ya que el puerto 22 me da señales de nada interesante ahora mismo. Veamos si hay algún puerto nuevo abierto en esta caja de Pandora:














We have a new open port!! el puerto 1974/tcp esta abierto. Antes no salia. Veamos:

** Port 1974/tcp open OpenSSH 7.2p2  (Ubuntu Linux; protocol 2.0) **

Bien, ya tenemos el puerto SSH abierto, pero nos falta el password. Según la pista que nos dio al leer el file .notes decía que la passwd podría estar en lo de Veronica home. Tendremos que intentar buscar a toda costa la contraseña, por ende intentaremos crackear el FTP de Veronica.

Me pongo a hacer una rápida búsqueda en Google sobre los mejores Wordlist y encuentro varias recomendaciones sobre el mismo Wordlist, Rockyou.txt:


















El gentil usuario kurtisebear, comenta de donde bajar wordlist interesantes. Procedo a hacerle caso y bajarlo de http://downloads.skullsecurity.org/passwords/rockyou.txt.bz2

Utilizo HYDRA para intentar crackear el password FTP, considerando que es un wordlist realmente extenso algo asi como 14Millones de palabras, voy a intentar hacer un grep de los passwords relacionados con veronica y procedo a crackear:












Voila!, password found!.

Logueamos y nos encontramos con dos archivos. Uno pertenece a un email entre Billy y Veronica...contándole que dejo a mitad de camino el crackeo de wireless de Eric y el otro es un ".cap" del trafico en cuestión. Procedemos a bajarlo, recordar antes activar el modo Binary en el ftp para descargar el archivo, sino bajara de manera corrupta.

Analizamos con wireshark el archivo y efectivamente comprobamos que se trata de trafico wireless. Continuando con la buena racha de nuestro diccionario rockyou.txt, vamos a invocarlo para crackear con aircrack-ng el .cap:



















Luego de casi 19 minutos, funciono. La passwd es: triscuit*.















Logre loguear como Eric.. verifique los files de su home, entre otras cosas y no logro dar con nada interesante, luego de investigar y de los exploits que habíamos encontrado que al parecer ninguno funciono, trato de buscar archivos con suid, al igual que ya es costumbre con las CTF de Vulnhub anteriores..

















Ese resultado de la primer linea me llama la atención, parece interesante, luego de investigar un poco por Google, no logro encontrar nada sobre eso.. pero se que el binario ese corre como "ROOT". Al ejecutarlo me devuelve el modo de uso:

  • Usage: ./donpcgd path1 path2
Hago una prueba de pasar por el path1 un directorio con privilegios root y luego creo el archivo null2 en /tmp:







Se creo el archivo en /tmp/ con privilegios de ROOT. Podríamos hacer dos cosas ahora, una seria optar por crear una conexión inversa mediante netcat, o la otra sabiendo que es un ubuntu agregar el usuario eric a sudoers. Creando una linea en cron.hourly para que a la hora se ejecute y nos permita ser Root. Creo que la segunda es mas 'estable' y permite mayor persistencia en el sistema.








Lo que hice fue crear un file en /tmp/.. el cual contiene permisos de 'eric', luego invoque al binario vulnerable para que use ese archivo creado como path1 y redireccione como path2 a cron.hourly.. en este lugar no tengo permisos así que con el binario vulnerable salto ese permiso y creamos un script echo que agrega al usuario eric a sudoers. Si todo sale bien, en menos de 60 minutos, permitiría ser ROOT.













Luego de 1 hora y minutos, funciono. Soy ROOT!. Genial.. alistamos directorio e investigamos la carpeta de root.... ya que esto no finaliza acá, tenemos que encontrar el archivo de Billy de final de grado.

Encontrando el archivo de final de grado.











Luego de investigar cada archivo que contenía la carpeta /root/, logro divisar que dentro de la carpeta /root/ssh/ existe un file llamado canyoussh.sh, este archivo al hacerle un cat, nos da a entender que es el encargado de abrirnos el backdoor al sistema.

Se encarga de verificar mediante el grep si la frase de "My kid will be a soccer player" fue enviada y acepta mediante iptables la conexión entrante al puerto 1974. Ademas escribe en el archivo ebd.txt el texto que vimos en un principio de todo sobre que el acceso al Backdoor esta abierto o cerrado.

Bien, si nos dirigimos a /root/PRIVATE/, nos encontramos con lo siguiente:













El archivo BowelMovement es de tipo "data" y el hint.txt nos dice que la contraseña se encuentra en ese Wikipedia link.

Para trabajar mas cómodo envié el archivo BowelMovement via scp a mi pc. Luego de un buen rato intentando iluminar la lampara, me di cuenta que algo que es de tipo 'data' y contiene password, podría ser una unidad virtual, generado con programas como el viejo truecrypt etc.. Procedo a trabajar con veracrypt una solución mas moderna, y al parecer la evolución al proyecto antiguo truecrypt.

Bien, si es como pienso a esta altura y espero que si porque ya no tengo mas ideas, como todo disco/partición encriptada necesita su palabra mágica. En el archivo hint.txt decía que la password estaba en el link Wikipedia, realmente es grande el contenido como para ir probando uno por uno. Asi que primero generaremos en base a esa wikipedia un w0rdlist para crackear el archivo BowelMovement con TrueCrack.

Generando el wordlist:







Una vez generado el wordlist, en mi caso: w0rdlist_wiki, lo invocaremos a TrueCrack para realizar un bruteforce:












Excelente!!.. procedemos a usar veracrypt para montar la unidad:























Descomprimimos el secret.zip:

















Y el archivo de final de grado de Billy recuperado:


















Thank you Brian Johnson!! - THE_END.

No hay comentarios:

Publicar un comentario en la entrada

Deja un comentario..