TraceBack

Traceback es una máquina de dificultad fácil que cuenta con un servidor web Apache. Se puede acceder a un shell web PHP cargado por un hacker y se puede utilizar para obtener la ejecución de comandos en el contexto del usuario webadmin. Este usuario tiene el privilegio de ejecutar una herramienta llamada luvit, que ejecuta código Lua como el usuario sysadmin. Finalmente, el usuario Sysadmin tiene permisos de escritura en el archivo update-motd. Este archivo se ejecuta como root cada vez que alguien se conecta a la máquina a través de SSH. Esto se utiliza para escalar privilegios a root.


Reconnaissance

Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina TraceBack. Este resultado lo almacenaremos en un archivo llamado allPorts.

A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abierta una página web de Apache y el servicioSSH.

Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Web Enumeration

Realizaremos a través de la herramienta de whatweb un reconocimiento inicial de las tecnologías que utiliza la aplicación web.

Accederemos a http://10.10.10.181 y nos encontramos con la siguiente página web. Al parecer la página web ha sido hackeada por un atacante. Por otro lado, indica el atacante que ha dejado un backdoor accesible para toda la red.

Realizamos una enumeración de archivos PHP pero no logramos encontrar nada en la aplicación web.

Initial Foothold

Searching for a web shell uploaded by the attacker

Buscamos en Internet sobre las web shells más famosas para poder hacernos un listado del nombre de dichas web shells. Nos encontramos con el siguiente repositorio de GitHub el cual contiene diferentes nombres de web shells.

Nos copiaremos el contenido de las diferentes web shellsque aparecen en el repositorio.

Trataremos el contenido que hemos copiado del repositorio de GitHub para solamente quedarnos con los nombres de las web shellsy almacenarlo en un archivo llamado webshells.txt.

Una vez tengamos un listado de las web shells más conocidas, probaremos de realizar una enumeración con gobuster para ver si logramos encontrar la web shellsubida en la página web.

En el resultado obtenido, logramos encontrar una web shell llamada smevk.php.

Using SmEvK_PathAn Shell to get a Reverse Shell

Al acceder a http://10.10.10.181/smevk.php nos encontramos con la web shellque el atacante subió a la aplicación web. Al acceder se nos requiere ingresar credenciales de acceso. Investigando más a fondo sobre la web shell nos encontramos con el repositorio en el cual nos indican que las credenciales por defecto son admin/admin.

Finalmente logramos obtener acceso a la web shell en la cual nos permite realizar diferentes opciones.

  • Ejecutar comandos

  • Crear directorios

  • Mover directorios

  • Leer archivos

  • Subir archivos

  • etc

Probamos de utilizar el apartado de Execute para verificar si podemos lograr ejecutar comandos en el equipo víctima. En nuestro primer intento, al ejecutar el comando whoami se nos muestra el resultado correctamente, por lo tanto, logramos obtener un RCE a través de esta web shell.

El siguiente paso será lograr obtener acceso remoto al sistema, para ello nos pondremos en escucha con nc.

Ejecutaremos en la web shell el siguiente comando que es la sintaxis de la típica Reverse Shell.

Verificamos que finalmente logramos obtener acceso al sistema como el usuario webadmin.

Al obtener la Reverse Shell, realizaremos el tratamiento de la terminal para disponer de una TTY totalmente interactiva.

Initial Access

Abusing sudoers privilege (Executing Lua Tool with another user)

Revisando el directorio personal del usuario webadmin, nos encontramos con un archivo de texto llamado note.txt el cual indica que el usuario sysadminle ha proporcionado al usuario webadmin una herramienta para practicar con el lenguaje de programación Lua, además indica que el usuario ya debería saber como encontrarlo.

Revisando si el usuario webadmin dispone de algún permiso de sudoers, nos encontramos en que puede ejecutar como el usuario sysadminel binario de /home/sysadmin/luvit, una herramienta para practicar Lua.

Revisando a través de la herramienta de searchbins nos encontramos que podemos abusar del lenguaje de programaciónLuapara poder obtener una shell, en este caso, una shell como el usuario sysadmin.

A través de este privilegio de sudoerssobre el binario indicado, finalmente conseguiremos disponer de una bashcomo el usuario sysadminy podremos visualizar la flag user.txt.

Privilege Escalation

linPEAS Enumeration

El siguiente paso, será realizar una enumeración con una herramienta automatizada como linPEAS, que realiza un escaneo del equipo en busca de vectores para elevar nuestros privilegios.

El binario lo dispondremos en nuestro equipo local y lo compartiremos a través de un servidor web.

En este máquina, el binario de cURLno estaba instalado para realizar un Fileless Attack para ejecutar el script que compartimos sin necesidad de descargarlo en el equipo local.

Por dicho motivo, descargaremos el script que estamos compartiendo con wget le daremos permisos de ejecución y lo ejecutaremos para que realice la enumeración.

Al finalizar la enumeración, comprobamos que el usuario actual dispone de privilegios de escritura sobre los siguientes archivos ubicados en /etc/update.mot.d, más adelante explicaremos qué son este tipo de archivos y cómo podemos abusar de estos para obtener acceso como root.

Pspy64 Monitorization

Por otro lado, también hicimos una comprobación para verificar los procesos que se estaban ejecutando en el equipo víctima. Para ello, utilizaremos el binario de pspyel cual compartiremos desde nuestro equipo local mediante un servidor web.

Desde el equipo víctima, descargaremos el binario con wget, le daremos permisos de ejecución y ejecutaremos el binario.

Comprobamos que en el equipo víctima, al parecer se está ejecutando una tarea CRON

Este proceso está restableciendo los archivos MOTD a su estado original cada cierto tiempo. Esto se hace copiando los archivos desde un directorio de respaldo (/var/backups/.update-motd.d/) al directorio de MOTD (/etc/update-motd.d/).

Revisando los procesos a través de ps auxque está ejecutando el usuario root, nos encontramos que este es el usuario que realiza el restablecimiento de los archivos MOTD a su estado original.

Update-Motd Privilege Escalation

¿Qué son los archivos en /etc/update-motd.d/?

Estos archivos son scripts que generan el Mensaje del Día (MOTD), que se muestra cuando un usuario inicia sesión en el sistema. Los scripts se ejecutan en orden numérico (por ejemplo, 00-header, 10-help-text, etc.) y su salida se muestra en la terminal.

Comprobamos que los scripts que se ubican en /etc/update.motd.d disponemos de permisos de escritura sobre ellos. Para poder abusar de estos archivos, podemos intentar escribir sobre uno de ellos, por ejemplo 00-header para indicarle que ejecute otro comando.

Nuestro objetivo que planteamos es el siguiente:

  • Obtener clave pública de atacante para copiarla en /home/sysadmin/.ssh/authorized_keys para así poder conectarnos al equipo sin necesidad de saber las credenciales y que se activen los scripts MOTD.

  • Editar el archivo principal MOTD llamado 00-header para indicarle que realice una copia de nuestra clave pública ubicada después del primero paso en /home/sysadmin/.ssh/authorized_keys a la ubicación de /root/.ssh/authorized_keys.

  • Una vez editado el archivo MOTD, iniciar sesión con el usuario sysadminmediante SSHsin proporcionar credenciales (debido que nuestra clave pública está en las claves autorizadas SSHde dicho usuario). Una vez nos conectemos se activarán los scripts de MOTD.

  • Nos conectamos con el usuario root mediante SSH sin proporcionar credenciales. Si todo funciona correctamente, deberíamos de disponer acceso como root. Esto debido que cuando hemos iniciado sesión se ha activado el script de MOTD y se ha ejecutado el comando anteriormente indciado.

Desde nuestra máquina atacante, generaremos una nueva clave SSH. Copiaremos el contenido de nuestra clave pública SSHgenerada.

Introduciremos nuestra clave pública SSH en el archivo /home/sysadmin/.ssh/authorized_keyspara poder iniciar sesión mediante SSH con el usuario sysadmin sin proporcionar credenciales.

Verificamos que efectivamente podemos autenticarnos al SSH con dicho usuario sin proporcionar credenciales válidas.

El siguiente paso será sobreescribir el script MOTD llamado 00-header para indicarle que haga una copia de nuestra clave pública ubicada en /home/sysadmin/.ssh/authorized_keys hacia /root/.ssh, así el usuario root, dispondrá de un archivo llamado authorized_keys con nuestra clave pública y podremos conectarnos sin proporcionar credenciales.

Para que se activen los scripts MOTD, rápidamente deberemos iniciar sesión mediante SSH con el usuario sysadmin.

Al iniciar sesión con dicho usuario, se debería haber activado los scripts MOTD y como tal, nuestra clave pública SSHse encontraría en /root/.ssh/authorized_keys con lo cual podríamos autenticarnos al SSH con el usuario root sin proporcionar credenciales.

Verificamos que finalmente podemos acceder al equipo con el usuarioroot sin proporcionar credenciales de acceso. Finalmente logramos visualizar la flag root.txt.

Última actualización

¿Te fue útil?