Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
libreofficeExploit1 — CVE-2018-16858 реализация эксплойта | Kitploit
Инструменты/GitHubGitHub/4nimanegra/libreofficeexploit1
Фреймворки для эксплойтовЭксплуатацияТестирование на ПроникновениеКомандование и УправлениеОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHub4nimanegra/libreofficeexploit1

libreofficeExploit1

CVE-2018-16858 реализация эксплойта

Репозиторий
31107 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Базовое руководство по созданию эксплойта

В этой статье будет показано, как использовать простую ошибку в программе для открытия бэкдора в системе, использующей эту программу.

Рассматриваемая уязвимость определена как CVE-2018-16858 и относится к офисному пакету LibreOffice. Эта ошибка позволяет в специально сформированном файле выполнить обход каталогов, что даёт возможность выполнить код Python. Данное выполнение привязывается или запускается при действии пользователя с документом и происходит без каких-либо предупреждений пользователя о выполнении макросов.

Данный документ разделён на пять частей. В первой части будет объяснена сама ошибка, как распаковать OpenDocument, как изменить его структуру для выполнения нужного локального скрипта и как снова собрать документ для его выполнения и тестирования.

Во второй части мы увидим, как использовать локальное выполнение для запуска любой команды в системе, в которой открыт документ, и создадим бэкдор, позволяющий выполнять удалённые команды.

В третьей части мы автоматизируем процесс создания документов, которые создают бэкдоры с прямой или обратной связью, определяя IP-адрес и порт, к которым необходимо подключиться.

Четвёртая часть будет посвящена интеграции уязвимости в систему Metasploit, чтобы с помощью msfconsole можно было создавать документы, совместимые с методом эксплуатации Metasploit. Это позволит выбирать в качестве выполняемого кода любую нагрузку, определённую в наборе Metasploit.

Пятая и последняя часть покажет, как интегрировать в антивирусную систему процесс обнаружения, позволяющий идентифицировать заражённые файлы LibreOffice с помощью описанной выше процедуры. Будет использоваться формат обнаружения антивируса ClamAV, что позволит лучше понять процесс обнаружения, используемый антивирусами, и тем самым облегчить нашу защиту от подобных угроз.

Весь процесс будет выполняться для систем Linux на основе Debian, но описанное здесь может быть применено и к другим системам, так как всё подробно описано. И сама уязвимость, и концептуальные доказательства оригинальной CVE были разработаны для версии LibreOffice под Windows, поэтому всегда можно обратиться к этому источнику, чтобы использовать описанное в данном документе аналогично для версий Windows.

Описание уязвимости

LibreOffice (и, по генетическим причинам, Apache OpenOffice) имеет уязвимость в версиях, предшествующих последней (6.1.5), которая позволяет выполнять код Python, расположенный в любом месте компьютера, без предупреждения пользователя о выполнении макроса.

Чтобы увидеть эту уязвимость, мы можем создать новый документ в текстовом редакторе, написать в нём что-нибудь, выделить это и создать гиперссылку. Для создания гиперссылки в тексте необходимо выбрать меню Insert и в нём опцию Hyperlink (также можно выделить текст и затем использовать комбинацию клавиш Ctrl+K).

Появится следующее диалоговое окно:

Чтобы определить гиперссылку, нужно вставить URL и нажать Apply. Кроме опции URL, в нижней части диалогового окна, где можно прочитать Further Settings, у нас будет кнопка со значком Play, которая также позволит нам привязать события к определённым действиям. Именно здесь мы определим, что хотим выполнить код Python в качестве действия.

При нажатии этой кнопки откроется новое диалоговое окно:

В нём мы сможем выбрать одно из трёх базовых событий и скрипт, который хотим использовать. В качестве события выберем Mouse Over Object, а в качестве скрипта из семейства LibreOffice Macros выберем Python Samples. Внутри этой опции существует только один скрипт по умолчанию с именем TableSample, который мы и выберем.

После этого, если навести мышь на текст, который мы превратили в гиперссылку, мы увидим, что открывается окно с документом, содержащим таблицу. Это означает, что мы связали событие наведения мыши на гиперссылку со скриптом на Python. Наша цель — заменить это действие на другое, которое нам нужно.

Для этого сохраним созданный документ и выйдем из LibreOffice, чтобы выполнить в консоли ряд команд.

Понимание OpenDocument

Формат документа ODT — это не что иное, как zip-архив с набором файлов внутри (формат DOCX от Microsoft Office очень похож). Поэтому первым делом мы распакуем файл с помощью распаковщика zip-архивов.

В нашем случае мы будем использовать утилиту командной строки unzip, поэтому просто выполним следующую команду:

user@host:~/Documents/prueba$ unzip ~/Documents/blog/exploitlibreoffice/doc/CV.odt

После этого мы увидим файлы, которые на самом деле находятся внутри файла OpenDocument. Наиболее важными для нас будут файл mimetypes, файл content.xml и файл styles.xml.

Файл mimetype должен быть первым в списке файлов zip-архива, поэтому при повторной упаковке файлов мы должны заставить наш архиватор сделать так, иначе файл не будет интерпретирован как OpenDocument.

Файл content.xml содержит текст документа, который мы написали, с некоторыми тегами, указывающими, в каком формате должен отображаться текст.

Например, в следующей строке:

<text:p text:style-name="_5f_ECV_5f_SectionDetails">Indicar lista de documentos adjuntos a su CV. Ejemplos:</text:p>

Можно увидеть пример абзаца текста, написанного с определённым стилем, заданным атрибутом text:style-name. Текст абзаца находится между открывающим тегом text:p и закрывающим тегом </text:p>.

Скрипт, связанный с гиперссылкой, которую мы создали, также можно увидеть довольно просто. Если мы поищем в тексте content.xml слово python или имя загруженного нами скрипта Python, в нашем случае TableSample.py, то легко обнаружим строку, в которой нужно изменить содержимое:

<script:event-listener script:language="ooo:script" script:event-name="dom:mouseover" xlink:href="vnd.sun.star.script:pythonSamples|TableSample.py$createTable?language=Python&amp;location=share" xlink:type="simple"/>

В этой строке находится путь к скрипту Python, который будет загружен при наведении мыши на гиперссылку с именем TableSample.py, и функция, которая будет выполнена из кода Python, в данном случае createTable.

Проблема LibreOffice заключается в том, что при чтении документов значение кода Python для загрузки не очищается должным образом. Программа не очищает символы ../ из пути к файлу, поэтому можно получить доступ к любому файлу в системе, в которой открыт текстовый документ. Кроме того, если этот файл является файлом с кодом Python, мы сможем выполнить любую функцию, определённую в этом файле.

Первая проверка выполнения простой команды

В качестве первой концептуальной проверки мы сделаем так, чтобы при наведении на гиперссылку запускался калькулятор, в нашем случае программа galculator открывает калькулятор. Нам нужно создать программу на Python, которая позволяет выполнить команду внутри функции, в том стиле, как ожидает выполнение LibreOffice. Для этого создадим следующий код по пути /tmp/prueba.py:

import os;

def ejecuta():
	os.system("galculator");

С помощью этого небольшого кода мы достигнем нашей цели. Теперь нужно добавить как файл Python /tmp/prueba.py, так и имя функции ejecuta в вызов, который делается в файле odt. Таким образом, строка, вызывающая Python, будет выглядеть следующим образом:

<script:event-listener script:language="ooo:script" script:event-name="dom:mouseover" xlink:href="vnd.sun.star.script:pythonSamples|../../../../../../../../../../../tmp/prueba.py$ejecuta?language=Python&amp;location=share" xlink:type="simple"/>

Как видно, мы добавили большое количество ../, чтобы гарантировать подъём до корня файловой системы. А оттуда добавили конкретный путь к нашему файлу Python (prueba.py). После $ добавлено слово ejecuta — это функция, которая запускает калькулятор.

Скачать инструмент