1433 - Pentesting MSSQL - Microsoft SQL Server
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
From wikipedia:
Microsoft SQL Server είναι ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων που αναπτύχθηκε από τη Microsoft. Ως διακομιστής βάσεων δεδομένων, είναι ένα λογισμικό με κύρια λειτουργία την αποθήκευση και ανάκτηση δεδομένων όπως ζητείται από άλλες εφαρμογές λογισμικού—οι οποίες μπορεί να εκτελούνται είτε στον ίδιο υπολογιστή είτε σε άλλο υπολογιστή μέσω ενός δικτύου (συμπεριλαμβανομένου του Διαδικτύου).\
Default port: 1433
Προεπιλεγμένοι Πίνακες Συστήματος MS-SQL
master Database: Αυτή η βάση δεδομένων είναι κρίσιμη καθώς καταγράφει όλες τις λεπτομέρειες σε επίπεδο συστήματος για μια παρουσία SQL Server.
msdb Database: Ο SQL Server Agent χρησιμοποιεί αυτή τη βάση δεδομένων για να διαχειρίζεται τον προγραμματισμό για ειδοποιήσεις και εργασίες.
model Database: Λειτουργεί ως σχέδιο για κάθε νέα βάση δεδομένων στην παρουσία SQL Server, όπου οποιεσδήποτε τροποποιήσεις όπως μέγεθος, ταξινόμηση, μοντέλο αποκατάστασης και άλλα αντικατοπτρίζονται σε νέες δημιουργούμενες βάσεις δεδομένων.
Resource Database: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί αντικείμενα συστήματος που συνοδεύουν τον SQL Server. Αυτά τα αντικείμενα, ενώ αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων.
tempdb Database: Λειτουργεί ως προσωρινός χώρος αποθήκευσης για παροδικά αντικείμενα ή ενδιάμεσα σύνολα αποτελεσμάτων.
Απαρίθμηση
Αυτόματη Απαρίθμηση
Αν δεν γνωρίζετε τίποτα για την υπηρεσία:
Αν δεν έχετε διαπιστευτήρια μπορείτε να προσπαθήσετε να τα μαντέψετε. Μπορείτε να χρησιμοποιήσετε το nmap ή το metasploit. Προσέξτε, μπορείτε να μπλοκάρετε λογαριασμούς αν αποτύχετε να συνδεθείτε πολλές φορές χρησιμοποιώντας ένα υπάρχον όνομα χρήστη.
Metasploit (χρειάζονται διαπιστευτήρια)
Χειροκίνητη Αρίθμηση
Σύνδεση
Κοινή Απαρίθμηση
Λάβετε Χρήστη
Types of MSSQL UsersΛάβετε Άδειες
Securable: Ορίζεται ως οι πόροι που διαχειρίζεται ο SQL Server για τον έλεγχο πρόσβασης. Αυτοί κατηγοριοποιούνται σε:
Server – Παραδείγματα περιλαμβάνουν βάσεις δεδομένων, συνδέσεις, σημεία πρόσβασης, ομάδες διαθεσιμότητας και ρόλους διακομιστή.
Database – Παραδείγματα καλύπτουν ρόλους βάσης δεδομένων, ρόλους εφαρμογών, σχήματα, πιστοποιητικά, καταλόγους πλήρους κειμένου και χρήστες.
Schema – Περιλαμβάνει πίνακες, προβολές, διαδικασίες, συναρτήσεις, συνώνυμα, κ.λπ.
Permission: Συνδέεται με τα securables του SQL Server, οι άδειες όπως ALTER, CONTROL και CREATE μπορούν να παραχωρηθούν σε έναν κύριο. Η διαχείριση των αδειών συμβαίνει σε δύο επίπεδα:
Server Level χρησιμοποιώντας συνδέσεις
Database Level χρησιμοποιώντας χρήστες
Principal: Αυτός ο όρος αναφέρεται στην οντότητα που έχει παραχωρηθεί άδεια σε ένα securable. Οι κύριοι περιλαμβάνουν κυρίως συνδέσεις και χρήστες βάσης δεδομένων. Ο έλεγχος της πρόσβασης στα securables ασκείται μέσω της παραχώρησης ή άρνησης αδειών ή με την ένταξη συνδέσεων και χρηστών σε ρόλους που είναι εξοπλισμένοι με δικαιώματα πρόσβασης.
Tricks
Execute OS Commands
Σημειώστε ότι για να μπορείτε να εκτελείτε εντολές, δεν είναι μόνο απαραίτητο να έχετε xp_cmdshell
ενεργοποιημένο, αλλά επίσης να έχετε την άδεια EXECUTE στη διαδικασία αποθήκευσης xp_cmdshell
. Μπορείτε να δείτε ποιος (εκτός από τους διαχειριστές συστήματος) μπορεί να χρησιμοποιήσει xp_cmdshell
με:
Κλοπή NetNTLM hash / Επίθεση αναμετάδοσης
Πρέπει να ξεκινήσετε έναν SMB server για να καταγράψετε το hash που χρησιμοποιείται στην αυθεντικοποίηση (impacket-smbserver
ή responder
για παράδειγμα).
Μπορείτε να ελέγξετε ποιος (εκτός από τους sysadmins) έχει δικαιώματα να εκτελεί αυτές τις MSSQL συναρτήσεις με:
Χρησιμοποιώντας εργαλεία όπως το responder ή το Inveigh είναι δυνατόν να κλέψουμε το NetNTLM hash. Μπορείτε να δείτε πώς να χρησιμοποιήσετε αυτά τα εργαλεία στο:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay AttacksΚατάχρηση Εμπιστευμένων Συνδέσεων MSSQL
Διαβάστε αυτή την ανάρτηση για να βρείτε περισσότερες πληροφορίες σχετικά με το πώς να καταχραστείτε αυτή τη δυνατότητα:
MSSQL AD AbuseΓράψτε Αρχεία
Για να γράψουμε αρχεία χρησιμοποιώντας το MSSQL
, πρέπει να ενεργοποιήσουμε Ole Automation Procedures, που απαιτεί δικαιώματα διαχειριστή, και στη συνέχεια να εκτελέσουμε κάποιες αποθηκευμένες διαδικασίες για να δημιουργήσουμε το αρχείο:
Διαβάστε αρχείο με OPENROWSET
Κατά προεπιλογή, MSSQL
επιτρέπει την ανάγνωση αρχείου σε οποιοδήποτε αρχείο στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει δικαιώματα ανάγνωσης. Μπορούμε να χρησιμοποιήσουμε την παρακάτω SQL ερώτηση:
Ωστόσο, η επιλογή BULK
απαιτεί την άδεια ADMINISTER BULK OPERATIONS
ή την άδεια ADMINISTER DATABASE BULK OPERATIONS
.
Σφάλμα-βασισμένο διάνυσμα για SQLi:
RCE/Ανάγνωση αρχείων εκτελώντας σενάρια (Python και R)
MSSQL θα μπορούσε να σας επιτρέψει να εκτελέσετε σενάρια σε Python και/ή R. Αυτός ο κώδικας θα εκτελείται από έναν διαφορετικό χρήστη από αυτόν που χρησιμοποιεί xp_cmdshell για να εκτελέσει εντολές.
Παράδειγμα προσπαθώντας να εκτελέσετε ένα 'R' "Hellow World!" δεν λειτουργεί:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-918be96e0c20cbae131214ade8795a196557c651%252Fimage%2520%28393%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=6fdde635&sv=1)
Παράδειγμα χρησιμοποιώντας ρυθμισμένο python για να εκτελέσει πολλές ενέργειες:
Ανάγνωση Μητρώου
Microsoft SQL Server παρέχει πολλές επεκτάσεις αποθηκευμένων διαδικασιών που σας επιτρέπουν να αλληλεπιδράτε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και με το Μητρώο των Windows:
Κανονικό | Ευαισθησία σε Instance |
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'; | |
``` | |
For more examples check out the original source. |
RCE με MSSQL User Defined Function - SQLHttp
Είναι δυνατόν να φορτώσετε ένα .NET dll μέσα στο MSSQL με προσαρμοσμένες συναρτήσεις. Αυτό, ωστόσο, απαιτεί πρόσβαση dbo
οπότε χρειάζεστε μια σύνδεση με τη βάση δεδομένων ως sa
ή με ρόλο Διαχειριστή.
Ακολουθήστε αυτόν τον σύνδεσμο για να δείτε ένα παράδειγμα.
Άλλοι τρόποι για RCE
Υπάρχουν άλλες μέθοδοι για να αποκτήσετε εκτέλεση εντολών, όπως η προσθήκη extended stored procedures, CLR Assemblies, SQL Server Agent Jobs, και external scripts.
MSSQL Privilege Escalation
Από db_owner σε sysadmin
Εάν ένας κανονικός χρήστης λάβει τον ρόλο db_owner
πάνω στη βάση δεδομένων που ανήκει σε έναν διαχειριστή χρήστη (όπως sa
) και αυτή η βάση δεδομένων είναι ρυθμισμένη ως trustworthy
, αυτός ο χρήστης μπορεί να καταχραστεί αυτά τα προνόμια για privesc επειδή οι stored procedures που δημιουργούνται εκεί μπορούν να εκτελούνται ως ο ιδιοκτήτης (διαχειριστής).
Μπορείτε να χρησιμοποιήσετε ένα metasploit module:
Ή ένα PS script:
Υποκατάσταση άλλων χρηστών
Ο SQL Server έχει μια ειδική άδεια, που ονομάζεται IMPERSONATE
, η οποία επιτρέπει στον εκτελούντα χρήστη να αναλάβει τις άδειες ενός άλλου χρήστη ή σύνδεσης μέχρι να επαναρυθμιστεί το πλαίσιο ή να λήξει η συνεδρία.
Αν μπορείτε να προσποιηθείτε έναν χρήστη, ακόμα κι αν δεν είναι sysadmin, θα πρέπει να ελέγξετε αν ο χρήστης έχει πρόσβαση σε άλλες βάσεις δεδομένων ή συνδεδεμένους διακομιστές.
Σημειώστε ότι μόλις γίνετε sysadmin μπορείτε να προσποιηθείτε οποιονδήποτε άλλο:
Μπορείτε να εκτελέσετε αυτήν την επίθεση με ένα metasploit module:
ή με ένα PS script:
Χρήση του MSSQL για Επιμονή
https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/
Εξαγωγή κωδικών πρόσβασης από SQL Server Linked Servers
Ένας επιτιθέμενος μπορεί να εξάγει τους κωδικούς πρόσβασης των SQL Server Linked Servers από τις SQL Instances και να τους αποκτήσει σε καθαρό κείμενο, παρέχοντας στον επιτιθέμενο κωδικούς πρόσβασης που μπορούν να χρησιμοποιηθούν για να αποκτήσουν μεγαλύτερη πρόσβαση στον στόχο. Το σενάριο για την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης που αποθηκεύονται για τους Linked Servers μπορεί να βρεθεί εδώ
Ορισμένες απαιτήσεις και ρυθμίσεις πρέπει να γίνουν προκειμένου να λειτουργήσει αυτή η εκμετάλλευση. Πρώτα απ' όλα, πρέπει να έχετε δικαιώματα Διαχειριστή στη μηχανή ή τη δυνατότητα διαχείρισης των Ρυθμίσεων SQL Server.
Αφού επιβεβαιώσετε τα δικαιώματά σας, πρέπει να ρυθμίσετε τρία πράγματα, τα οποία είναι τα εξής:
Ενεργοποιήστε το TCP/IP στις SQL Server instances;
Προσθέστε μια παράμετρο εκκίνησης, σε αυτή την περίπτωση, θα προστεθεί μια σημαία παρακολούθησης, η οποία είναι -T7806.
Ενεργοποιήστε τη σύνδεση απομακρυσμένου διαχειριστή.
Για να αυτοματοποιήσετε αυτές τις ρυθμίσεις, αυτό το αποθετήριο έχει τα απαραίτητα σενάρια. Εκτός από το ότι έχει ένα σενάριο powershell για κάθε βήμα της ρύθμισης, το αποθετήριο έχει επίσης ένα πλήρες σενάριο που συνδυάζει τα σενάρια ρύθμισης και την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης.
Για περισσότερες πληροφορίες, ανατρέξτε στους παρακάτω συνδέσμους σχετικά με αυτή την επίθεση: Αποκρυπτογράφηση Κωδικών Πρόσβασης MSSQL Database Link Server
Αντιμετώπιση προβλημάτων της Σύνδεσης Αφιερωμένου Διαχειριστή SQL Server
Τοπική Κλιμάκωση Δικαιωμάτων
Ο χρήστης που εκτελεί τον MSSQL server θα έχει ενεργοποιημένο το δικαίωμα SeImpersonatePrivilege. Πιθανώς θα μπορείτε να κλιμακώσετε σε Διαχειριστή ακολουθώντας μία από αυτές τις 2 σελίδες:
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotatoShodan
port:1433 !HTTP
Αναφορές
HackTricks Αυτόματες Εντολές
Μάθετε & εξασκηθείτε στο Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated