👾Atacando Servicios Comunes
Las vulnerabilidades suelen ser descubiertas por personas que utilizan y comprenden la tecnología, un protocolo o un servicio. A medida que evolucionemos en este campo, encontraremos diferentes servicios con los que interactuar y necesitaremos evolucionar y aprender nuevas tecnologías constantemente.
Para tener éxito al atacar un servicio, necesitamos conocer su propósito, cómo interactuar con él, qué herramientas podemos usar y qué podemos hacer con él. Esta sección se centrará en los servicios comunes y en cómo podemos interactuar con ellos.
Servicios para compartir archivos
Un servicio para compartir archivos es un tipo de servicio que proporciona, media y supervisa la transferencia de archivos informáticos. Hace años, las empresas solían utilizar solo servicios internos para compartir archivos, como SMB, NFS, FTP, TFTP, SFTP, pero a medida que crece la adopción de la nube, la mayoría de las empresas ahora también cuentan con servicios de nube de terceros como Dropbox, Google Drive, OneDrive, SharePoint u otras formas de almacenamiento de archivos como AWS S3, Azure Blob Storage o Google Cloud Storage. Estaremos expuestos a una combinación de servicios de intercambio de archivos internos y externos, y debemos estar familiarizados con ellos.
Esta sección se centrará en los servicios internos, pero esto puede aplicarse al almacenamiento en la nube sincronizado localmente con servidores y estaciones de trabajo.
Server Message Block (SMB)
SMB se usa comúnmente en redes Windows y, a menudo, encontraremos carpetas compartidas en una red Windows. Podemos interactuar con SMB utilizando la GUI, CLI o herramientas. Cubramos algunas formas comunes de interactuar con SMB usando Windows y Linux.
SMB en Windows
Hay diferentes formas en que podemos interactuar con una carpeta compartida usando Windows y exploraremos algunas de ellas. En la GUI de Windows, podemos presionar [WINKEY] + [R]
para abrir el cuadro de diálogo Ejecutar y escribir la ubicación del archivo compartido, por ejemplo:\\192.168.220.129\Finance\
Supongamos que la carpeta compartida permite la autenticación anónima, o estamos autenticados con un usuario que tiene privilegios sobre esa carpeta compartida. En ese caso, no recibiremos ningún tipo de solicitud de autenticación y mostrará el contenido de la carpeta compartida.
Si no tenemos acceso, recibiremos una solicitud de autenticación.
Windows tiene dos shells de línea de comandos: el shell de comandos y PowerShell . Cada shell es un programa de software que proporciona comunicación directa entre nosotros y el sistema operativo o la aplicación, proporcionando un entorno para automatizar las operaciones de TI.
Analicemos algunos comandos para interactuar con archivos compartidos usando Command Shell ( CMD
) y PowerShell
. El comando dir muestra una lista de los archivos y subdirectorios de un directorio.
Windows CMD - DIR
El comando net use conecta o desconecta una computadora de un recurso compartido o muestra información sobre las conexiones de la computadora. Podemos conectarnos a un archivo compartido con el siguiente comando y asignar su contenido a la letra de la unidad n
.
Windows CMD - Net Use
También podemos proporcionar un nombre de usuario y contraseña para autenticarse en el recurso compartido.
Con la carpeta compartida asignada como unidad n
, podemos ejecutar comandos de Windows como si esta carpeta compartida estuviera en nuestra computadora local. Busquemos cuántos archivos contiene la carpeta compartida y sus subdirectorios.
Windows CMD - DIR
Encontramos 29.302 archivos. Repasemos el comando:
Sintaxis | Descripción |
| Solicitud |
| Directorio o unidad para buscar |
|
|
| Muestra archivos en un directorio específico y todos los subdirectorios |
| Utiliza formato simple (sin información de encabezado ni resumen) |
El siguiente comando | find /c ":\\"
procesa la salida de dir n: /a-d /s /b
para contar cuántos archivos existen en el directorio y los subdirectorios. Puede utilizar dir /?
para ver la ayuda completa. Buscar entre 29.302 archivos lleva mucho tiempo; las utilidades de línea de comandos y secuencias de comandos pueden ayudarnos a acelerar la búsqueda. Con dir
podemos buscar nombres específicos en archivos como:
cred
password
users
secrets
key
Extensiones de archivos comunes para código fuente como: .cs, .c, .go, .java, .php, .asp, .aspx, .html.
Si queremos buscar una palabra específica dentro de un archivo de texto, podemos usar findtr .
Windows CMD - Findstr
Podemos encontrar más ejemplos de findstr
aquí .
Windows PowerShell
PowerShell fue diseñado para ampliar las capacidades del shell de comandos para ejecutar comandos de PowerShell llamados cmdlets
. Los cmdlets son similares a los comandos de Windows pero proporcionan un lenguaje de secuencias de comandos más extensible. Podemos ejecutar comandos de Windows y cmdlets de PowerShell en PowerShell, pero el shell de comandos solo puede ejecutar comandos de Windows y no cmdlets de PowerShell. Replicamos los mismos comandos ahora usando Powershell.
En lugar de net use
, podemos usar New-PSDrive
en PowerShell.
Para proporcionar un nombre de usuario y contraseña con Powershell, necesitamos crear un objeto PSCredential . Ofrece una forma centralizada de administrar nombres de usuario, contraseñas y credenciales.
PowerShell - PSCredential Object
En PowerShell, podemos usar el comando Get-ChildItem
o la variante corta gci
en lugar del comando dir
.
PowerShell - GCI
Podemos usar la propiedad -Include
para buscar elementos específicos del directorio especificado por el parámetro Ruta.
El cmdlet Select-String
utiliza la coincidencia de expresiones regulares para buscar patrones de texto en archivos y cadenas de entrada. Podemos usar Select-String
similar a grep
en UNIX o findstr.exe
en Windows.
PowerShell - Select-String
CLI permite que las operaciones de TI automaticen tareas rutinarias como la administración de cuentas de usuario, copias de seguridad nocturnas o la interacción con muchos archivos. Podemos realizar operaciones de manera más eficiente utilizando scripts que la interfaz de usuario o GUI.
SMB en Linux
Las máquinas Linux (UNIX) también se pueden utilizar para explorar y montar recursos compartidos SMB. Tenga en cuenta que esto se puede hacer ya sea que el servidor de destino sea una máquina Windows o un servidor Samba. Aunque algunas distribuciones de Linux admiten una GUI, nos centraremos en las utilidades y herramientas de línea de comandos de Linux para interactuar con SMB. Veamos cómo montar recursos compartidos SMB para interactuar con directorios y archivos localmente.
Linux - Mount
Como alternativa, podemos utilizar un credentialfile.
El archivo credentialfile
tiene que estar estructurado así:
Credentialfile
Nota: Necesitamos instalar cifs-utils
para conectarnos a una carpeta compartida SMB. Para instalarlo podemos ejecutar desde la línea de comandos sudo apt install cifs-utils
.
Una vez montada una carpeta compartida, puede utilizar herramientas comunes de Linux, como find
o grep
para interactuar con la estructura de archivos. Busquemos un nombre de archivo que contenga la cadena cred
:
Linux - Find
A continuación, busquemos archivos que contengan la cadena cred
:
Otros servicios
Existen otros servicios para compartir archivos como FTP, TFTP y NFS que podemos adjuntar (montar) usando diferentes herramientas y comandos. Sin embargo, una vez montamos un servicio para compartir archivos, debemos entender que podemos utilizar las herramientas disponibles en Linux o Windows para interactuar con archivos y directorios. A medida que descubramos nuevos servicios para compartir archivos, necesitaremos investigar cómo funcionan y qué herramientas podemos utilizar para interactuar con ellos.
Correo electrónico
Normalmente necesitamos dos protocolos para enviar y recibir mensajes, uno para enviar y otro para recibir. El Protocolo simple de transferencia de correo (SMTP) es un protocolo de entrega de correo electrónico que se utiliza para enviar correo a través de Internet. Asimismo, se debe utilizar un protocolo de soporte para recuperar un correo electrónico de un servicio. Hay dos protocolos principales que podemos utilizar:
POP3
IMAP
Podemos utilizar un cliente de correo como Evolution , el gestor de información personal oficial, y cliente de correo para el Entorno de Escritorio GNOME. Podemos interactuar con un servidor de correo electrónico para enviar o recibir mensajes con un cliente de correo. Para instalar Evolution, podemos usar el siguiente comando:
Linux - Instalar evolution
Nota: Si aparece un error al iniciar Evolution que indica "bwrap: No se puede crear el archivo en ...", use este comando para iniciar Evolution export WEBKIT_FORCE_SANDBOX=0 && evolution
.
Vídeo: Conexión a IMAP y SMTP mediante Evolution
Haga clic en la imagen a continuación para ver una breve demostración en video.
Podemos utilizar el nombre de dominio o la dirección IP del servidor de correo. Si el servidor usa SMTPS o IMAPS, necesitaremos el método de cifrado adecuado (TLS en un puerto dedicado o STARTTLS después de conectarnos). Podemos usar la Check for Supported Types
opción en autenticación para confirmar si el servidor admite nuestro método seleccionado.
Bases de datos
Las bases de datos se utilizan normalmente en las empresas y la mayoría de ellas las utilizan para almacenar y gestionar información. Existen diferentes tipos de bases de datos, como bases de datos jerárquicas, bases de datos NoSQL (o no relacionales) y bases de datos relacionales SQL. Nos centraremos en las bases de datos relacionales SQL y las dos bases de datos relacionales más comunes llamadas MySQL y MSSQL. Tenemos tres formas comunes de interactuar con bases de datos:
| Utilidades de línea de comando ( |
| Una aplicación GUI para interactuar con bases de datos como HeidiSQL, MySQL Workbench o SQL Server Management Studio. |
| Lenguajes de programación |
Exploremos las utilidades de línea de comandos y una aplicación GUI.
Utilidades de línea de comando
MSSQL
Para interactuar con MSSQL (Microsoft SQL Server) con Linux podemos usar sqsh o sqlcmd si estás usando Windows. El objetivo de Sqsh
es proporcionar gran parte de la funcionalidad proporcionada por un shell de comandos, como variables, alias, redirección, canalizaciones, antecedentes, control de trabajos, historial, sustitución de comandos y configuración dinámica. Podemos iniciar una sesión SQL interactiva de la siguiente manera:
Linux-SQSH
La sqlcmd
utilidad le permite ingresar declaraciones Transact-SQL, procedimientos del sistema y archivos de script a través de una variedad de modos disponibles:
En el símbolo del sistema.
En el Editor de consultas en modo SQLCMD.
En un archivo de script de Windows.
En un paso de trabajo del sistema operativo (Cmd.exe) de un trabajo del Agente SQL Server.
Windows-SQLCMD
Para obtener más información sobre el uso de sqlcmd
, puedes consultar la documentación de Microsoft .
MySQL
Para interactuar con MySQL , podemos usar binarios de MySQL para Linux ( mysql
) o Windows ( mysql.exe
). MySQL viene preinstalado en algunas distribuciones de Linux, pero podemos instalar binarios de MySQL para Linux o Windows usando esta guía . Inicie una sesión SQL interactiva usando Linux:
Linux-MySQL
Windows-MySQL
Aplicación GUI
Los motores de bases de datos suelen tener su propia aplicación GUI. MySQL tiene MySQL Workbench y MSSQL tiene SQL Server Management Studio o SSMS , podemos instalar esas herramientas en nuestro host de ataque y conectarnos a la base de datos. SSMS solo es compatible con Windows. Una alternativa es utilizar herramientas comunitarias como dbeaver . dbeaver es una herramienta de base de datos multiplataforma para Linux, macOS y Windows que admite la conexión a múltiples motores de bases de datos como MSSQL, MySQL, PostgreSQL, entre otros, lo que nos facilita, como atacante, interactuar con servidores de bases de datos comunes.
Para instalar dbeaver usando un paquete Debian, podemos descargar el paquete de versión .deb desde https://github.com/dbeaver/dbeaver/releases y ejecutar el siguiente comando:
Instalar dbeaver
Para iniciar el uso de la aplicación:
Para conectarnos a una base de datos, necesitaremos un conjunto de credenciales, la IP de destino y el número de puerto de la base de datos, y el motor de la base de datos al que intentamos conectarnos (MySQL, MSSQL u otro).
Vídeo: Conexión a MSSQL DB usando dbeaver
Haga clic en la imagen a continuación para ver un breve video de demostración sobre cómo conectarse a una base de datos MSSQL usando dbeaver
.
Haga clic en la imagen a continuación para ver un breve video de demostración sobre cómo conectarse a una base de datos MySQL usando dbeaver
.
Vídeo: Conexión a MySQL DB usando dbeaver
Una vez que tengamos acceso a la base de datos mediante una utilidad de línea de comandos o una aplicación GUI, podemos usar declaraciones Transact-SQL comunes para enumerar bases de datos y tablas que contienen información confidencial, como nombres de usuarios y contraseñas. Si tenemos los privilegios correctos, podríamos ejecutar comandos como la cuenta de servicio MSSQL. Más adelante en este módulo, analizaremos declaraciones y ataques comunes de Transact-SQL para bases de datos MSSQL y MySQL.
Herramientas
Es fundamental familiarizarse con las utilidades de línea de comandos predeterminadas disponibles para interactuar con diferentes servicios. Sin embargo, a medida que avancemos en el campo, encontraremos herramientas que pueden ayudarnos a ser más eficientes. La comunidad comúnmente crea esas herramientas. Aunque con el tiempo tendremos ideas sobre cómo mejorar una herramienta o para crear nuestras propias herramientas, aunque no seamos desarrolladores a tiempo completo, cuanto más nos familiaricemos con el hacking. Cuanto más aprendemos, más nos encontramos buscando una herramienta que no existe, lo que puede ser una oportunidad para aprender y crear nuestras herramientas.
Herramientas para interactuar con servicios comunes
SMB | FTP | Databases | |
Solución de problemas generales
Dependiendo de la versión de Windows o Linux con la que estemos trabajando o a la que nos dirigimos, podemos encontrar diferentes problemas al intentar conectarnos a un servicio.
Algunas razones por las que es posible que no tengamos acceso a un recurso:
Autenticación
Privilegios
Conexión de red
Reglas del cortafuegos
Soporte de protocolo
Tenga en cuenta que podemos encontrarnos con diferentes errores dependiendo del servicio al que nos dirigimos. Podemos utilizar los códigos de error a nuestro favor y buscar documentación oficial o foros donde la gente resolvió un problema similar al nuestro.
El concepto de ataque
Última actualización