1433 - Pentesting MSSQL - Microsoft SQL Server
Основна інформація
З вікіпедії:
Microsoft SQL Server — це система управління реляційними базами даних, розроблена компанією Microsoft. Як сервер бази даних, це програмний продукт з основною функцією зберігання та отримання даних за запитом інших програмних додатків, які можуть працювати як на тому ж комп'ютері, так і на іншому комп'ютері через мережу (включаючи Інтернет).\
Порт за замовчуванням: 1433
Типові системні таблиці MS-SQL
master Database: Ця база даних є критично важливою, оскільки вона захоплює всі системні деталі для екземпляра SQL Server.
msdb Database: SQL Server Agent використовує цю базу даних для управління розкладом для сповіщень і завдань.
model Database: Використовується як шаблон для кожної нової бази даних на екземплярі SQL Server, де будь-які зміни, такі як розмір, колекція, модель відновлення та інше, відображаються в новостворених базах даних.
Resource Database: База даних тільки для читання, яка містить системні об'єкти, що постачаються з SQL Server. Ці об'єкти, хоча фізично зберігаються в базі даних Resource, логічно представлені в схемі sys кожної бази даних.
tempdb Database: Використовується як тимчасова область зберігання для транзитних об'єктів або проміжних наборів результатів.
Перерахування
Автоматичне перерахування
Якщо ви нічого не знаєте про сервіс:
Якщо у вас немає облікових даних, ви можете спробувати їх вгадати. Ви можете використовувати nmap або metasploit. Будьте обережні, ви можете заблокувати облікові записи, якщо кілька разів не вдасться увійти, використовуючи існуюче ім'я користувача.
Metasploit (потрібні облікові дані)
Ручна енумерація
Логін
Загальне перерахування
Отримати користувача
Types of MSSQL UsersОтримати дозволи
Securable: Визначається як ресурси, які управляються SQL Server для контролю доступу. Вони класифікуються на:
Сервер – Приклади включають бази даних, логіни, кінцеві точки, групи доступності та серверні ролі.
База даних – Приклади охоплюють роль бази даних, ролі додатків, схеми, сертифікати, каталоги повнотекстового пошуку та користувачів.
Схема – Включає таблиці, подання, процедури, функції, синоніми тощо.
Дозвіл: Пов'язаний з SQL Server securables, дозволи, такі як ALTER, CONTROL та CREATE, можуть бути надані принципалу. Управління дозволами відбувається на двох рівнях:
Рівень сервера за допомогою логінів
Рівень бази даних за допомогою користувачів
Принципал: Цей термін відноситься до сутності, якій надано дозвіл на доступ до securable. Принципали в основному включають логіни та користувачів бази даних. Контроль доступу до securables здійснюється шляхом надання або відмови в дозволах або шляхом включення логінів і користувачів у ролі, оснащені правами доступу.
Tricks
Виконання команд ОС
Зверніть увагу, що для виконання команд необхідно не лише мати xp_cmdshell
увімкненим, але й мати дозвіл EXECUTE на збережену процедуру xp_cmdshell
. Ви можете дізнатися, хто (крім sysadmins) може використовувати xp_cmdshell
за допомогою:
Вкрасти NetNTLM хеш / Атака реле
Вам слід запустити SMB сервер, щоб захопити хеш, що використовується в аутентифікації (impacket-smbserver
або responder
, наприклад).
Ви можете перевірити, хто (окрім sysadmins) має дозволи на виконання цих функцій MSSQL за допомогою:
Використовуючи інструменти, такі як responder або Inveigh, можливо викрасти NetNTLM хеш. Ви можете побачити, як використовувати ці інструменти в:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay AttacksЗловживання довіреними зв'язками MSSQL
Прочитайте цей пост щоб знайти більше інформації про те, як зловживати цією функцією:
MSSQL AD AbuseЗапис файлів
Щоб записати файли за допомогою MSSQL
, нам необхідно увімкнути Ole Automation Procedures, що вимагає прав адміністратора, а потім виконати кілька збережених процедур для створення файлу:
Прочитати файл за допомогою OPENROWSET
За замовчуванням, MSSQL
дозволяє читати файли з будь-якого файлу в операційній системі, до якого обліковий запис має доступ для читання. Ми можемо використовувати наступний SQL запит:
Однак, опція BULK
вимагає дозволу ADMINISTER BULK OPERATIONS
або ADMINISTER DATABASE BULK OPERATIONS
.
Вектор на основі помилок для SQLi:
RCE/Читання файлів виконуючи скрипти (Python та R)
MSSQL може дозволити вам виконувати скрипти на Python та/або R. Цей код буде виконуватись іншим користувачем, ніж той, хто використовує xp_cmdshell для виконання команд.
Приклад спроби виконати 'R' "Hellow World!" не працює:
Приклад використання налаштованого python для виконання кількох дій:
Читання реєстру
Microsoft SQL Server надає багато розширених збережених процедур, які дозволяють вам взаємодіяти не лише з мережею, але й з файловою системою та навіть з реєстром Windows:
Звичайні | Обізнані про екземпляр |
sys.xp_regread | sys.xp_instance_regread |
sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
sys.xp_regenumkeys | sys.xp_instance_regenumkeys |
sys.xp_regwrite | sys.xp_instance_regwrite |
sys.xp_regdeletevalue | sys.xp_instance_regdeletevalue |
sys.xp_regdeletekey | sys.xp_instance_regdeletekey |
sys.xp_regaddmultistring | sys.xp_instance_regaddmultistring |
sys.xp_regremovemultistring | sys.xp_instance_regremovemultistring |
```sql | |
# Example read registry | |
EXECUTE master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\SQLServerAgent', 'WorkingDirectory'; | |
# Example write and then read registry | |
EXECUTE master.sys.xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue', 'REG_SZ', 'Now you see me!'; | |
EXECUTE master.sys.xp_instance_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue'; | |
# Example to check who can use these functions | |
Use master; | |
EXEC sp_helprotect 'xp_regread'; | |
EXEC sp_helprotect 'xp_regwrite'; | |
``` | |
Для більше прикладів перегляньте оригінальне джерело. |
RCE з MSSQL Користувацькою Функцією - SQLHttp
Можливо завантажити .NET dll в MSSQL з користувацькими функціями. Це, однак, вимагає доступу dbo
, тому вам потрібне з'єднання з базою даних як sa
або з роллю адміністратора.
Перейдіть за цим посиланням, щоб побачити приклад.
Інші способи для RCE
Існують інші методи для отримання виконання команд, такі як додавання розширених збережених процедур, CLR збірок, завдань агента SQL Server та зовнішніх скриптів.
Підвищення Привілеїв MSSQL
Від db_owner до sysadmin
Якщо звичайному користувачу надається роль db_owner
над базою даних, що належить адміністратору (такому як sa
) і ця база даних налаштована як trustworthy
, цей користувач може зловживати цими привілеями для privesc, оскільки збережені процедури, створені там, можуть виконуватися як власник (адміністратор).
Ви можете використовувати модуль metasploit:
Або PS скрипт:
Імітація інших користувачів
SQL Server має спеціальний дозвіл, названий IMPERSONATE
, який дозволяє виконуючому користувачу приймати на себе дозволи іншого користувача або входу, поки контекст не буде скинуто або сесія не закінчиться.
Якщо ви можете видати себе за користувача, навіть якщо він не є sysadmin, вам слід перевірити, чи має користувач доступ до інших баз даних або зв'язаних серверів.
Зверніть увагу, що як тільки ви станете sysadmin, ви зможете видати себе за будь-якого іншого:
Ви можете виконати цю атаку за допомогою модуля metasploit:
або з допомогою PS скрипта:
Використання MSSQL для постійності
https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/
Витягування паролів з SQL Server Linked Servers
Зловмисник може витягнути паролі SQL Server Linked Servers з SQL Instances і отримати їх у відкритому вигляді, надаючи зловмиснику паролі, які можна використовувати для отримання більшого контролю над ціллю. Скрипт для витягування та дешифрування паролів, збережених для Linked Servers, можна знайти тут
Необхідно виконати деякі вимоги та налаштування, щоб цей експлойт працював. По-перше, ви повинні мати права адміністратора на машині або можливість керувати конфігураціями SQL Server.
Після перевірки ваших прав вам потрібно налаштувати три речі, а саме:
Увімкніть TCP/IP на екземплярах SQL Server;
Додайте параметр запуску, в даному випадку буде додано прапор трасування -T7806.
Увімкніть віддалене адміністрування.
Щоб автоматизувати ці налаштування, цей репозиторій має необхідні скрипти. Окрім наявності скрипта PowerShell для кожного етапу налаштування, репозиторій також має повний скрипт, який об'єднує скрипти конфігурації та витягування і дешифрування паролів.
Для отримання додаткової інформації зверніться до наступних посилань щодо цієї атаки: Дешифрування паролів MSSQL Database Link Server
Усунення неполадок з підключенням адміністратора SQL Server
Локальне підвищення привілеїв
Користувач, що запускає MSSQL сервер, матиме увімкнений привілейований токен SeImpersonatePrivilege. Ви, напевно, зможете підвищити привілеї до адміністратора, слідуючи одному з цих 2-х посилань:
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotatoShodan
port:1433 !HTTP