Анализ уязвимостей удаленного выполнения команд Tongda OA
Анализ уязвимостей удаленного выполнения команд Tongda OA

1. Знакомство с уязвимостями

Tongda OA (Интеллектуальная офисная система Office Anywhere Network) — это программное обеспечение для автоматизации офиса для совместной работы, независимо разработанное компанией Beijing Tongda Xinke Technology Co., Ltd. Это комплексная офисная платформа управления, сочетающая в себе китайскую практику управления предприятием. 13 марта Tongda OA объявила на официальном форуме, что недавно получила отзывы пользователей о том, что она подверглась атаке вируса-вымогателя. Злоумышленники создавали вредоносные запросы, загружали вредоносные файлы, такие как веб-шеллы, и зашифровывали файлы на атакуемых серверах. вымогать крупные суммы денег. Анонимный денежный выкуп. Автор долгое время занимается исследованием бинарных уязвимостей. Цель написания этой статьи — изучить методы исследования веб-уязвимостей и использовать эту уязвимость в качестве практики для углубления понимания технологии эксплуатации веб-уязвимостей и ее фиксации. .

2. Анализ уязвимостей

Данные показывают, что эта уязвимость имеет широкое воздействие и затронуты следующие версии: V11, 2017, 2016, 2015, расширенная версия 2013 и 2013.

Для удобства воспроизведения в данной статье загружается и используется версия Tongda OA V11.3. Ссылка для скачивания:

https://pan.baidu.com/s/1QFAoLxj9pD1bnnq3f4I8lg Код извлечения:ousi

2.1 Предварительный аудит кода

После установки Tongda OA v11.3 найдите исходный код в корневом каталоге веб-сайта после установки. Проверьте исходный код и обнаружите, что он весь искажен, зашифрован и требует расшифровки. Инструмент расшифровки может использовать SeayDzend, поскольку исходный код написан на PHP. Самый простой способ — использовать инструмент аудита исходного кода seay для грубого поиска потенциальных лазеек. Аудит кода занимает много времени, а результаты аудита просто. короткий абзац в начале, объясняющий идею. Как показано на рисунке 1:

Рисунок 1. Аудит кода

2.2 Уязвимость загрузки файлов

Согласно общедоступной информации в Интернете, непосредственно найдите путь исходного кода C:\phpStudy\WWW\tongdaoa\webroot\ispirit\im\upload.php и просмотрите исходный код, как показано на рисунке 2:

Рисунок 2. Исходный код уязвимости загрузки файла upload.php.

Для части черного ящика этого исходного кода передается параметр p. Когда параметр p не пуст, происходит вход на страницу сеанса, в противном случае — на страницу аутентификации. Уязвимость здесь вполне очевидна. Пока параметр p непустой, аутентификацию можно обойти. Продолжайте читать этот код, чтобы загружать файлы сразу после обхода аутентификации. Как показано на рисунке 3:

Рисунок 3: Загрузка файла

Следуя методу загрузки inc\utility_file.php, мы обнаружили, что существует функция проверки имени файла is_uploadable. Глядя на логику кода этой функции, если последние три позиции имени файла — «php», то возвращается false, то есть файлы, заканчивающиеся на php, не могут быть загружены. Обратитесь к исходному коду, там тоже много способов обойти черный список, пропустите его. Исходный код показан на рисунке 4:

Рисунок 4. Черный список имен файлов.

2.3 Файл содержит уязвимости

Для справки: этот файл содержит уязвимость, существующую в исходном коде ispirit/interface/gateway.php. Просмотрите исходный код здесь, как показано на рисунке 5:

Рисунок 5. Файл содержит уязвимый код.

Проанализируйте json с помощью цикла foreach. Если ключ и URL-адрес равны, затем получите URL-адрес и определите, является ли URL-адрес пустым и URL-адрес содержит общие/, ispirit/, модуль/, вызовите функцию include_once. Представьте себе, что если URL-адрес имеет тип ../../, после выполнения включения файла мы можем получить доступ к файлам, которые мы загрузили ранее. Один ../ перемещается в верхний каталог, а два ../ просто перемещаются. вернуться в каталог установки tongdaoa, за которым следует каталог ранее загруженных файлов. Ключ к уязвимости здесь заключается в создании URL-адреса.

3. Повторение уязвимости

3.1 Среда воспроизведения

Тестовый хост: Win10 x64, английский

Тонгда ОА 11.3

Программное обеспечение для захвата пакетов: Burpsuite v1.737.

БраузерFirefox 41.0

Ниже мы воспроизводим две уязвимости соответственно.

3.2 Воспроизведение уязвимости загрузки файлов

Прочитав исходный код upload.php, для воспроизведения уязвимости необходимо выполнить следующие условия:

(1) Параметр p не пуст; (2) DEST_UID не пуст и представляет собой число; (3) UPLOAD_MODE — 1, 2 или 3; (4) Имя файла вложения не может быть php;

Создайте файл для загрузки полезных данных1, как показано на рисунке 6:

Рисунок 6. Полезная нагрузка1 для загрузки файла.

Используйте Burpsuite для захвата пакета, измените текущую полезную нагрузку на payload1 и воспроизведите ее. Файл успешно загружен. Как показано на рисунке 7:

Рисунок 7: Воспроизведение загрузки файла

Загруженный файл сохраняется в каталоге c:\phpstudy/www/tongdaoa/attach/im/2005/, как показано на рисунке 8:

Рисунок 8. Загрузка прошла успешно.

Убедитесь, что загрузка файла прошла успешно. В настоящее время возникла проблема: загруженный файл не находится в корневом веб-каталоге и к нему невозможно получить удаленный доступ. Это необходимо для взаимодействия с другой уязвимостью — уязвимостью включения файла для завершения обхода пути и доступа к загруженному файлу.

3.3 Уязвимость повторяющегося включения файлов

Согласно предыдущему анализу кода, основная цель — создать полезную нагрузку URL-адреса. Предположим, вы посещаете http://localhost/ispirit/interface/gateway.php, используете BurpSuite для перехвата пакета и отправки его на ретранслятор. Созданный файл содержит полезную нагрузку2 уязвимости. Обратите внимание на две вещи в полезной нагрузке2. Тип контента: application/x-www-form-urlencoded, второй — структура URL-адреса в формате JSON. Как показано на рисунке 9, уязвимость включения файла была успешно реализована.

Рисунок 9. Воспроизведение уязвимости включения файлов.

3.4 Получение целевой оболочки

Обе уязвимости используются вместе для удаленного получения оболочки. Заранее подготовьте PHP-трояны и инструменты удаленной оболочки, такие как Ice Skorpion. Идея: использовать уязвимость загрузки файла для загрузки PHP-трояна, а затем использовать уязвимость включения файла, чтобы разрешить Интернету доступ к файлу PHP, а затем использовать Ice Scorpion для подключения. (Примечание: это не может быть непосредственно .php. Согласно результатам анализа кода, файлы, заканчивающиеся на php, не могут быть загружены.) Как показано на рисунке 10:

Рис. 10. Получение оболочки, шаг 1.

Файл был найден в папке «C:\phpStudy\WWW\tongdaoa\attach\im\2005», и загрузка прошла успешно. Как показано на рисунке 11:

Рисунок 11. Загрузка прошла успешно.

Затем получите доступ к только что загруженному файлу 2125745527.test.php через уязвимость включения файла. Как показано на рисунке 12:

Рисунок 12: Доступ к загруженным файлам

После успешного доступа файл readme.php будет создан в каталоге \ispirit\interface\. Используйте веб-оболочку Ice Skorpion для подключения и успешного получения оболочки. Как показано на рисунке 13:

Рисунок 13: Успешно получена оболочка Shell1.

Рисунок 14. Shell2 успешно получен.

Последнее, что осталось — это создать эксплойт. В Интернете доступно множество программ удаленного эксплойта для этой уязвимости, которые вы можете использовать для тестирования.

Четыре、сравнение патчей&Предложения по подкреплению

4.1 Сравнение патчей

Автор с целью обучения скачал патч Tongda OAv11.3 и сравнил патчи. Результаты сравнения следующие:

Первый патч устраняет уязвимость загрузки файлов и требует аутентификации независимо от того, пуст параметр или нет. Как показано на рисунке 15:

Рисунок 15: Первый патч

Второй патч отфильтровывает «..». Если этот символ появляется в URL-адресе, это считается неправильным URL-адресом. Таким образом, обход пути не может быть выполнен, и файлы в каталогах, не являющихся корневыми, не могут быть доступны. Как показано на рисунке 16:

Рисунок 16: Второй патч.

4.2 Рекомендации по усилению

Пользователям Tongda OA, использующим уязвимую версию, рекомендуется войти на официальный сайт Tongda OA, чтобы получить последние исправления. Пожалуйста, выберите соответствующий программный файл в соответствии с текущей версией OA и сделайте резервную копию перед запуском. Адрес загрузки обновлений безопасности: http://www.tongda2000.com/news/673.php.

В этой статье описан только процесс анализа и использования уязвимости Tongda OA. Если есть какие-либо некорректные моменты, попросите экспертов их исправить. С точки зрения обратного мышления, как мы можем самостоятельно обнаружить этот тип уязвимостей, быстро сформулировать идеи использования и построить эксплойт. Именно на этом автор хочет сосредоточиться при последующем углубленном изучении веб-уязвимостей. Если есть эксперты, имеющие опыт аудита кода или заинтересованные в аудите кода и желающие учиться вместе, свяжитесь с нами на сайте, и мы сможем добиться прогресса вместе!

5. Справочник

https://www.cnblogs.com/yuyan-sec/p/12549237.html

*Автор статьи: elvadisas, укажите источник перепечатки с FreeBuf.COM.

Замечательная рекомендация

boy illustration
Давайте кратко поговорим о технологии копирования на записи.
boy illustration
Выполнение собственных условий SQL-запроса в MyBatis Plus
boy illustration
Напоминание о выпуске общедоступной учетной записи WeChat (интерфейс сообщения шаблона общедоступной учетной записи WeChat)
boy illustration
5 шагов для установки среды протокола
boy illustration
Наиболее полные коды состояния HTTP
boy illustration
На основе языка Go мы шаг за шагом научим вас внедрять структуру системы управления серверной частью.
boy illustration
Эффективное управление журналами с помощью Spring Boot и Log4j2: подробное объяснение конфигурации
boy illustration
Что делать, если telnet не является внутренней или внешней командой [легко понять]
boy illustration
php-объект для анализа json_php json
boy illustration
Введение в принцип запуска Springboot, процесс запуска и механизм запуска.
boy illustration
Высокоуровневые операции Mongo, если данные не существуют, вставка и обновление, если они существуют (pymongo)
boy illustration
Проектирование и внедрение системы управления электронной коммерцией на базе Vue и SpringBoot.
boy illustration
Статья длиной в 9000 слов знакомит вас с процессом запуска SpringBoot — самым подробным процессом запуска SpringBoot в истории — с изображениями и текстом.
boy illustration
Как настроить размер экрана в PR. Учебное пособие по настройке размера видео в PR [подробное объяснение]
boy illustration
Элегантный и мощный: упростите операции ElasticSearch с помощью easy-es
boy illustration
Проект аутентификации по микросервисному токену: концепция и практика
boy illustration
【Java】Решено: org.springframework.http.converter.HttpMessageNotWritableException.
boy illustration
Изучите Kimi Smart Assistant: как использовать сверхдлинный текст, чтобы открыть новую сферу эффективной обработки информации
boy illustration
Начало работы с Docker: использование томов данных и монтирования файлов для хранения и совместного использования данных
boy illustration
Использование Python для реализации автоматической публикации статей в публичном аккаунте WeChat
boy illustration
Разберитесь в механизме и принципах взаимодействия потребителя и брокера Kafka в одной статье.
boy illustration
Spring Boot — использование Resilience4j-Circuitbreaker для реализации режима автоматического выключателя_предотвращения каскадных сбоев
boy illustration
13. Springboot интегрирует Protobuf
boy illustration
Примечание. Инструмент управления батареями Dell Dell Power Manager
boy illustration
Общая интерпретация класса LocalDate [java]
boy illustration
[Базовые знания ASP.NET Core] -- Веб-API -- Создание и настройка веб-API (1)
boy illustration
Настоящий бой! Подключите Passkey к своему веб-сайту для безопасного входа в систему без пароля.
boy illustration
Руководство по настройке Nginx: как найти, интерпретировать и оптимизировать настройки Nginx в Linux
boy illustration
Typecho отображает использование памяти сервера
boy illustration
Как вставить элемент перед указанным ключом в ассоциативный массив в PHP