Juan el hacker es una maquina que cree como desafio para el CTF Q4 2019, la maquina esta inspirada en la serie de animé Serial Experimentals Lain, Como veterano de los 90, esta serie me inspiro mucho y se la recomiendo a todos los que ven en la tecnología algo más que una herramienta. También puse algunas cosas ocultas con una pequeña historia, quienes resolvieron la maquina o avanzaron saben de lo que hablo, por lo mismo estos mensajes los dejo afuera para que haya algo de sorpresa jeje :)
Volviendo a lo nuestro: Al enumerar usando nmap la maquina solo vemos algunos servicios abiertos:
Revisando la web no se vé mucho, pero si llama la atención el puerto 79, un viejo protocolo (de los 90 jejeje) que era usado para mostrar información de tu user, esta información es normalmente proporcianada en archivos .plan y .project los cuales se guardan en el home del user, para más información.
Usando este servicio descubrimos que el usuario juan (como el nombre de la maquina) muestra lo siguiente:
Copiamos el output del project que es claramente un Hex el cual al pasarlo a ASCII nos muestra un texto cifrado, el cual parece ser un rot o caesar cipher, por lo cual al decodearlo encontramos lo siguiente:
Esto parece la primera parte de un password ya que no funciona por si solo, pero nos habla de un sitio oculto, esto nos ayuda a descifrar que hacer con el output que entrega plan, el cual parece un MD5, lo pasamos por un decrypter y encontramos "hola_lain"
Con esto revisamos el sitio web y encontramos una pagina (hola lain, que también es una referencia a este animé
EL formulario es un html plano, pero al enumerar directorios dentro de hola_lain, podemos descubrir un directorio "admin" que tiene solo una foto
la foto contiene un texto, sin contraseña usando steghide o similar, a gusto del participante se puede leer la segunda parte de la contraseña y formamos las credenciales para entrar como juan
juan:1missy0uch1saSt0pn0wchisa
Una vez dentro como Juan debemos escapar una shell restringida usando el comando find , comparto esta pagina también con un link util y la forma de hacerlo
https://www.hackplayers.com/2018/05/tecnicas-para-escapar-de-restricted--shells.html
Una vez ya dentro procedemos a enumerar, y en el mismo directorio encontramos un archivo, que no se puede ejecutar, pero si podemos leerlo, por lo que procedemos a analizarlo y vemos los strings
El código dice "if 5elemets: "BOFetada" Como un pequeño cameo al equipo con el que participé en la hackaton de telefónica y mi maquina favorita jejeje si probamos los strings como passwords vemos que el usuario lainiwakura puede entrar con la contraseña "BOFetada"
Ya dentro vemos claramente un archivo que llama la atención, es programa vulnerable a un buffer overflow de 32bit, que de hecho estudiando para el OSCE fue que me inspiré pensando en este exploit https://www.fuzzysecurity.com/exploits/7.html
Si quieren reproducirlo pueden usar este codigo en C:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int lain(char *str)
{
char buffer[24];
strcpy(buffer, str);
return 1;
}
int main(int argc, char **argv)
{
char str[517];
FILE *badfile;
badfile = fopen("PHANTOMa", "r");
fread(str, sizeof(char), 517, badfile);
lain(str);
printf("salimos bien juan, pero no queremos eso ... :( \n");
return 1;
}
Es algo mucho mas sencillo, es un simple exploit de 32 bit, al tener el stack ejecutable (perdonen por la mala compilación de los binarios en el CTF hjejeje, muchos perdieron tiempo en eso)
Volviendo al exploit de chisa, nos damos cuenta que lee el input de el archivo PHANTOMa, cada vez que de ejecuta, por lo que debemos enviar ahi nuestro input
Luego ejecutamos en gdb vemos que el EIP tiene un offset de 32, por lo que desde el byte dos en adelante podemos controlarlo, así que el plan es enviar un shellcode
El plan es enviar un shellcode, pero no cualquier shellcode, en sistemas nuevos, incluso usando 32, las shell como dash y bash tienen un mecanismo de seguridad que "dropea" cualquier privilegio de SUID antes de ejcutarse, por lo que un shellcode normal que llame a /bin/sh no nos servirá, es por eso que ocupamos python para poder ejecutar el shellcode como root y no "dropear" privilegios cuando se ejecute la shell.
http://shell-storm.org/shellcode/files/shellcode-886.php
Finalmente usamos este shellcode y copiamos el ouput del siguiente exploit a PHANTOMa (python exploit.py > PHANTOMa)
Y con esto tenemos una shell de root:
Espero que les haya gustado!!