Infiltrating Unix/Linux
W3Techs mantiene un estudio continuo sobre las estadísticas de uso de sistemas operativos. Este estudio informa que más del 70% de los sitios web (servidores web) funcionan en un sistema basado en Unix. Para nosotros, esto significa que podemos beneficiarnos significativamente al seguir ampliando nuestro conocimiento sobre Unix/Linux y cómo podemos obtener sesiones de shell en estos entornos para pivotar potencialmente más dentro de un entorno.
Si bien es común que las organizaciones utilicen proveedores de terceros y en la nube para alojar sus sitios web y aplicaciones web, muchas organizaciones aún alojan sus sitios web y aplicaciones web en servidores en sus entornos de red (on-prem). En estos casos, querríamos establecer una sesión de shell con el sistema subyacente para intentar pivotar a otros sistemas en la red interna.
Consideraciones Comunes
Como es probable que ya hayan notado, obtener una sesión de shell con un sistema se puede hacer de varias maneras; una forma común es a través de una vulnerabilidad en una aplicación. Identificaremos una vulnerabilidad y descubriremos un exploit que podemos usar para obtener una shell entregando un payload. Al considerar cómo establecer una sesión de shell en un sistema Unix/Linux, será beneficioso tener en cuenta lo siguiente:
¿Qué distribución de Linux está ejecutando el sistema?
¿Qué shell y lenguajes de programación existen en el sistema?
¿Qué función está cumpliendo el sistema en el entorno de red en el que se encuentra?
¿Qué aplicación está alojando el sistema?
¿Existen vulnerabilidades conocidas?
Enumerando el Host
Información Recopilada del Salida
Dado que el sistema está escuchando en los puertos 80 (HTTP), 443 (HTTPS), 3306 (MySQL) y 21 (FTP), puede ser seguro asumir que se trata de un servidor web que aloja una aplicación web. También podemos ver algunos números de versión revelados asociados con el stack web (Apache 2.4.6 y PHP 7.2.34) y la distribución de Linux que se ejecuta en el sistema (CentOS). Antes de decidir en qué dirección investigar más (profundizar en un agujero de conejo), también deberíamos intentar navegar hacia la dirección IP a través de un navegador web para descubrir la aplicación alojada.
Herramienta de Gestión rConfig
Aquí descubrimos una herramienta de gestión de configuración de red llamada rConfig. Esta aplicación es utilizada por administradores de red y sistemas para automatizar el proceso de configuración de dispositivos de red. Un caso práctico de uso sería utilizar rConfig para configurar remotamente interfaces de red con información de direccionamiento IP en múltiples enrutadores simultáneamente. Esta herramienta ahorra tiempo a los administradores, pero, si se compromete, podría utilizarse para pivotar sobre dispositivos de red críticos que conmutan y enrutan paquetes a través de la red. Un atacante malicioso podría apoderarse de toda la red a través de rConfig, ya que probablemente tendrá acceso administrativo a todos los dispositivos de red utilizados para la configuración. Como pentesters, encontrar una vulnerabilidad en esta aplicación se consideraría un descubrimiento muy crítico.
Descubriendo una Vulnerabilidad en rConfig
Echemos un vistazo más de cerca a la parte inferior de la página de inicio de sesión web, donde podemos ver el número de versión de rConfig (3.9.6). Debemos utilizar esta información para comenzar a buscar cualquier CVE, exploits disponibles públicamente y pruebas de concepto (PoCs). Mientras investigamos, asegúrate de observar de cerca lo que encontramos y entender qué está haciendo. Por supuesto, queremos que esto nos lleve a una sesión de shell con el objetivo.
Utilizar un motor de búsqueda de tu elección dará algunos resultados prometedores. Podemos usar las palabras clave: rConfig 3.9.6 vulnerability.
Podemos ver que podría valer la pena elegir esto como el enfoque principal de nuestra investigación. El mismo pensamiento podría aplicarse a las versiones de Apache y PHP, pero dado que la aplicación se está ejecutando en el stack web, veamos si podemos obtener una shell a través de un exploit escrito para las vulnerabilidades encontradas en rConfig.
También podemos utilizar la funcionalidad de búsqueda de Metasploit para ver si hay módulos de exploit que puedan obtenernos una sesión de shell en el objetivo.
Búsqueda de un Módulo de Exploit
Un detalle que a menudo se pasa por alto al confiar en MSF para encontrar un módulo de exploit para una aplicación específica es la versión de MSF. Puede haber módulos de exploit útiles que no están instalados en nuestro sistema o simplemente no están apareciendo en la búsqueda. En estos casos, es bueno saber que Rapid 7 mantiene el código de los módulos de exploit en sus repositorios en GitHub. Podríamos hacer una búsqueda aún más específica usando un motor de búsqueda: rConfig 3.9.6 exploit metasploit github
.
Esta búsqueda puede señalarnos el código fuente para un módulo de exploit llamado rconfig_vendors_auth_file_upload_rce.rb
. Este exploit puede conseguirnos una sesión shell en una caja Linux objetivo que ejecute rConfig 3.9.6. Si este exploit no aparece en la búsqueda de MSF, podemos copiar el código de este repositorio a nuestra caja de ataque local y guardarlo en el directorio que nuestra instalación local de MSF está referenciando. Para hacer esto, podemos emitir este comando en nuestra caja de ataque:
Localizar
Queremos buscar los directorios en la salida asociados con el Metasploit Framework. En Pwnbox, los módulos de exploit de Metasploit se mantienen en:
Podemos copiar el código en un archivo y guardarlo en /usr/share/metasploit-framework/modules/exploits/linux/http
, similar a donde están almacenando el código en el repositorio de GitHub. También debemos mantener msf actualizado usando los comandos apt update; apt install metasploit-framework
o el gestor de paquetes local. Una vez que encontramos el módulo de exploit y lo descargamos (podemos usar wget
) o lo copiamos en el directorio correcto desde GitHub, podemos usarlo para obtener una sesión shell en el objetivo. Si lo copiamos en un archivo en nuestro sistema local, asegúrate de que el archivo tenga la extensión .rb
. Todos los módulos en MSF están escritos en Ruby.
Usando el Exploit de rConfig y Obteniendo una Shell
En msfconsole
, podemos cargar manualmente el exploit usando el comando:
Seleccionar un Exploit
Con este exploit seleccionado, podemos listar las opciones, ingresar los ajustes adecuados específicos para nuestro entorno de red y lanzar el exploit.
Ejecutar el Exploit
Podemos ver en los pasos descritos en el proceso de explotación que este exploit:
Verifica la versión vulnerable de rConfig
Se autentica con el inicio de sesión web de rConfig
Sube una carga útil basada en PHP para una conexión de shell reversa
Elimina la carga útil
Nos deja con una sesión shell de Meterpreter
Interactuar con la Shell
Podemos entrar en una shell de sistema (shell
) para obtener acceso al sistema objetivo como si estuviéramos conectados y abrir una consola de CMD.exe.
Creando una Shell TTY con Python
Cuando entramos en la shell del sistema, notamos que no hay un indicador presente, pero aún podemos emitir algunos comandos del sistema. Esta es una shell que se denomina típicamente como una shell no TTY. Estas shells tienen funcionalidad limitada y pueden prevenir el uso de comandos esenciales como su
(cambiar usuario) y sudo
(super usuario), que probablemente necesitaremos si buscamos escalar privilegios. Esto sucedió porque la carga útil se ejecutó en el objetivo por el usuario apache. Nuestra sesión se establece como el usuario apache. Normalmente, los administradores no acceden al sistema como el usuario apache, por lo que no hay necesidad de que se defina un lenguaje de intérprete de shell en las variables de entorno asociadas con apache.
Podemos crear manualmente una shell TTY usando Python si está presente en el sistema. Siempre podemos verificar la presencia de Python en sistemas Linux escribiendo el comando: which python
. Para crear la sesión de shell TTY usando Python, escribimos el siguiente comando:
Python Interactivo
Este comando utiliza Python para importar el módulo pty, y luego utiliza la función pty.spawn para ejecutar el binario de la shell bourne (/bin/sh
). Ahora tenemos un indicador (sh-4.2$) y acceso a más comandos del sistema para movernos por el sistema como deseemos.
Last updated