MSSQL - 1433

MSSQL (Microsoft SQL) is the MS implementation of MySQL. It is popular among database administrators and developers when building applications that run on Microsoft's .NET framework due to its strong native support for .NET. There are versions of MSSQL that will run on Linux and MacOS, but we will more likely come across MSSQL instances on targets running Windows.

MSSQL Client

SQL Server Management Studio (SSMS) is a client side application that is commonly installed in MS servers. It doesnt necessarily have to be installed in a server and can be installed in any computer that the admin wants to manage the database from.

Many other clients can be used to access a database running on MSSQL. Including but not limited to:

Impacket's mssqlclient.py is most popular among pentesters.

MSSQL Database

MSSQL has default system databases that can help us understand the structure of all the databases that may be hosted on a target server. Here are the default databases and a brief description of each:

Default System Database
Description

master

Tracks all system information for an SQL server instance

model

Template database that acts as a structure for every new database created. Any setting changed in the model database will be reflected in any new database created after changes to the model database

msdb

The SQL Server Agent uses this database to schedule jobs & alerts

tempdb

Stores temporary objects

resource

Read-only database containing system objects included with SQL server

Table source: System Databases Microsoft Doc

Default Configuration

When an admin initially installs and configures MSSQL to be network accessible, the SQL service will likely run as NT SERVICE\MSSQLSERVER. Connecting from the client-side is possible through Windows Authentication, and by default, encryption is not enforced when attempting to connect.

Authentication being set to Windows Authentication means that the underlying Windows OS will process the login request and use either the local SAM database or the domain controller (hosting Active Directory) before allowing connectivity to the database management system.

Dangerous Settings

It can be beneficial to place ourselves in the perspective of an IT administrator when we are on an engagement. This is not an extensive list because there are countless ways MSSQL databases can be configured by admins based on the needs of their respective organizations. We may benefit from looking into the following:

  • MSSQL clients not using encryption to connect to the MSSQL server

  • The use of self-signed certificates when encryption is being used. It is possible to spoof self-signed certificates

  • The use of named pipes

  • Weak & default sa credentials. Admins may forget to disable this account

Footprinting MSSQL

Nmap

NMAP has default mssql scripts that can be used to target the default tcp port 1433 that MSSQL listens on. It will give us lots of useful information including hostname, database instance name, software version of MSSQL and named pipes are enabled.

MSSQL Ping in Metasploit

We can also use Metasploit to run an auxiliary scanner called mssql_ping that will scan the MSSQL service and provide helpful information in our footprinting process.

Connecting with Mssqlclient.py

If we can guess or gain access to credentials, this allows us to remotely connect to the MSSQL server and start interacting with databases using T-SQL (Transact-SQL). Authenticating with MSSQL will enable us to interact directly with databases through the SQL Database Engine. Once connected to the server, it may be good to get a lay of the land and list the databases present on the system.

Last updated