El almacenar o guardas las credenciales con las que se accede a las distintas aplicaciones web es una práctica muy extendida por los usuarios convencionales, mientras que aquellos que con algo más de precaución optan por emplear gestores de contraseñas especializados. En todo caso este elemento de los usuarios (sus credenciales), es un recurso bastante atractivo para los atacantes. En organizaciones corporativas independientemente del tamaño, los usuarios tienden a depositar la confianza en los sistemas de seguridad perimetral de la red y si a esto le sumamos que tener que recordar nuevos juegos de credenciales para los accesos internos se vuelve tedioso, el emplear este tipo de funcionalidades que disponen los navegadores modernos suele ser una tendencia, que todo hay que decirlo, cómodos sin que son. Ahora bien, ¿Cómo está el tema de la protección de estas credenciales? La respuesta rápida es: ¡estás perdido! Bajo ciertas circunstancias las credenciales pueden ser «recuperadas» por un potencial atacante. A continuación veremos algunas posibilidades que tendríamos que valorar desplegar durante una etapa de Post-Explotación.

Introducción

Partiremos con el siguiente par de credenciales guardadas en el navegador Firefox actualizado:

Nuevamente tendremos que revisar el directorio AppData de cada perfil de usuario, en concreto la ruta %appdata%\Mozilla\Firefox, aquí nos encontraremos una estructura similar a la siguiente:

De este directorio será interesante revisar el fichero profiles, cuyo contenido será muy revelador:

Nuestra atención se debe posicionar sobre el apartado Profile0, que en este caso muestra el directorio que debemos visitar inmediatamente:

Accedemos a la ruta revelada en el apartado Profile0 y observamos la siguiente información:

Según la herramienta que empleemos, podremos llegar a necesitar recopilar estos 4 ficheros siguientes:

Antes de pasar a revisar un par de herramientas que nos permitan obtener las credenciales en texto claro, demos un vistazo al contenido típico del fichero logins.json:

Extracción mediante Firepwd.py

Esta herramienta (Firepwd.py) ya tiene sus añitos sin embargo sigue siendo bastante efectiva a la hora de recuperar estas credenciales a partir de algunos ficheros extraídos desde el host de la víctima:

En principio nos valdrá con obtener estos dos ficheros key4.db y logins.json, aunque alternativamente también nos vendrá bien tener key3.db y signons.sqlite.
Para ponerlo en marcha tan solo hace falta conocer su panel de ayuda (-h):

python3 /home/user/Documents/Tools/firepwd/firepwd.py

La salida del comando es bastante extensa ya que nos muestra y explica el proceso realizado para conseguir descifrar las credenciales almacenadas en Firefox (ver enlace de la última referencia para más información). No obstante debajo del todo veremos las credenciales:

Extracción mediante Firefox Decrypt

También contamos con otra alternativa algo más «actual», se trata de la herramienta Firefox Decrypt y ésta nos requerirá algún fichero adicional, en este caso el cert9.db:

En este caso el menú de ayuda (-h) es algo más voluminoso:

Para nuestro propósito lo pondremos en marcha de la siguiente manera:

python3 /home/user/Documents/Tools/firefox_decrypt/firefox_decrypt.py 10.10.10.4_LowUser/

Como se observa, también seremos capaces de obtener este par de credenciales de manera ágil.

Automatizando la recolección de ficheros con FireCredsCollector

En algún momento durante la fase de Post-Explotación podríamos tener la necesidad de recopilar todos estos ficheros mencionados anteriormente (cert9.db, cookies.sqlite, key3.db, key4.db, logins.json y signons.sqlite) de forma remota y medianamente rápido, incluso estando en un entorno de Active Directory, por ejemplo. Se me ocurrió generar este automatismo que te permita a través de un usuario que cuente con los privilegios necesarios para llegar a cada ruta del perfil de usuario (recuerda: %appdata%\Mozilla\Firefox), ubicar de forma sencilla estos ficheros y recopilarlos en el equipo del atacante, para posteriormente descifrarlo ya sea con Firepwd.py o Firefox Decrypt.

La parte de la autenticación la he generado mediante un HASH NT e internamente el script emplea la herramienta smbclient. A continuación la puesta en marcha y los resultados que podremos obtener:

./FireCredsCollector.sh -t TARGET -d DOMAIN -u USER -h HASH NT

Por si os vale, os dejo por aquí el GitHub desde donde podréis descargar esto (además ver una demo, XD), que he llamado simplemente FireCredsCollector.

Por último comentar que me estoy dejando fuera de esta entrada otras utilidades conocidas como LaZagne, FF Password Exporter y otras herramientas gráficas y/o de escritorio. Tal vez pueda recopilarlas en otro próximo post, ya veremos.

Referencias