Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!
Hacking Insights
Engage with content that delves into the thrill and challenges of hacking
Real-Time Hack News
Keep up-to-date with fast-paced hacking world through real-time news and insights
Latest Announcements
Stay informed with the newest bug bounties launching and crucial platform updates
Join us onDiscord and start collaborating with top hackers today!
WinRM
Windows Remote Management (WinRM)는 Microsoft에서 강조하는 Windows 시스템의 원격 관리를 HTTP(S)를 통해 가능하게 하는 프로토콜입니다. 이 과정에서 SOAP를 활용합니다. 본질적으로 WMI에 의해 구동되며, WMI 작업을 위한 HTTP 기반 인터페이스로 나타납니다.
WinRM이 머신에 존재하면 PowerShell을 통한 간단한 원격 관리가 가능하며, 이는 다른 운영 체제의 SSH와 유사합니다. WinRM이 작동 중인지 확인하려면 특정 포트의 개방 여부를 확인하는 것이 좋습니다:
5985/tcp (HTTP)
5986/tcp (HTTPS)
위 목록에서 열린 포트는 WinRM이 설정되었음을 나타내며, 따라서 원격 세션을 시작할 수 있는 시도를 허용합니다.
WinRM 세션 시작하기
PowerShell을 WinRM에 맞게 구성하기 위해 Microsoft의 Enable-PSRemoting cmdlet이 사용되며, 이는 컴퓨터가 원격 PowerShell 명령을 수락하도록 설정합니다. 권한이 상승된 PowerShell 접근을 통해 다음 명령을 실행하여 이 기능을 활성화하고 모든 호스트를 신뢰할 수 있도록 지정할 수 있습니다:
이 방법은 원격으로 WinRM을 설정할 수 있게 하여, 멀리서 Windows 머신을 관리하는 유연성을 향상시킵니다.
구성 확인
공격 머신의 설정을 확인하기 위해 Test-WSMan 명령을 사용하여 대상이 WinRM이 제대로 구성되었는지 확인합니다. 이 명령을 실행하면 프로토콜 버전 및 wsmid에 대한 세부 정보를 수신하게 되며, 이는 성공적인 구성을 나타냅니다. 아래는 구성된 대상과 구성되지 않은 대상의 예상 출력 예시입니다:
정상적으로 구성된 대상의 경우, 출력은 다음과 유사하게 나타납니다:
Test-WSMan<target-ip>
응답에는 프로토콜 버전과 wsmid에 대한 정보가 포함되어야 하며, 이는 WinRM이 올바르게 설정되었음을 나타냅니다.
반대로, WinRM이 구성되지 않은 대상의 경우, 그러한 세부 정보가 없으며, 적절한 WinRM 설정이 없음을 강조합니다.
#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)# EnterEnter-PSSession-ComputerName dcorp-adminsrv.dollarcorp.moneycorp.local [-Credentialusername]## Bypass proxyEnter-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 sessionExit-PSSession# This will leave it in background if it's inside an env var (New-PSSession...)
세션은 "희생자" 내부의 새로운 프로세스(wsmprovhost)에서 실행됩니다.
WinRM 강제 열기
PS 원격 및 WinRM을 사용하려고 하지만 컴퓨터가 구성되지 않은 경우, 다음을 통해 활성화할 수 있습니다:
#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 doingEnter-PSSession-Session $sess1
이 세션 내에서 _Invoke-Command_를 사용하여 PS 스크립트를 로드할 수 있습니다.
enter-pssession : Connecting to remote server 10.10.10.175 failed with the following error message : The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. You can get more information about that by running the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic.
#Brute forcecrackmapexec winrm <IP>-d <DomainName>-u usernames.txt -p passwords.txt#Just check a pair of credentials# Username + Password + CMD command executioncrackmapexec winrm <IP>-d <DomainName>-u <username>-p<password>-x "whoami"# Username + Hash + PS command executioncrackmapexec winrm <IP>-d <DomainName>-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
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}