1. Solución al reto The Necromancer
Volvemos con otro WriteUp de la gente de VulnHub. En este caso se trata de “The
Necromancer” y me he tomado la licencia de poner una imagen de uno de mis personajes
favoritos de la Drangonlance, Raistlin Majere dibujado por el gran Larry Elmore.
El autor de la máquina nos indica que debemos obtener 11 flags para pasar el CTF y que el
nivel es de principiante (veremos…).
Vamos allá. Como de costumbre comenzamos lanzando un nmap a la red para ver cual es la
IP de la máquina a atacar, lo cual no me devuelve ningún resultado ni en los 1000 habituales
ni en los 65550 y esto me recuerda a otra máquina que tenía un netcat abierto esperando
conexión, así que igual que hice en aquella máquina, me abro Wireshark y lo dejo a la
escucha.
Rápidamente observo que efectivamente hay un paquete en Wireshark que me indica que el
puerto 4444 está ahí esperándome xD. Así que si le abro un netcat debería pasar algo, ¿no?
Esto tiene pinta de Base64, así que vamos a por ello. Hace poco aprendí que desde consola
se podía “decodear” directamente sin hacer uso de webs ni nada por el estilo, así que…
El uso es muy sencillo, solo hay que poner: echo “caracteres en base64” |base64 decode .
2.
Lo que me devuelve algo como una historia típica de cuentos de aventuras (como la
DragonLance jeje) y al final me devuelve la flag nº 1: e6078b9b1aac915d11b9fd59791030bf
que aunque a priori me da la sensación de que puede ser código Hexadecimal, no lo es, pero
si un hash en MD5 que me devuelve opensame.
Lo que sí me llama la atención es la pista final con el u666. Después de un rato me doy
cuenta que quizá nmap no sacaba nada porque estaba tirando contra TCP y es UDP.
Ahora sí, ya veo que el puerto 666 (muy bueno jeje) está abierto. Pruebo un netcat por UDP y
me devuelve otro mensaje.
¿Ya se me acaba el tiempo? si acabo de empezar xD. Tardo un rato en revisar
documentación sobre netcat para ver como puedo pasarle la clave a la IP de la máquina por
el puerto 666.
Al final descubro que con echo "opensesame" | nc u 192.168.56.101 666 se puede, y esto
me devuelve otra nueva “historia”.
3.
De lo que sacamos en flag 2: c39cd4df8f2e35d20d92c2e44de5f7c6 y que se cierra el puerto
666 y se abre el 80, o eso he querido entender yo xD.
De nuevo otra mini historia. Como siempre, reviso el código y me guardo la imagen para
procesarla. Esta vez me guardo la de la página principal y la que aparece en el código que
apunta a <img src="/pics/pileoffeathers.jpg">.
4. Pues esta vez en el código no veo nada, y con stegfile y exiftool nada de nada. Después de
un par de minutos pensando se me ocurre pasar las imágenes por “foremost” con el mismo
resultado en ambas, lo que, además de encontrar lo que podría ser un fichero, doy por seguro
que la imagen es la misma con distinto nombre.
Parece que tenemos otro chorizo alfanumérico en Base64:
ZmxhZzN7OWFkM2Y2MmRiN2I5MWMyOGI2ODEzNzAwMDM5NDYzOWZ9IC0gQ3Jvc3M
gdGhlIGNoYXNtIGF0IC9hbWFnaWNicmlkZ2VhcHBlYXJzYXR0aGVjaGFzbQ==
Lo que nos devuelve el flag 3: 9ad3f62db7b91c28b68137000394639f además del texto:
Cross the chasm at /amagicbridgeappearsatthechasm
Le iba a tirar Dirbuster a ver que sacaba, pero si no me equivoco, la última parte parece una
carpeta de la web. Veamos.
Una vez más estaba en lo cierto y para variar, nos devuelve otra parte de la historia y una
nueva imagen.
5. Veamos si la imagen tiene algo. Pues nada, parece que esta vez no está en la imagen. Me
pongo a releer el último “capítulo” de la historia a ver si saco algo en claro. Lo único que me
llama la atención es la última frase “There must be a magical item that could protect you from
the necromancer's spell” que dice algo así como “Tiene que haber un objeto mágico que
podría protegerte del hechizo de la nigromante”. Esto me recuerda a cuando jugué antaño
alguna partida de rol, pero no se a que se refiere con “magical item” no sé si será un objeto,
alguna palabra…
Hago la siguiente búsqueda en Google para ver si me sugiere algo.
Después de visitar algunas páginas me creo un diccionario con términos en inglés sobre
temas de juegos de rol, magia, nigromancia etc.
Al revisar la URL que me había devuelto junto con el tercer flag, me doy cuenta que está
formado por palabras unidas, así que quizá sea así como he de crear el diccionario. Lo que sí
parece seguro es que será en minúsculas. Toca reestructurar.
Y así hasta 329 palabras que me llevan más de media hora escribir a mano xD, y encima esto
para una auditoría sudo que valga…
6. Finalmente se lo paso a Burp a través del intruder.
Pues he triunfado como los chichos xD. Lo que buscaba era talismán. VVoy al navegador
para poner esta nueva URI y me salta la descarga de un binario, ya estamos con los
binarios…
Rápidamente le tiro un file al binario talismán y veo que está escrito en C.
Después de un rato pegandome con el dichoso binario y con C me doy cuenta que mi Kali es
x64 y el binario está escrito para arquitecturas de 32 bits y como no tengo ninguna máquina
de 32 bits, me toca montarme una con la considerable pérdida de tiempo. Al menos ya la
tengo para otra vez.
Al final el proceso es:
gdb talisman arranca gdb contra el binario.
info functions devuelve por pantalla información de las funciones.
break wearTalisman
run inicia el programa.
7. Y al final del proceso, nos devuelve el flag 4: ea50536158db50247e110a6c89fcf3d3
You fall to your knees.. weak and weary.
Looking up you can see the spell is still protecting the cave entrance.
The talisman is now almost too hot to touch!
Turning it over you see words now etched into the surface:
flag4{ea50536158db50247e110a6c89fcf3d3}
Chant these words at u31337
Parece que nos dice que usemos esa flag en el puerto UDP 31337.
Confirmamos que está abierto mediante nmap.
Igual que hiciera anteriormente, pruebo con un echo a ver si conecto usando el valor del flag.
ea50536158db50247e110a6c89fcf3d3 Solo que esta vez no funciona. Mirando en google
veo que es un hash en MD5.
Ahora si uso: echo "blackmagic" | nc nv u 192.168.56.101 31337 Lo que nos devuelve
otro capitulo de la historia.
Obtenemos otro directorio de la web /thenecromancerwillabsorbyoursoul y el flag número
5:
0766c36577af58e15545f099a3b15e60
Esta vez me aseguro de que no sea otro hash que nos devuelva una palabra y así es.
8.
Al poner la nueva ruta me aparece el flag 6: b1c3ed8f1db4258e4dcb0ce565f6dc03 y otro
texto. Este tampoco parece que esconda nada.
Lo que si me devuelve es la descarga de otro fichero.
Una vez más al final del texto aparece u161, de nuevo tiene pinta de que sea el puerto UDP
161. Lo corroboro nuevamente con nmap.
Antes de continuar, guardo la foto y la paso por foremost, exiftool y steghide por si las
moscas. No parece contener nada, así que continúo con el nuevo binario, que en realidad
parece ser un fichero bzip2. Después de un rato consigo averiguar que había que
descomprimir el fichero con bzip2 y además con tar para llegar al fichero necromancer.cap,
el cual abro con Wireshark, pero me doy cuenta enseguida de que el un fichero con paquetes
de WiFi. Me da la impresión que va a haber una clave por ahí.
Vamos a darle chicha con AirCrack a ver si obtengo lo que busco.
9.
Pues ha funcionado y nos devuelva la palabra death2all, esto ya parece un disco de Metallica
xD. Pruebo como en ocasiones anteriores con echo "death2all" | nc nv u 192.168.56.101
161, pero esta vez no ocurre nada.
De alguna auditoría me viene a la memoria algo parecido y usando metasploit creo que
podría dar con ello.
Pues tampoco es que haya sacado mucho jeje. Si pruebo con snmpwalk me devuelve lo
mismo en distinto orden xD.
He de reconocer que en este punto me atasqué bastante, pero no hay nada como buscar la
información oficial para llegar a una buena conclusión.
**Referencias:
http://www.linuxparty.com/index.php/29internet/6038introduccionaloscomandossnmpsn
mpwalksnmpgetsnmptranslate http://netsnmp.sourceforge.net/wiki/index.php/TUT:snmpset )
10.
Solo hay que pasarle el parámetro c con la string death2allrw la versión v del protocolo
snmp que se usa y la IP de la máquina.
Después de lanzar snmpset, si vuelves a lanzar snmpwalk puedes ver los cambios. Ahora
está desbloqueado, sigamos.
Lo que nos devuelve el flag 7: 9e5494108d10bbd5f9e7ae52239546c4 y t22 lo cual me da la
sensación de que va a ser SSH (puerto 22 TCP). Esta vez sí que es un hash que devuelve:
demonslayer.
Vamos a ver si conectamos por el puerto 22 al SSH con la pass demonslayer y el usuario
(supongo) será root.
Pues me he colado pero bien, ni el usuario es root, ni la pass es demonslayer. Quizá el
usuario es demonslayer y hay que sacar la contraseña. Veamos con medusa. Me creo un
mini diccionario con las 25 peores contraseñas para este caso.
No se porque intuía que la contraseña sería algo sencillo, en todos los retos según te vas
acercando al final, todo se vuelve más fácil.
11.
Pero esto no se ha terminado, parece ser que (obviamente) no soy root. Después de hacer un
ls y un cat al fichero flag8.txt me devuelve otro texto.
Pues nada, de nuevo nos indica, como ya es costumbre, que miremos el puerto UDP 777,
pero si tiramos un nmap, en este caso nos devuelve lo siguiente.
En cambio, con un ps aux y un grep al 777 (y un top) podemos ver que la cosa cambia.
13.
Para la segunda pregunta “Who did Johann Faust VIII make a deal with?” la respuesta es
Mephistopheles.
Y para la última “Who is tricked into passing the Ninth Gate?” la respuesta es Hedge.
Una vez que hemos respondido a las tres preguntas solo nos resta hacer un sudo l.
Nos devuelve un comando para lanzarlo como root.
Y por fin nos da la flag 11: 42c35828545b926e79a36493938ab1b1 que de paso, por si acaso
busqué el hash en google y devuelve: hackergod
Agradecimientos:
Al creador de la máquina @xerubus, aunque hay que decirle que esto de nivel principiante
tiene poco… Aún así creo que es la máquina más divertida que he realizado hasta ahora.
Recursos:
http://www.linuxparty.com/index.php/29internet/6038introduccionaloscomandossnmpsn
mpwalksnmpgetsnmptranslate
http://netsnmp.sourceforge.net/wiki/index.php/TUT:snmpset
WriteUp realizado por Roberto García Amoriz (@1GbDeInfo).