
SSH-эксплойт для CVE-2024-6387: RCE в сервере OpenSSH на Linux-системах на базе glibc
CVE-2024-6387 — это гипотетический пример, но давайте предположим, что это реальная уязвимость в реализации сервера OpenSSH. Эта уязвимость может включать переполнение буфера или повреждение памяти, что позволяет удаленным злоумышленникам выполнить произвольный код на сервере. Вот общее описание того, как такая уязвимость может быть использована:
Представленный код на Python — это эксплоит, предназначенный для использования уязвимости CVE-2024-6387. Ниже приведен подробный разбор шагов, которые он выполняет: Настройка соединения: Устанавливает TCP-соединение с целевым SSH-сервером.
def setup_connection(ip, port):
# ...
Отправка и получение пакетов: Обрабатывает отправку и получение пакетов от SSH-сервера и к нему.
def send_packet(sock, packet_type, data):
# ...
Обмен версиями SSH: Инициирует рукопожатие SSH путем отправки и получения строки версии SSH.
def send_ssh_version(sock):
# ...
def receive_ssh_version(sock):
# ...
Инициализация обмена ключами (KEX_INIT): Отправляет и получает пакет инициализации обмена ключами.
def send_kex_init(sock):
# ...
def receive_kex_init(sock):
# ...
Выполнение рукопожатия SSH: Объединяет вышеуказанные шаги для завершения рукопожатия SSH.
def perform_ssh_handshake(sock):
# ...
Подготовка кучи: Отправляет серию пакетов для манипуляции состоянием кучи на сервере.
def prepare_heap(sock):
# ...
Фальшивая файловая структура: Создает поддельные файловые структуры для эксплуатации уязвимости повреждения памяти.
def create_fake_file_structure(data, glibc_base):
# ...
Измерение времени парсинга: Измеряет время, затраченное сервером на разбор определенных пакетов, что помогает правильно рассчитать время финального эксплоита.
def time_final_packet(sock):
# ...
Пакет открытого ключа: Формирует пакет, содержащий полезную нагрузку эксплоита, включая шеллкод.
def create_public_key_packet(packet, size, glibc_base):
# ...
Эксплуатация состояния гонки: Пытается использовать состояние гонки, правильно выбирая время отправки финального пакета.
def attempt_race_condition(sock, parsing_time, glibc_base):
# ...
Главная функция: Координирует общий процесс эксплоита, включая несколько попыток с разными базами glibc.
def main():
# ...
CVE-2024-6387 представляет собой серьезную уязвимость в OpenSSH, позволяющую удаленно выполнять код. Представленный Python-скрипт эксплуатирует эту уязвимость, манипулируя кучей и временем отправки пакетов, вызывая повреждение памяти и в конечном итоге выполняя шеллкод злоумышленника на сервере. Скрипт демонстрирует типичные методы разработки эксплоитов, включая распыление кучи, повреждение памяти и точную синхронизацию для состояний гонки.