Este fin de semana fue el congreso Sec/Admin en Sevilla al que lamentablemente no pude asistir, pero el CTF era semipresencial, con 9 retos online y 2 ‘in situ’, así que pude divertirme un rato desde casa.
Como se puede ver en las fotos, el congreso estuvo genial:
Y aquí va mi solucionario del CTF:
PRUEBA 1
Editando el código fuente de la página podemos ver un JavaScript:
<script> var FLAG = (!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]) FLAG = FLAG + 1337; FLAG = FLAG * 7; </script>
Para resolverlo basta con descargar la página en local y poner un alert al final del código:
<script> FLAG = FLAG + 1337; FLAG = FLAG * 7; alert(FLAG); </script>
El flag para pasar el reto es: 10990
PRUEBA 2
Al cargar la página nos pone:
El archivo donde se encuentra el flag se llama prueba2.html
De forma similar al anterior, editamos el código fuente y vemos otro JavaScript:
<script language="javascript"> <!-- // function decode_base64(s) { var e = {}, i, k, v = [], r = '', w = String.fromCharCode; var n = [[65, 91], [97, 123], [48, 58], [43, 44], [47, 48]]; for (z in n) { for (i = n[z][0]; i < n[z][1]; i++) { v.push(w(i)); } } for (i = 0; i < 64; i++) { e[v[i]] = i; } for (i = 0; i < s.length; i+=72) { var b = 0, c, x, l = 0, o = s.substring(i, i+72); for (x = 0; x < o.length; x++) { c = e[o.charAt(x)]; b = (b << 6) + c; l += 6; while (l >= 8) { r += w((b >>> (l -= 8)) % 256); } } } return r; } function pasuser(form) { var bri; var j0 = "BxRGFsQowGt"; var jo = "345563"; var ctx = new String('bGFsYWxhDQo='); var ni = j0; var la = decode_base64(ctx); var li = "trokioff"; jo = jo + 8941; var ti = la.toString(); var fi = jo; j0 = li.concat(li,jo); bri = form.pass.value; if ((form.id.value == "SecAdmin") && (bri == fi)) { alert("FLAG ENCONTRADA"); } else { alert(fi); alert("Usuario o Password Invalido"); } } --> </script>
Al igual que antes, con un simple alert podemos hacer que nos escupa la flag:
var bri; var j0 = "BxRGFsQowGt"; var jo = "345563"; var ctx = new String('bGFsYWxhDQo='); var ni = j0; var la = decode_base64(ctx); var li = "trokioff"; jo = jo + 8941; var ti = la.toString(); var fi = jo; j0 = li.concat(li,jo); alert(fi); --> </script>
El flag para pasar el reto es: 3455638941
PRUEBA 3
De nuevo otro JavaScript:
<script> eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('m f(s){3 e={},i,k,v=[],r=\'\',w=C.A;3 n=[[y,D],[G,F],[4,u],[d,9],[g,4]];2(z j n){2(i=n[z][0];i<n[z][1];i++){v.p(w(i))}}2(i=0;i<q;i++){e[v[i]]=i}2(i=0;i<s.7;i+=5){3 b=0,c,x,l=0,o=s.a(i,i+5);2(x=0;x<o.7;x++){c=e[o.E(x)];b=(b<<6)+c;l+=6;B(l>=8){r+=w((b>>>(l-=8))%h)}}}t r}',43,43,'||for|var|48|72||length||44|substring|||43||hh|47|256||in|||function|||push|64|||return|58||||65||fromCharCode|while|String|91|charAt|123|97'.split('|'),0,{})); function x(form) { var bri; var j0 = "BxRGFsQowGt"; var jo = "r35r5gtsvvgdvgsb"; var ctx = new String('bGFsYWxhDQo='); eval(hh("dmFyIHRpaz1kb2N1bWVudC50aXRsZTsg")); eval(hh("dmFyIGZsZz0iNzE4ODQ1NzE2MyI7")); var ni = j0; eval(hh("dmFyIGxhPWhoKGN0eCk7")); var li = "trokioff"; var tak = tik; var ti = la.toString(); var fi = jo; j0 = li.concat(li,jo); bri = form.pasw.value; if ((form.user.value == "SecAdmin") && (bri == tak)) { eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0 E="F D, C v A B G";0 m="H M, N L K I J u b";0 3="9 7 2 6 5 4 8 s r o";0 k="f 1 i, O 1 P y a Y 10 2 Z 11 ";0 12="a x g h V R W e w g j y p l n q a d c z x t y U T S Q";X(m);',62,65,'var|comemos|le|ycopas|BIRRA|una|pille|4lguien|al|Qu3||FLAG||||Hoy|||pavooo||capedales||||F4v0r|||p0r|d3v3l0p3r||la|tikitun|||||patum|kin|chinchutraka|Aboebe|tolo|Abanibi|taun|p4ssw0rd|3st4s|busc4nd0|qu3|r3cu3rd4|Enc0ntr4d0|p3r0|hoy|pavoooo|69875|cmn|444|ER|bh|ert|elkjop|alert|quien|guste|no|ee|ato'.split('|'),0,{})); } else { alert("Usuario o Password Invalido"); } } </script>
En la URL http://matthewfl.com/unPacker.html podemos desempaquetar las funciones y nos queda:
function hh(s) { var e= { } ,i,k,v=[],r='',w=String.fromCharCode; var n=[[65,91],[97,123],[48,58],[43,44],[47,48]]; for(z in n) { for(i=n[z][0]; i<n[z][1]; i++) { v.push(w(i)) } } for(i=0; i<64; i++) { e[v[i]]=i } for(i=0; i<s.length; i+=72) { var b=0,c,x,l=0,o=s.substring(i,i+72); for(x=0; x<o.length; x++) { c=e[o.charAt(x)]; b=(b<<6)+c; l+=6; while(l>=8) { r+=w((b>>>(l-=8))%256) } } } return r }
var tolo="Abanibi Aboebe, chinchutraka tikitun patum kin taun"; var m="p4ssw0rd Enc0ntr4d0, p3r0 r3cu3rd4 qu3 3st4s busc4nd0 la FLAG"; var ycopas="Qu3 4lguien le pille una BIRRA al d3v3l0p3r p0r F4v0r"; var capedales="Hoy comemos pavooo, hoy comemos pavoooo y a quien no le guste ee "; var ato="a x g h ert cmn elkjop e w g j y p l n q a d c z x t y bh ER 444 69875"; alert(m);
En la segunda función nos da una pista pero no aparece la flag. Sin embargo, vemos algunos valores en base64. Uno de ellos nos da la flag:
unbase64(dmFyIGZsZz0iNzE4ODQ1NzE2MyI7)='var flg="7188457163";'
El flag para pasar el reto es: 7188457163
PRUEBA 4
Podemos ver en pantalla algunas imágenes que analizaremos con stegsolve y obtenemos algunas cosas interesantes:
Tambien podemos llegar a estos valores con un simple strings de las imágenes:
<photoshop:TextLayers> <rdf:Bag> <rdf:li rdf:parseType="Resource"> <photoshop:LayerName>Wh3r3 1s the c0de? </photoshop:LayerName> <photoshop:LayerText>Wh3r3 1s the c0de? </photoshop:LayerText> </rdf:li> <rdf:li rdf:parseType="Resource"> <photoshop:LayerName>Look d33p 1ns1de</photoshop:LayerName> <photoshop:LayerText>Look d33p 1ns1de</photoshop:LayerText> </rdf:li> </rdf:Bag> </photoshop:TextLayers>
La solución es un poco de ciencia ficción, puesto que la flag para pasar el reto es la concatenación de este número encontrado y el nombre de uno de los ficheros: 89932.jpg
El flag para pasar el reto es: 01843989932
PRUEBA 5
Nos encontramos un fichero ZIP cuya contraseña había que adivinar y, que resultó ser: secadmin.
Dentro del ZIP tenemos un script en python que basándose en un CVS dibuja todas las IPs creando una especie de mapa del mundo.
El bombre de la imagen que se usa como plantilla para dibujar es bribriblibli.gif y resulta ser una canción de Extremoduro. Por otro lado, el nombre del CVS tiene pinta de clave: 16734263999.csv
El script nos mostraba una pita:
Acertijo en Python la solucion esta relacionada con lo que dibuja el script
Pero tras darle muchas vueltas, no conseguí pasar este reto 🙁
PRUEBA 6
Nos da un enlace con un fichero a descargar. Se trata de una máquina virtual para VirtualBox con un Windows 2003 Server. Tras arrancarlo no podemos entrar ya que no conocemos ningún usuario válido.
Pasamos a cargar el disco en nuestro Linux, a ver si conseguimos extraer el fichero SAM con los usuarios del sistema:
# rmmod nbd # modprobe nbd max_part=16 # qemu-nbd -c /dev/nbd0 "Windows Server 2003.vdi" # ls /dev/nbd nbd0 nbd1 nbd11 nbd13 nbd15 nbd3 nbd5 nbd7 nbd9 nbd0p1 nbd10 nbd12 nbd14 nbd2 nbd4 nbd6 nbd8 # mount /dev/nbd0p1 /mnt # ls /mnt Archivos de programa Documents and Settings pagefile.sys AUTOEXEC.BAT IO.SYS RECYCLER bootfont.bin MSDOS.SYS System Volume Information boot.ini NTDETECT.COM WINDOWS CONFIG.SYS ntldr wmpub
Tras montar la unidad, hacemos una copia del fichero SAM y procedemos a intentar extraer las contraseñas de los usuarios:
Primero extraemos el fichero de hashes:
Luego lo cargamos en Cain&Abel para proceder a la búsqueda de contraseñas:
La clave de Administrador no hubo forma de sacarla y, entrando al sistema con los otros 3 usuarios, no había mucho interesante que buscar. Finalmente, la flag para pasar el reto resultó ser la combinación de las 3 contraseñas de usuario.
Posibles combilaciones:
148924307980 148979802430 243014897980 243079801489 798014892430 798024301489
El flag para pasar el reto es: 148924307980
PRUEBA 7
Nos dice que busquemos un fichero secrets.rar y tras probar varias combinaciones y hacer uso de dirbuster, la cosa fue tan sencilla como poner el nombre en mayúsculas y la extensión en minúsculas: http://desafio.secadmin.es/Prueba7/SECRETS.rar
Al descomprimirlo vemos unos cuantos textos, algunos conocidos:
Tenemos varios ficheros (pdf y docx) donde buscar una flag y, por supuesto, no es cosa de leerlos todos 🙂
Lo primero, intentar localizar los originales en Internet y hacer un diff en busca de alguna diferencia. Todos parecían estar bien menos uno que no conseguí localizarlo por ningún lado: HitsSamurai.docx … así que me centré en ese.
Tras leerlo no encontré nada extraño, así que busqué informacón oculta, en los metadatos.
Primero usé la herramienta de 11paths: https://metashieldanalyzer.elevenpaths.com/ que nos muestra las fechas de creación y modificación así como información de 2 imágenes. Esto me pareció algo raro, dado que en el texto se ven 3 imágenes y no 2.
Creation Date: 12/3/2015 12:53:00 PM Modification Date: 12/3/2015 3:52:00 PM Application: Microsoft Office 2007 Application: Adobe Photoshop CS Application: Adobe Photoshop CS2 Times Edited: 7 Edition Time: 116 Minutes LastModifiedBy: usuario
Decidí probar con otra herramienta online: http://www.extractmetadata.com/ y aquí tuve una pista:
Mimetype: application/vnd.openxmlformats-officedocument.wordprocessingml.document Embedded filename: [Content_Types].xml Embedded filename: _rels/.rels Embedded filename: word/_rels/document.xml.rels Embedded filename: word/document.xml Embedded filename: word/media/image1.jpeg Embedded filename: word/media/image3.jpeg Embedded filename: word/theme/theme1.xml Embedded filename: word/media/image2.jpeg Embedded filename: word/settings.xml Embedded filename: word/fontTable.xml Embedded filename: word/webSettings.xml Embedded filename: docProps/app.xml Embedded filename: word/styles.xml Embedded filename: docProps/core.xml Embedded filename: word/media/image4.jpeg Format: ZIP 2.0 (deflation) Mimetype: application/zip Embedded filename: [Content_Types].xml Embedded filename: _rels/.rels Embedded filename: word/_rels/document.xml.rels Embedded filename: word/document.xml Embedded filename: word/media/image1.jpeg Embedded filename: word/media/image3.jpeg Embedded filename: word/theme/theme1.xml Embedded filename: word/media/image2.jpeg Embedded filename: word/settings.xml Embedded filename: word/fontTable.xml Embedded filename: word/webSettings.xml Embedded filename: docProps/app.xml Embedded filename: word/styles.xml Embedded filename: docProps/core.xml Embedded filename: word/media/image4.jpeg
Nos dice que hay 4 imágenes! y sólo se ven 3 en el texto. Así que el siguiente paso es extraer todo lo que se pueda del fichero. Yo para eso usé binwalk:
$ binwalk -e -M HistSamurai.docx DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 Zip archive data, at least v2.0 to extract, compressed size: 371, uncompressed size: 1364, name: [Content_Types].xml 940 0x3AC Zip archive data, at least v2.0 to extract, compressed size: 243, uncompressed size: 590, name: _rels/.rels 1744 0x6D0 Zip archive data, at least v2.0 to extract, compressed size: 284, uncompressed size: 1216, name: word/_rels/document.xml.rels 2350 0x92E Zip archive data, at least v2.0 to extract, compressed size: 6809, uncompressed size: 50573, name: word/document.xml 9206 0x23F6 Zip archive data, at least v1.0 to extract, compressed size: 82149, uncompressed size: 82149, name: word/media/image1.jpeg 91407 0x1650F Zip archive data, at least v1.0 to extract, compressed size: 202515, uncompressed size: 202515, name: word/media/image3.jpeg 293974 0x47C56 Zip archive data, at least v2.0 to extract, compressed size: 1690, uncompressed size: 6994, name: word/theme/theme1.xml 295715 0x48323 Zip archive data, at least v1.0 to extract, compressed size: 231492, uncompressed size: 231492, name: word/media/image2.jpeg 527259 0x80B9B Zip archive data, at least v2.0 to extract, compressed size: 777, uncompressed size: 1754, name: word/settings.xml 528083 0x80ED3 Zip archive data, at least v2.0 to extract, compressed size: 472, uncompressed size: 1576, name: word/fontTable.xml 528603 0x810DB Zip archive data, at least v2.0 to extract, compressed size: 331, uncompressed size: 703, name: word/webSettings.xml 528984 0x81258 Zip archive data, at least v2.0 to extract, compressed size: 492, uncompressed size: 997, name: docProps/app.xml 529786 0x8157A Zip archive data, at least v2.0 to extract, compressed size: 2297, uncompressed size: 17513, name: word/styles.xml 532128 0x81EA0 Zip archive data, at least v2.0 to extract, compressed size: 375, uncompressed size: 741, name: docProps/core.xml 532814 0x8214E Zip archive data, at least v2.0 to extract, compressed size: 99117, uncompressed size: 113928, name: word/media/image4.jpeg 632960 0x9A880 End of Zip archive
Podemos ver que se guardan 4 imágenes y, tras revisarlas, sólo 3 coinciden, así que nos centramos en la cuarta: word/media/image4.jpeg
$ file _HistSamurai.docx.extracted/word/media/image4.jpeg image4.jpeg: PDF document, version 1.5
Como parece que es un PDF, lo renombremos y lo abrimos. Nos aparece un nuevo texto. Tras echar un vistazo rápido vemos que algunas letras han sido sustituidas por números. Anotamos de forma ordenada esos números y obtenemos la flag.
El flag para pasar el reto es: 1751478315
PRUEBA 8
Aquí nos encontramos con otro fichero a descargar. En este caso una captura de datos en formato PCAP, con casi 30Mb de basura 🙁
Tras echar una ojeada, dedico extraer los datos con foremost:
$ foremost -v -i captura.pcapng
Vemos muchas imágenes de páginas visitadas, como periódicos y demás. También actualizaciones de windows, etc. Nos centramos en las conexiones HTTP y vemos un par de lugares interenantes. Uno a una web de apuestas (http://www.lotto24.de) y otra a una deportiva (http://www.comunio.es).
Tras crear un filtro en el Wireshark para analizar cada una de las páginas:
lotto24.de: http && ip.addr eq 54.230.60.5 comunio.es: http && ip.addr eq 46.245.181.141
vemos que en la segunda hay algunos POST a una web de login. Nos centramos en esto y vemos:
POST /login.phtml HTTP/1.1 Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */* Referer: http://www.comunio.es/ Accept-Language: es-ES User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: www.comunio.es Content-Length: 58 Connection: Keep-Alive Cache-Control: no-cache Cookie: PHPSESSID=fadkic22j41bim66qkq2ootm50; session_language=es_ES; _pk_id.3.9927=ea0967631790eef5.1449827956.1.1449827956.1449827956.; _pk_ref.3.9927=%5B%22%22%2C%22%22%2C1449827956%2C%22http%3A%2F%2Fwww.google.es%2Furl%3Furl%3Dhttp%3A%2F%2Fwww.comunio.es%2F%26rct%3Dj%26frm%3D1%26q%3D%26esrc%3Ds%26sa%3DU%26ved%3D0ahUKEwjo8ZiBxtPJAhVKBBoKHVH-BLwQFggVMAA%26usg%3DAFQjCNHo4NSJd-AqoQsmIwG5JscFieKTJA%22%5D; _pk_ses.3.9927=*; x1nV; language=es_ES; cX_S=ii1i4qx7xto77mbe; cX_P=ii1i4qx7ynyhovag login=ctfprueba8&pass=15469&action=login&%3E%3E+Login_x=33 POST /login.phtml HTTP/1.1 Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */* Referer: http://www.comunio.es/login.phtml Accept-Language: es-ES User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: www.comunio.es Content-Length: 55 Connection: Keep-Alive Cache-Control: no-cache Cookie: PHPSESSID=fadkic22j41bim66qkq2ootm50; session_language=es_ES; _pk_id.3.9927=ea0967631790eef5.1449827956.1.1449828321.1449827956.; _pk_ref.3.9927=%5B%22%22%2C%22%22%2C1449827956%2C%22http%3A%2F%2Fwww.google.es%2Furl%3Furl%3Dhttp%3A%2F%2Fwww.comunio.es%2F%26rct%3Dj%26frm%3D1%26q%3D%26esrc%3Ds%26sa%3DU%26ved%3D0ahUKEwjo8ZiBxtPJAhVKBBoKHVH-BLwQFggVMAA%26usg%3DAFQjCNHo4NSJd-AqoQsmIwG5JscFieKTJA%22%5D; _pk_ses.3.9927=*; x1nV; language=es_ES; cX_S=ii1i4qx7xto77mbe; cX_P=ii1i4qx7ynyhovag login=ctfP8-2&pass=87563&action=login&%3E%3E+Login_x=33
Probé ambas contraseñas pero no era posible entrar con esas credenciales así que, viendo en el reto de stego y en de la VM con Windows que a los que organizaron el CTF les gusta combinar cosas para obtener la flag, decidí probar ambas contraseñas como flag … y resultó.
El flag para pasar el reto es: 1546987563
PRUEBA 9
En este reto tenemos otro enlace para descargar un nuevo fichero. En este caso se trata de otra máquina vortaual pero esta vez para VMware y con MS-DOS … qué recuerdos 🙂
Abrimos la máquina y vemos un directorio al que no podemos acceder ya que tiene un nombre que nuestro teclado no nos permite meter. Así que, al igual que en el caso anterior, es cuestión de acceder al disco duro por otros medios.
Lo que hice fue poner el disco como secundario de un Kali Linux. Lo arranque y luego, tras montar la partición de MS-DOS, renombré ese directorio con algo más fácil, como una ‘x’.
Antes de desmontarlo para volver a cargar la VM con MS-DOS, echamos un vistazo al contenido del directorio y vemos un fichero ZIP con contraseña, un par de scripts en BASIC y un juego de la época: Terror Site, de XCOM
Tras probar muchas cosas para intentar sacar la contraseña del ZIP, sin éxito, nos quedaba echar un vistazo al juego. Desde la propia VM no era posible jugar dado que faltaban los drivers para el ratón, así que lo abrí con un emulador de DOS:
$ dosbox
Y a jugar un rato, a ver qué nos encontramos! … y bueno, sólo se podían sacar un par de cosas útiles, el nombre de la partida guardada:
Y el nombre de la base militar, que era: SanBrdo67231
Tras probar ambas en el ZIP, no eran claves válidas. Así que toca vovler a dar una vuelta a todo lo que tenemos. Y me acordé de los scripts, que debían ser para algo 🙂
Así que abrimos de nuevo la VM y ejecutamos el script des.bas con qbasic, que es el intérprete que trae MS-DOS.
Parece una especia de codificador en el que tras poner una palabra la convierte en mayúsculas e imprime su correspondiente en código morse:
Hacemos lo propio con las dos posibles contraseñas que tenemos y, con la de SanBrdo67231 tenemos la contraseña para abrir el ZIP:
....--.-....-.-..---..-.-
Al descomprimir podemos ver varios ficheros:
En uno de ellos, masterkey.jpg, vemos una imagen en la parte inferior con un número impreso, que es nuestra flag:
El flag para pasar el reto es: 7458245513