Credential Hunting
La búsqueda de credenciales es uno de los primeros pasos una vez que tenemos acceso al sistema. Estos frutos maduros pueden darnos privilegios elevados en cuestión de segundos o minutos. Entre otras cosas, esto es parte del proceso de escalada de privilegios local 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 conseguido acceder a un sistema a través de una aplicación web vulnerable y, por lo tanto, hemos obtenido una shell inversa, por ejemplo. Por lo tanto, para escalar nuestros privilegios de la forma más eficiente, podemos buscar contraseñas o incluso credenciales completas que podamos utilizar para iniciar sesión en nuestro objetivo. Hay varias fuentes que pueden proporcionarnos credenciales que clasificamos en cuatro categorías.
Estas incluyen, pero no se limitan a:
Configs
Logs
Cache
Browser stored credentials
Databases
Command-line History
In-memory Processing
Notes
Scripts
Source codes
Cronjobs
SSH Keys
Enumerar todas estas categorías nos permitirá aumentar la probabilidad de averiguar con cierta facilidad las credenciales de los usuarios existentes en el sistema. Existen innumerables situaciones diferentes en las que siempre veremos resultados distintos. Por lo tanto, debemos adaptar nuestro enfoque a las circunstancias del entorno y tener en cuenta el panorama general. Sobre todo, es crucial tener en cuenta cómo funciona el sistema, su enfoque, para qué existe y qué papel desempeña en la lógica empresarial y en la red global.
Por ejemplo, supongamos que se trata de un servidor de base de datos aislado. En ese caso, no necesariamente encontraremos allí usuarios normales, ya que se trata de una interfaz sensible en la gestión de datos a la que sólo unas pocas personas tienen acceso.
Files
Un principio básico de Linux es que todo es un archivo. Por lo tanto, es crucial tener este concepto en mente y buscar, encontrar y filtrar los archivos apropiados según nuestros requisitos. Debemos buscar, encontrar e inspeccionar varias categorías de archivos uno por uno. Estas categorías son las siguientes:
Scripts
Cronjobs
SSH keys
Configuration Files
Los archivos de configuración son el núcleo de la funcionalidad de los servicios en las distribuciones Linux. A menudo contienen incluso credenciales que podremos leer. Su conocimiento también nos permite entender cómo funciona el servicio y sus requisitos con precisión. Normalmente, los archivos de configuración están marcados con las siguientes tres extensiones de archivo (.config, .conf, .cnf). Sin embargo, estos archivos de configuración o los archivos de extensión asociados pueden renombrarse, 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 tendría el mismo efecto. Sin embargo, este es un caso raro con el que no nos encontraremos a menudo, 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 visión general del mismo. Por lo tanto, el primer paso debe ser encontrar todos los posibles archivos de configuración del 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.
Credentials in Configuration Files
Opcionalmente, podemos guardar el resultado en un archivo de texto y utilizarlo 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 especificada y mostrar el contenido. En este ejemplo, buscamos tres palabras (user, password, pass) en cada fichero con extensión .cnf.
Databases
También podemos aplicar esta sencilla búsqueda 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.
Notes
Dependiendo del entorno en el que nos encontremos y del propósito del host en el que estemos, a menudo podemos encontrar notas sobre procesos específicos del sistema. Éstas a menudo incluyen listas de diferentes puntos de acceso o incluso sus credenciales.
Sin embargo, a menudo es difícil encontrar notas de inmediato 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 llamarse como se quiera y no tienen por qué tener una extensión de archivo específica, como .txt. Por lo tanto, en este caso, tenemos que buscar archivos que incluyan la extensión de archivo .txt y archivos que no tengan ninguna extensión de archivo.
Scripts
Los scripts son archivos que a menudo contienen información y procesos altamente sensibles. Entre otras cosas, también contienen 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 llamara al script o al programa compilado.
Cronjobs
Cronjobs son ejecuciones independientes de comandos, programas, scripts. 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 introducen incorrectamente en los cronjobs. Además, existen las áreas que se dividen en diferentes intervalos de tiempo (/etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly, /etc/cron.weekly). Los scripts y archivos utilizados por cron también pueden encontrarse en /etc/cron.d/ para las distribuciones basadas en Debian.
SSH Keys
Las claves SSH pueden considerarse «tarjetas de acceso» al protocolo SSH utilizado para el mecanismo de autenticación de clave pública. Se genera un archivo para el cliente (clave privada) y otro correspondiente para el servidor (clave pública). Sin embargo, éstas no son iguales, por lo que conocer la clave pública es insuficiente para encontrar una clave privada. La clave pública puede verificar las firmas generadas por la clave privada SSH y permitir así el inicio de sesión automático en el servidor. Aunque personas no autorizadas se hagan con la clave pública, es casi imposible calcular la privada coincidente a partir de ella. Al conectarse al servidor utilizando la clave privada SSH, el servidor comprueba si la clave privada es válida y permite al cliente iniciar la sesión en consecuencia. Así, ya no se necesitan contraseñas para conectarse a través de SSH.
Como las claves SSH pueden tener nombres arbitrarios, no podemos buscar en ellas nombres concretos. Sin embargo, su formato nos permite identificarlas unívocamente porque, ya sean de clave pública o de clave privada, ambas tienen primeras líneas únicas para distinguirlas.
SSH Private Keys
SSH Public Keys
History
Todos los archivos de historial proporcionan información crucial sobre el curso actual y pasado/histórico de los procesos. Nos interesan 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 de Linux que utilizan Bash como shell estándar, encontramos los archivos asociados en .bash_history. Sin embargo, otros archivos como .bashrc o .bash_profile pueden contener información importante.
Bash History
Logs
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 el sistema está haciendo en segundo plano. La totalidad de los archivos de registro se puede dividir en cuatro categorías:
Application Logs
Event Logs
Service Logs
System Logs
Existen muchos registros diferentes en el sistema. Éstos pueden variar en función de las aplicaciones instaladas, pero he aquí algunos de los más importantes:
Log File
Description
/var/log/messages
Generic system activity logs.
/var/log/syslog
Generic system activity logs.
/var/log/auth.log
(Debian) All authentication related logs.
/var/log/secure
(RedHat/CentOS) All authentication related logs.
/var/log/boot.log
Booting information.
/var/log/dmesg
Hardware and drivers related information and logs.
/var/log/kern.log
Kernel related warnings, errors and logs.
/var/log/faillog
Failed login attempts.
/var/log/cron
Information related to cron jobs.
/var/log/mail.log
All mail server related logs.
/var/log/httpd
All Apache related logs.
/var/log/mysqld.log
All MySQL server related logs.
Cubrir el análisis de estos archivos de registro en detalle sería ineficaz en este caso. Así que 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:
Memory and Cache
Mimipenguin
LaZagne
Una herramienta aún más potente que podemos utilizar y que se mencionó anteriormente en la sección Caza 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:
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 almacenar y gestionar de forma segura las contraseñas en las distribuciones Linux. Las contraseñas se almacenan encriptadas y protegidas con una contraseña maestra. Se trata de un gestor de contraseñas basado en el sistema operativo, del que hablaremos más adelante en otra sección. De esta forma, no necesitamos recordar todas y cada una de las contraseñas y podemos guardar entradas de contraseñas repetidas.
Browsers
Los navegadores almacenan las contraseñas guardadas por el usuario de forma cifrada localmente en el sistema para su reutilización. Por ejemplo, Mozilla Firefox almacena las credenciales cifradas en una carpeta oculta para el usuario correspondiente. Estas suelen incluir los nombres de campo, las URL y otra información valiosa.
Por ejemplo, al almacenar las credenciales de una página web en Firefox, estas se cifran y se almacenan en logins.json en el sistema. Sin embargo, esto no significa que estén seguras allí. Muchos empleados almacenan estos datos de inicio de sesión en su navegador sin sospechar que pueden descifrarse fácilmente y utilizarse en contra de la empresa.
Firefox Stored Credentials
La herramienta Firefox Decrypt
es excelente para descifrar estas credenciales y se actualiza periódicamente. Requiere Python 3.9 para ejecutar la última versión. De lo contrario, se debe usar Firefox Decrypt 0.7.0 con Python 2.
Decrypting Firefox Credentials
Normalmente es neceario disponer de los siguientes archivos:
Browsers - LaZagne
Alternativamente, LaZagne también puede devolver resultados si el usuario ha utilizado el navegador compatible.
Última actualización