Page cover

🔑Credential Hunting - Linux

La búsqueda de credenciales es uno de los primeros pasos una vez que tenemos acceso al sistema. Estas credenciales pueden otorgarnos privilegios elevados en cuestión de segundos o minutos. Entre otras cosas, esto es parte del proceso de escalada de privilegios locales que cubriremos aquí. Sin embargo, es importante señalar aquí que estamos lejos de cubrir todas las situaciones posibles y, por lo tanto, nos centramos en los diferentes enfoques.

Podemos imaginar que hemos logrado acceder a un sistema a través de una aplicación web vulnerable y, por lo tanto, hemos obtenido, por ejemplo, un reverse shell. Por lo tanto, para escalar nuestros privilegios de manera más eficiente, podemos buscar contraseñas o incluso credenciales completas que podamos usar para iniciar sesión en nuestro objetivo. Existen varias fuentes que pueden proporcionarnos credenciales que ubicamos en cuatro categorías. Estos incluyen, entre otros:

Archivos

Historial

Memoria

Key-Rings

Configuraciones

Registros

Cache

Credenciales almacenadas en el navegador

Bases de datos

Historial de línea de comandos

Procesamiento en memoria

Notas

Scripts

Códigos fuente

cronjobs

Claves SSH

Enumerar todas estas categorías nos permitirá aumentar la probabilidad de encontrar con cierta facilidad las credenciales de los usuarios existentes en el sistema. Existen innumerables situaciones diferentes en las que siempre veremos resultados diferentes. Por lo tanto, debemos adaptar nuestro enfoque a las circunstancias del entorno y tener presente el panorama general. Sobre todo, es fundamental tener en cuenta cómo funciona el sistema, su enfoque, para qué existe y qué papel desempeña en la lógica empresarial y la red general. Por ejemplo, supongamos que es un servidor de base de datos aislado. En ese caso, no necesariamente encontraremos allí a usuarios normales, ya que se trata de una interfaz sensible en la gestión de datos a la que sólo se concede acceso a unas pocas personas.


Archivos

Un principio fundamental de Linux es que todo es un archivo. Por ello, es fundamental tener presente este concepto y buscar, encontrar y filtrar los archivos adecuados según nuestros requerimientos. Deberíamos buscar, encontrar e inspeccionar varias categorías de archivos uno por uno. Estas categorías son las siguientes:

Archivos de configuración

Bases de datos

Notas

Scripts

cronjobs

Claves SSH

Los archivos de configuración son el núcleo de la funcionalidad de los servicios en las distribuciones de Linux. A menudo incluso contienen credenciales que podremos leer. Su conocimiento también nos permite comprender con precisión cómo funciona el servicio y sus requisitos. Normalmente, los archivos de configuración están marcados con las siguientes tres extensiones de archivo (.conf,.cnf y .config) . Sin embargo, se puede cambiar el nombre de estos archivos de configuración o los archivos de extensión asociados, lo que significa que estas extensiones de archivo no son necesariamente necesarias. Además, incluso al recompilar un servicio, se puede cambiar el nombre de archivo requerido para la configuración básica, lo que produciría el mismo efecto. Sin embargo, este es un caso raro que no nos encontraremos con frecuencia, pero esta posibilidad no debe quedar fuera de nuestra búsqueda.

La parte más crucial de cualquier enumeración de un sistema es obtener una descripción general del mismo. Por tanto, el primer paso debería ser encontrar todos los archivos de configuración posibles en el sistema, que luego podremos examinar y analizar individualmente con más detalle. Hay muchos métodos para encontrar estos archivos de configuración, y con el siguiente método veremos que hemos reducido nuestra búsqueda a estas tres extensiones de archivo.

Archivos de configuración

Opcionalmente, podemos guardar el resultado en un archivo de texto y usarlo para examinar los archivos individuales uno tras otro. Otra opción es ejecutar el análisis directamente para cada archivo encontrado con la extensión de archivo especificada y generar el contenido. En este ejemplo, buscamos tres palabras ( user, password, pass) en cada archivo con la extensión de archivo .cnf.

Credenciales en archivos de configuración

También podemos aplicar esta búsqueda simple a otras extensiones de archivo. Además, podemos aplicar este tipo de búsqueda a bases de datos almacenadas en archivos con diferentes extensiones de archivo, y luego podemos leerlas.

Bases de datos

Dependiendo del entorno en el que nos encontremos y del propósito del host en el que nos encontremos, a menudo podemos encontrar notas sobre procesos específicos en el sistema. A menudo incluyen listas de muchos puntos de acceso diferentes o incluso sus credenciales. Sin embargo, a menudo resulta complicado encontrar notas inmediatamente si están almacenadas en algún lugar del sistema y no en el escritorio o en sus subcarpetas. Esto se debe a que pueden tener cualquier nombre y no es necesario que tengan una extensión de archivo específica, como .txt. Por lo tanto, en este caso, debemos buscar archivos que incluyan la extensión .txt del archivo y archivos que no tengan ninguna extensión de archivo.

Notas

Los scripts son archivos que a menudo contienen información y procesos muy confidenciales. Estos también contienen, entre otras cosas, las credenciales necesarias para poder llamar y ejecutar los procesos automáticamente. De lo contrario, el administrador o desarrollador tendría que introducir la contraseña correspondiente cada vez que se llame al script o al programa compilado.

Scripts

Cronjobs

Los cronjobs son la ejecución independiente de comandos, programas y scripts. Estos se dividen en el área de todo el sistema (/etc/crontab) y ejecuciones dependientes del usuario. Algunas aplicaciones y scripts requieren credenciales para ejecutarse y, por lo tanto, se ingresan incorrectamente en los cronjobs.

Además, están las zonas que se dividen en diferentes rangos horarios ( /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly, /etc/cron.weekly). Los scripts y archivos utilizados crontambién se pueden encontrar en /etc/cron.d/distribuciones basadas en Debian.

Claves SSH

Las claves SSH pueden considerarse "tarjetas de acceso" para el protocolo SSH utilizado para el mecanismo de autenticación de clave pública. Se genera un archivo para el cliente ( Private key) y uno correspondiente para el servidor (Public key). Sin embargo, no son lo mismo, por lo que conocer una public key no es suficiente para encontrar una private key. Una public key puede verificar las firmas generadas por la clave SSH privada y, por lo tanto, permite el inicio de sesión automático en el servidor. Incluso si personas no autorizadas consiguen la clave pública, es casi imposible calcular la clave privada correspondiente a partir de ella. Al conectarse al servidor utilizando la clave SSH privada, el servidor verifica si la clave privada es válida y permite que el cliente inicie sesión en consecuencia. Por lo tanto, ya no se necesitan contraseñas para conectarse vía SSH.

Dado que las claves SSH pueden tener nombres arbitrarios, no podemos buscar nombres específicos en ellas. Sin embargo, su formato nos permite identificarlas de forma única porque, ya sea de clave pública o privada, ambas tienen primeras líneas únicas para distinguirlas.

Claves privadas SSH

Claves públicas SSH


Historial

Todos los archivos históricos proporcionan información crucial sobre el curso actual y pasado/histórico de los procesos. Estamos interesados ​​en los archivos que almacenan el historial de comandos de los usuarios y los registros que almacenan información sobre los procesos del sistema.

En el historial de los comandos introducidos en las distribuciones Linux que utilizan Bash como shell estándar encontramos los archivos asociados en formato .bash_history. Sin embargo, otros archivos cómo .bashrc o .bash_profile pueden contener información importante.

Bash History

Registros

Un concepto esencial de los sistemas Linux son los archivos de registro que se almacenan en archivos de texto. Muchos programas, especialmente todos los servicios y el propio sistema, escriben este tipo de archivos. En ellos encontramos errores del sistema, detectamos problemas relacionados con los servicios o seguimos lo que hace el sistema en segundo plano. La totalidad de los archivos de registro se pueden dividir en cuatro categorías:

Registros de aplicaciones

Registros de eventos

Registros de servicio

Registros del sistema

Existen muchos registros diferentes en el sistema. Estos pueden variar dependiendo de las aplicaciones instaladas, pero estas son algunas de las más importantes:

Archivo de registro

Descripción

/var/log/messages

Registros genéricos de actividad del sistema.

/var/log/syslog

Registros genéricos de actividad del sistema.

/var/log/auth.log

(Debian) Todos los registros relacionados con la autenticación.

/var/log/secure

(RedHat/CentOS) Todos los registros relacionados con la autenticación.

/var/log/boot.log

Información de arranque.

/var/log/dmesg

Información y registros relacionados con hardware y controladores.

/var/log/kern.log

Advertencias, errores y registros relacionados con el kernel.

/var/log/faillog

Intentos fallidos de inicio de sesión.

/var/log/cron

Información relacionada con trabajos cron.

/var/log/mail.log

Todos los registros relacionados con el servidor de correo.

/var/log/httpd

Todos los registros relacionados con Apache.

/var/log/mysqld.log

Todos los registros relacionados con el servidor MySQL.

Cubrir el análisis de estos archivos de registro en detalle sería ineficiente en este caso. Entonces, en este punto, debemos familiarizarnos con los registros individuales, primero examinándolos manualmente y entendiendo sus formatos. Sin embargo, aquí hay algunas cadenas que podemos usar para encontrar contenido interesante en los registros:


Memoria y caché

Muchas aplicaciones y procesos funcionan con las credenciales necesarias para la autenticación y las almacenan en la memoria o en archivos para poder reutilizarlas. Por ejemplo, pueden ser las credenciales requeridas por el sistema para los usuarios que iniciaron sesión. Otro ejemplo son las credenciales almacenadas en los navegadores, que también se pueden leer. Para poder recuperar este tipo de información de las distribuciones Linux existe una herramienta llamada mimipenguinarrow-up-right que facilita todo el proceso. Sin embargo, esta herramienta requiere permisos de administrador/root.

Mimipenguin

Una herramienta aún más poderosa que podemos usar y que se mencionó anteriormente en la sección Búsqueda de credenciales en Windows es LaZagne. Esta herramienta nos permite acceder a muchos más recursos y extraer las credenciales. Las contraseñas y hashes que podemos obtener provienen de las siguientes fuentes pero no se limitan a:

Wifi

Wpa_supplicant

Libsecret

Kwallet

Chromium-based

CLI

Mozilla

Thunderbird

Git

Env_variable

Grub

Fstab

AWS

Filezilla

Gftp

SSH

Apache

Shadow

Docker

KeePass

Mimipy

Sessions

Keyrings

Por ejemplo, los Keyrings se utilizan para el almacenamiento seguro y la gestión de contraseñas en distribuciones de Linux. Las contraseñas se almacenan cifradas y protegidas con una contraseña maestra. Es un administrador de contraseñas basado en sistema operativo, que analizaremos más adelante en otra sección. De esta manera, no necesitamos recordar todas las contraseñas y podemos guardar entradas repetidas de contraseñas.

LaZagne

Los navegadores almacenan las contraseñas guardadas por el usuario de forma cifrada localmente en el sistema para su reutilización. Por ejemplo, el navegador Mozilla Firefox almacena las credenciales cifradas en una carpeta oculta para el usuario respectivo. Estos suelen incluir los nombres de los campos asociados, las URL y otra información valiosa.

Por ejemplo, cuando almacenamos las credenciales de una página web en el navegador Firefox, se cifran y se almacenan en logins.json. Sin embargo, esto no significa que estén seguros allí. Muchos empleados almacenan dichos datos de inicio de sesión en su navegador sin sospechar que pueden ser descifrados fácilmente y utilizados contra la empresa.

Credenciales almacenadas de Firefox

Firefox Decrypt

La herramienta Firefox Decryptarrow-up-right es excelente para descifrar estas credenciales y se actualiza periódicamente. Requiere Python 3.9 para ejecutar la última versión. De lo contrario, Firefox Decrypt 0.7.0 debe utilizar Python 2.

Alternativamente, LaZagne también puede devolver resultados si el usuario ha utilizado el navegador compatible.


Ejemplo práctico

Examina el objetivo y descubre la contraseña del usuario Will. Luego, envíe la contraseña como respuesta.

circle-info

A veces, no tendremos ninguna credencial inicial disponible y, como último paso, necesitaremos aplicar fuerza bruta a las credenciales de los servicios disponibles para obtener acceso. Desde otros hosts de la red, nuestros compañeros pudieron identificar al usuario "Kira", que en la mayoría de los casos tenía acceso SSH a otros sistemas con la contraseña "LoveYou1"

Escaneo de puertos

Conexión por SSH

Al intentar conectarnos con las credenciales proporcionadas no podemos entrar, por lo que necesitaremos aplicar técnicas de mutación de contraseñas.

Password Mutation

Vamos a mutar el password LoveYou1 con el objetivo de acceder por SSH. Para ello vamos a usar hashcat de la siguiente manera:

Brute Force

Nos encuentra la contraseña correcta: L0vey0u1!. Probamos a conectarnos por SSH y conseguimos acceder sin problema:

Enumeración

Encontramos una herramienta interesante en el .bash_history: firefox_decrypt.git. Está eliminada por lo que vamos a descargarla en nuestro Kali y enviarla para ejecutarla en el servidor.

Vamos a la ruta /home/kira/.mozilla/firefox, enviamos el script y lo ejecutamos de la siguiente manera:

Y finalmente obtenemos el password del usuario Will: TUqr7QfLTLhruhVbCP

Última actualización