Pillaging
El pillaging es el proceso de obtener información de un sistema comprometido. Puede tratarse de información personal, planos corporativos, datos de tarjetas de crédito, información del servidor, detalles de la infraestructura y la red, contraseñas u otros tipos de credenciales, y cualquier cosa relevante para la empresa o la evaluación de seguridad en la que estamos trabajando.
Estos puntos de datos pueden ayudar a obtener más acceso a la red o a completar los objetivos definidos durante el proceso previo a la prueba de penetración. Estos datos se pueden almacenar en varias aplicaciones, servicios y tipos de dispositivos, por lo que es posible que necesitemos herramientas específicas para extraerlos.
Fuentes de datos
A continuación se muestran algunas de las fuentes de las que podemos obtener información de los sistemas comprometidos:
Aplicaciones instaladas
Servicios instalados
Sitios web
Recursos compartidos de archivos
Bases de datos
Servicios de directorio (como Active Directory, Azure AD, etc.)
Servidores de nombres
Servicios de implementación
Autoridad de certificación
Servidor de gestión de código fuente
Virtualización
Mensajería
Sistemas de Monitoreo y Registro
Copias de seguridad
Datos sensibles
Registro de claves o contraseñas
Captura de pantalla
Captura de tráfico de red
Informes de auditorías anteriores
Información del usuario
Archivos históricos, documentos interesantes (.doc/x, .xls/x, password./pass . , etc.)
Roles y privilegios
Navegadores web
Clientes de mensajería instantánea
Esta no es una lista completa. Cualquier cosa que pueda proporcionar información sobre nuestro objetivo será valiosa. Dependiendo del tamaño, el propósito y el alcance de la empresa, podemos encontrar información diferente. El conocimiento y la familiaridad con las aplicaciones, el software de servidor y el middleware de uso común son esenciales, ya que la mayoría de las aplicaciones almacenan sus datos en varios formatos y ubicaciones. Es posible que se necesiten herramientas especiales para obtener, extraer o leer los datos objetivo de algunos sistemas.
Durante las siguientes secciones, discutiremos y practicaremos algunos aspectos del Pillaging en Windows.
Escenario
Supongamos que hemos logrado establecernos en el servidor Windows mencionado en la red a continuación y comenzamos a recopilar la mayor cantidad de información posible.
Aplicaciones instaladas
Comprender qué aplicaciones están instaladas en nuestro sistema comprometido puede ayudarnos a lograr nuestro objetivo durante una prueba de penetración. Es importante saber que cada prueba de penetración es diferente. Podemos encontrar muchas aplicaciones desconocidas en los sistemas que comprometimos. Aprender y comprender cómo se conectan estas aplicaciones a la empresa es esencial para lograr nuestro objetivo.
También encontraremos aplicaciones típicas como Office, sistemas de gestión remota, clientes de mensajería instantánea, etc. Podemos utilizar dir
o ls
para comprobar el contenido de Program Files
y Program Files (x86)
saber qué aplicaciones están instaladas. Aunque puede que haya otras aplicaciones en el ordenador, esta es una forma rápida de revisarlas.
Identificación de aplicaciones comunes
Una alternativa es utilizar PowerShell y leer el registro de Windows para recopilar información más granular sobre los programas instalados.
Obtener programas instalados a través de PowerShell y claves de registro
Podemos ver que el software mRemoteNG
está instalado en el sistema. mRemoteNG es una herramienta que se utiliza para administrar y conectarse a sistemas remotos mediante VNC, RDP, SSH y protocolos similares. Echemos un vistazo a mRemoteNG
.
mRemoteNG
mRemoteNG
guarda la información de conexión y las credenciales en un archivo llamado confCons.xml
. Utilizan una contraseña maestra codificada, mR3m
, por lo que si alguien comienza a guardar las credenciales en mRemoteNG
y no protege la configuración con una contraseña, podemos acceder a las credenciales desde el archivo de configuración y descifrarlas.
De forma predeterminada, el archivo de configuración se encuentra en %USERPROFILE%\APPDATA\Roaming\mRemoteNG
.
Archivos de configuración de mRemoteNG
Veamos el contenido del archivo confCons.xml
.
Este documento XML contiene un elemento raíz llamado Connections
con la información sobre el cifrado utilizado para las credenciales y el atributo Protected
, que corresponde a la contraseña maestra utilizada para cifrar el documento. Podemos utilizar esta cadena para intentar descifrar la contraseña maestra. Encontraremos algunos elementos nombrados dentro del elemento raíz Node
. Esos nodos contienen detalles sobre el sistema remoto, como el nombre de usuario, el dominio, el nombre de host, el protocolo y la contraseña. Todos los campos son texto sin formato excepto la contraseña, que está cifrada con la contraseña maestra.
Como se mencionó anteriormente, si el usuario no estableció una contraseña maestra personalizada, podemos usar el script mRemoteNG-Decrypt para descifrar la contraseña. Necesitamos copiar el contenido del atributo Password
y usarlo con la opción -s
. Si hay una contraseña maestra y la conocemos, podemos usar la opción -p
con la contraseña maestra personalizada para descifrar también la contraseña.
Descifrar la contraseña con mremoteng_decrypt
Ahora veamos un archivo de configuración cifrado con una contraseña personalizada. Para este ejemplo, configuramos la contraseña personalizada admin
.
Archivo de configuración de mRemoteNG: confCons.xml
Intentar descifrar la contraseña con una contraseña personalizada
Si intentamos descifrar el atributo Password
del nodo RDP_Domain
, obtendremos el siguiente error.
Si usamos la contraseña personalizada, podremos descifrarla.
Descifrar la contraseña con mremoteng_decrypt y una contraseña personalizada
En caso de que queramos intentar descifrar la contraseña, podemos modificar el script para probar varias contraseñas de un archivo, o podemos crear un Bash for loop
. Podemos intentar descifrar el atributo Protected
o el mismo Password
. Si intentamos descifrar el atributo Protected
una vez que encontramos la contraseña correcta, el resultado será Password: ThisIsProtected
. Si intentamos descifrar el Password
directamente, el resultado será Password: <PASSWORD>
.
Bucle For para descifrar la contraseña maestra con mremoteng_decrypt
Abuso de cookies para obtener acceso a clientes de mensajería instantánea
Con la capacidad de enviar mensajes instantáneamente entre compañeros de trabajo y equipos, las aplicaciones de mensajería instantánea (MI) como Slack
y Microsoft Teams
se han convertido en elementos básicos de las comunicaciones de oficina modernas. Estas aplicaciones ayudan a mejorar la colaboración entre compañeros de trabajo y equipos. Si comprometemos una cuenta de usuario y obtenemos acceso a un cliente de mensajería instantánea, podemos buscar información en chats y grupos privados.
Hay múltiples opciones para obtener acceso a un cliente de mensajería instantánea; un método estándar es utilizar las credenciales del usuario para ingresar a la versión en la nube de la aplicación de mensajería instantánea como lo haría un usuario normal.
Si el usuario utiliza alguna forma de autenticación multifactor, o no podemos obtener las credenciales de texto simple del usuario, podemos intentar robar las cookies del usuario para iniciar sesión en el cliente basado en la nube.
A menudo existen herramientas que pueden ayudarnos a automatizar el proceso, pero como la nube y las aplicaciones evolucionan constantemente, es posible que estas aplicaciones queden obsoletas y que aún tengamos que encontrar una forma de recopilar información de los clientes de mensajería instantánea. Comprender cómo abusar de las credenciales, las cookies y los tokens suele ser útil para acceder a aplicaciones web como los clientes de mensajería instantánea.
Tomemos Slack
como ejemplo varias publicaciones que hacen referencia a cómo abusar de Slack Slack
, como Abusar de Slack para operaciones ofensivas y Suplantación de identidad para obtener tokens de Slack . Podemos usarlas para comprender mejor cómo funcionan los tokens y las cookies de Slack, pero tenga en cuenta que el Slack's
comportamiento puede haber cambiado desde la publicación de esas publicaciones.
También existe una herramienta llamada SlackExtract , lanzada en 2018, que fue capaz de extraer Slack
mensajes. Su investigación analiza la cookie denominada d
, que Slack
se utiliza para almacenar el token de autenticación del usuario. Si podemos conseguir esa cookie, podremos autenticarnos como el usuario. En lugar de utilizar la herramienta, intentaremos obtener la cookie de Firefox o de un navegador basado en Chromium y autenticarnos como el usuario.
Extracción de cookies de Firefox
Firefox guarda las cookies en una base de datos SQLite en un archivo llamado cookies.sqlite
. Este archivo se encuentra en el directorio APPDATA de cada usuario %APPDATA%\Mozilla\Firefox\Profiles\<RANDOM>.default-release
. Hay una parte del archivo que es aleatoria y podemos usar un comodín en PowerShell para copiar el contenido del archivo.
Copiar la base de datos de cookies de Firefox
Podemos copiar el archivo a nuestra máquina y usar el script de Python cookieextractor.py para extraer cookies de la base de datos cookies.SQLite
de Firefox.
Extraer la cookie de Slack de la base de datos de cookies de Firefox
Ahora que tenemos la cookie, podemos usar cualquier extensión del navegador para agregarla a nuestro navegador. Para este ejemplo, usaremos Firefox y la extensión Cookie-Editor . Asegúrese de instalar la extensión haciendo clic en el enlace, seleccionando su navegador y agregando la extensión. Una vez que la extensión esté instalada, verá algo como esto:
Nuestro sitio web de destino es slack.com
. Ahora que tenemos la cookie, queremos suplantar al usuario. Naveguemos a slack.com una vez que se cargue la página, hagamos clic en el ícono de la extensión Cookie-Editor y modifiquemos el valor de la cookie d
con el valor que tenga del script cookieextractor.py
. Asegúrese de hacer clic en el ícono de guardar (marcado en rojo en la imagen a continuación).
Una vez que hayas guardado la cookie, puedes actualizar la página y ver que has iniciado sesión como usuario.
Ahora hemos iniciado sesión como usuario y podemos hacer clic en Launch Slack
. Es posible que nos soliciten credenciales u otro tipo de información de autenticación; podemos repetir el proceso anterior y reemplazar la cookie d
con el mismo valor que usamos para acceder la primera vez en cualquier sitio web que nos solicite información o credenciales.
Una vez que completemos este proceso para cada sitio web donde recibamos un mensaje, debemos actualizar el navegador, hacer clic en Launch Slack
y usarlo en el navegador.
Después de obtener acceso, podemos usar funciones integradas para buscar palabras comunes como contraseñas, credenciales, PII o cualquier otra información relevante para nuestra evaluación.
Extracción de cookies de navegadores basados en Chromium
El navegador basado en Chromium también almacena la información de sus cookies en una base de datos SQLite. La única diferencia es que el valor de la cookie está encriptado con la API de protección de datos (DPAPI) . DPAPI
Se utiliza comúnmente para encriptar datos utilizando información de la cuenta o computadora del usuario actual.
Para obtener el valor de la cookie, necesitaremos realizar una rutina de descifrado desde la sesión del usuario que hemos comprometido. Afortunadamente, una herramienta llamada SharpChromium hace lo que necesitamos. Se conecta a la base de datos de cookies SQLite del usuario actual, descifra el valor de la cookie y presenta el resultado en formato JSON.
Usemos Invoke-SharpChromium , un script de PowerShell creado por S3cur3Th1sSh1t que usa reflexión para cargar SharpChromium.
Script de PowerShell: Invoke-SharpChromium
Recibimos un error porque la ruta del archivo de cookies que contiene la base de datos está codificada en SharpChromium y la versión actual de Chrome utiliza una ubicación diferente.
Podemos modificar el código SharpChromium
o copiar el archivo cookie en el lugar donde SharpChromium lo esté buscando.
SharpChromium
está buscando un archivo en %LOCALAPPDATA%\Google\Chrome\User Data\Default\Cookies
, pero el archivo real se encuentra en %LOCALAPPDATA%\Google\Chrome\User Data\Default\Network\Cookies
, con el siguiente comando copiaremos el archivo a la ubicación que SharpChromium espera.
Copiar cookies a SharpChromium Ubicación esperada
Ahora podemos usar Invoke-SharpChromium nuevamente para obtener una lista de cookies en formato JSON.
Extracción de cookies de Invoke-SharpChromium
Ahora podemos utilizar esta cookie con el editor de cookies como lo hicimos con Firefox.
Nota: al copiar y pegar el contenido de una cookie, asegúrese de que el valor sea una línea.
Clipboard
En muchas empresas, los administradores de red utilizan gestores de contraseñas para almacenar sus credenciales y copiar y pegar contraseñas en formularios de inicio de sesión. Como esto no implica escribir
las contraseñas, el registro de pulsaciones de teclas no es eficaz en este caso. Este clipboard
proporciona acceso a una cantidad significativa de información, como el pegado de credenciales y tokens de software 2FA, así como la posibilidad de interactuar directamente con el portapapeles de la sesión RDP.
Podemos utilizar el script Invoke-Clipboard para extraer los datos del portapapeles del usuario. Inicie el registrador ejecutando el siguiente comando.
Supervisar el portapapeles con PowerShell
El script comenzará a monitorear las entradas en el portapapeles y las presentará en la sesión de PowerShell. Debemos ser pacientes y esperar hasta que capturemos información confidencial.
Capturar credenciales con Invoke-ClipboardLogger
Nota: Las credenciales de usuario se pueden obtener con herramientas como Mimikatz o un keylogger. Los frameworks C2 como Metasploit con Meterpreter contienen funciones integradas para keylogger.
Roles y servicios
Los servicios de un host en particular pueden prestar servicios al propio host o a otros hosts de la red de destino. Es necesario crear un perfil de cada host de destino, documentando la configuración de estos servicios, su finalidad y cómo podemos utilizarlos potencialmente para alcanzar nuestros objetivos de evaluación. Las funciones y servicios típicos del servidor incluyen:
Servidores de archivos e impresión
Servidores web y de bases de datos
Servidores de autoridad de certificación
Servidores de gestión de código fuente
Servidores de respaldo
Tomemos Backup Servers
como ejemplo, si comprometemos un servidor o host con un sistema de backup, podemos comprometer la red.
Ataque a servidores de Backup
En tecnología de la información, un backup
(o copia de seguridad) es una copia de datos informáticos que se toma y se almacena en otro lugar para que pueda utilizarse para restaurar el original después de un evento de pérdida de datos. Las copias de seguridad se pueden utilizar para recuperar datos después de una pérdida debido a la eliminación o corrupción de datos o para recuperar datos de un momento anterior. Las copias de seguridad proporcionan una forma sencilla de recuperación ante desastres. Algunos sistemas de copia de seguridad pueden reconstruir un sistema informático u otras configuraciones complejas, como un servidor de Active Directory o un servidor de base de datos.
Por lo general, los sistemas de respaldo necesitan una cuenta para conectarse a la máquina de destino y realizar la copia de seguridad. La mayoría de las empresas requieren que las cuentas de respaldo tengan privilegios administrativos locales en la máquina de destino para acceder a todos sus archivos y servicios.
Si obtenemos acceso a un sistema de backup
, podremos revisar copias de seguridad, buscar hosts interesantes y restaurar los datos que queramos.
Como ya comentamos anteriormente, buscamos información que nos ayude a movernos lateralmente en la red o a aumentar nuestros privilegios. Tomemos como ejemplo a Restic. Restic
es un programa de copia de seguridad moderno que puede realizar copias de seguridad de archivos en Linux, BSD, Mac y Windows.
Para empezar a trabajar con restic
, debemos crear un repositorio
(el directorio donde se almacenarán los backups). Restic
comprueba si la variable de entorno RESTIC_PASSWORD
está configurada y utiliza su contenido como contraseña para el repositorio. Si esta variable no está configurada, solicitará la contraseña para inicializar el repositorio y para cualquier otra operación en este repositorio.
Usaremos restic 0.13.1
y respaldaremos el repositorio C:\xampp\htdocs\webapp
en el directorio E:\restic\
. Para descargar la última versión de restic, visite https://github.com/restic/restic/releases/latest . En nuestra máquina de destino, restic se encuentra en C:\Windows\System32\restic.exe
.
Primero debemos crear e inicializar la ubicación donde se guardará nuestra copia de seguridad, llamada repository
.
Restic - Inicializar directorio de respaldo
Luego podremos crear nuestra primera copia de seguridad.
restic - Realizar una copia de seguridad de un directorio
Si queremos realizar un respaldo de un directorio como por ejemplo C:\Windows
, que tiene algunos archivos utilizados activamente por el sistema operativo, podemos utilizar la opción --use-fs-snapshot
para crear un VSS (Volume Shadow Copy) para realizar el respaldo.
restic - Realizar una copia de seguridad de un directorio con VSS
Nota: Si el usuario no tiene los derechos para acceder o copiar el contenido de un directorio, es posible que aparezca un mensaje de Acceso denegado. Se creará la copia de seguridad, pero no se encontrará ningún contenido.
También podemos comprobar qué copias de seguridad están guardadas en el repositorio mediante el comando snapshot
.
Restic - Verificar copias de seguridad guardadas en un repositorio
Podemos restaurar una copia de seguridad utilizando el ID.
Restic - Restaurar una copia de seguridad con ID
Si navegamos hasta C:\Restore
, encontraremos la estructura de directorios donde se realizó la copia de seguridad. Para llegar al directorio SampleFolder
, debemos navegar hasta C:\Restore\C\SampleFolder
.
Necesitamos entender nuestros objetivos y qué tipo de información estamos buscando. Si encontramos una copia de seguridad de una máquina Linux, es posible que queramos revisar archivos como /etc/shadow
, credenciales de usuario, archivos de configuración web, directorios .ssh
para buscar claves SSH, etc.
Si nuestro objetivo es realizar una copia de seguridad de Windows, es posible que queramos buscar el subárbol SAM & SYSTEM para extraer los hashes de las cuentas locales. También podemos identificar los directorios de aplicaciones web y los archivos comunes donde se almacenan las credenciales o la información confidencial, como los archivos web.config. Nuestro objetivo es buscar cualquier archivo interesante que pueda ayudarnos a lograr nuestro objetivo.
Nota: restic funciona de manera similar en Linux. Si no sabemos dónde se guardan los snapshots de restic, podemos buscar en el sistema de archivos un directorio llamado snapshots. Tenga en cuenta que es posible que la variable de entorno no esté configurada. Si ese es el caso, necesitaremos proporcionar una contraseña para restaurar los archivos.
Existen cientos de aplicaciones y métodos para realizar copias de seguridad, y no podemos detallar cada uno de ellos. Este caso de restic
es un ejemplo de cómo podría funcionar una aplicación de copias de seguridad. Otros sistemas gestionarán una consola centralizada y repositorios especiales para guardar la información de las copias de seguridad y ejecutar las tareas de copia de seguridad.
A medida que avanzamos, encontraremos diferentes sistemas de respaldo, y recomendamos tomarnos el tiempo para comprender cómo funcionan para que eventualmente podamos abusar de sus funciones para nuestro propósito.
Conclusión
Aún existen muchas ubicaciones, aplicaciones y métodos para obtener información interesante de un host objetivo o una red comprometida. Podemos encontrar información en servicios en la nube, dispositivos de red, IoT, etc. Sea abierto y creativo para explorar su objetivo y su red y obtenga la información que necesita utilizando sus métodos y experiencia.
Caso práctico
Pregunta 1
Acceda a la máquina de destino con las credenciales de Peter y verifique qué aplicaciones están instaladas. ¿Qué aplicación está instalada y se utiliza para administrar y conectarse a sistemas remotos?
Pregunta 2
Busque el archivo de configuración de la aplicación que identifique e intente obtener las credenciales del usuario Grace. ¿Cuál es la contraseña de la cuenta local Grace?
Pregunta 3
Inicie sesión como Grace y busque las cookies del sitio web slacktestapp.com. Use la cookie para iniciar sesión en slacktestapp.com desde un navegador dentro de la sesión RDP y envíe la alerta.
Pregunta 4
Inicie sesión como Grace y busque las cookies del sitio web slacktestapp.com. Use la cookie para iniciar sesión en slacktestapp.com desde un navegador dentro de la sesión RDP y envíe la alerta.
Pregunta 5
Inicie sesión como Jeff a través de RDP y busque la contraseña para las copias de seguridad de REST. Envíe la contraseña como respuesta.
Pregunta 6
Restaura el directorio que contiene los archivos necesarios para obtener los hashes de contraseñas de los usuarios locales. Enviar el hash del administrador como respuesta.
Pregunta 7
Utilice el hash con una técnica Pass-The-Hash para iniciar sesión como administrador.
Última actualización
¿Te fue útil?