Exploit, Exploit Development, Kali Linux, Kali Linux для продвинутого тестирования на проникновение, Windows, Разработка эксплойтов, Эксплойты

#90 Kali Linux для продвинутого тестирования на проникновение. Разработка эксплойта для Windows.

Здравствуйте, дорогие друзья.

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

Five-stage custom exploit development

В этом разделе мы рассмотрим некоторые основы, необходимые для разработки эксплойта Windows, с помощью создания уязвимого приложения. С точки зрения разработки эксплойтов, вот основные термины, которые должны понимать специалисты по тестированию на проникновение, при разработке эксплойта:

Регистры: все процессы выполняются через регистры; они используются для хранения информации.

x86: сюда входят 32-разрядные системы, в основном основанные на процессорах Intel; 64-битные системы представлены как x64.

Язык ассемблера: сюда входят языки программирования низкого уровня.

• Буфер: это статическая память в программе, которая хранит данные поверх стека или кучи.

• Отладчик. Отладчики — это программы, которые можно использовать для просмотра среды выполнения ПО, во время выполнения. Вы также можете использовать их для просмотра состояния реестра и памяти. Некоторыми из инструментов, которые мы будем использовать, являются отладчики GDB и OllyDbg.

ShellCode: это код, созданный злоумышленниками при успешной эксплуатации.

Ниже приведены различные типы регистров:

EAX: Это 32-битный регистр, который используется как аккумулятор и хранит данные и операнды.

EBX: Это 32-битный базовый регистр, который действует как указатель на данные.

• ECX: это 32-битный регистр, который используется для зацикливания.

• EDX: это 32-разрядный регистр данных, в котором хранятся указатели ввода/вывода.

• ESI/EDI: это 32-разрядные индексные регистры, которые действуют как указатели данных для всей памяти.

• EBP: это 32-разрядный регистр указателя данных стека.

Расширенный указатель инструкций (EIP): это 32-разрядный счетчик программ/указатель инструкций, который содержит следующую команду для выполнения.

• Расширенный указатель стека (ESP): это 32-разрядный регистр указателя стека, который точно указывает туда, куда указывает стек.

SS, DS, ES, CS, FS и GS: это 16-разрядные сегментные регистры.

• NOP: означает отсутствие операций.

• JMP: Обозначает инструкции перехода.

Выявление уязвимости с помощью фаззинга

Злоумышленники должны иметь возможность идентифицировать правильные параметры фаззинга в любом заданном приложении, чтобы найти уязвимость, а затем использовать ее. В этом разделе мы рассмотрим пример уязвимого сервера, который был создан Стивеном Брэдшоу.

Это уязвимое программное обеспечение можно загрузить с https://github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/tree/main/Chapter%2010/ В этом примере мы будем использовать Windows 10, для размещения уязвимого сервера. Как только приложение будет загружено, мы приступим к распаковке файла и запуску сервера.

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

Vulnerable server running on Windows 10

Злоумышленники могут подключиться к серверу через порт 9999, используя netcat, для связи с сервером из Kali Linux, как показано на рисунке ниже:

Connecting to the vulnerable server from Kali Linux

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

Злоумышленник может узнать, как его можно использовать для предоставления удаленного доступа, запустив свой собственный код. Теперь, когда приложение доступно и все настроено, злоумышленники могут приступить к фаззингу.

Хотя существует ряд доступных инструментов фаззинга, SPIKE является одним из установленных по умолчанию на Кали Линукс. SPIKE — это набор инструментов для фаззинга, который используется для создания фаззеров путем предоставления сценариев; однако он написан на языке C. Ниже приведен список интерпретаторов, написанных в SPIKE, которые можно использовать:

• generic_chunked

• generic_send_tcp

• generic_send_udp

• generic_web_server_fuzz

• generic_web_server_fuzz2

• generic_listen_tcp

SPIKE позволяет вам добавлять свой собственный набор скриптов без написания нескольких сотен строк кода на C. Другими инструментами фаззинга, которые могут рассмотреть злоумышленники, являются Peach Fuzzer, BooFuzz и FilFuzz.

Как только злоумышленники подключатся к целевому приложению, они должны увидеть несколько вариантов, которые доступны на уязвимом сервере, с которым они затем могут играть. Это включает STATS, RTIME, LTIME, SRUN, TRUN, GMON, GDOG, KSTET, GTER, HTER, LTER и KSTAN, как часть допустимых команд, которые принимают вход. Мы будем использовать интерпретатор generic_send_tcp, для фаззинга приложения. Формат для использования интерпретатора выглядит следующим образом: . /generic_send_tcp хост-порт Spike_script SKIPVAR SKIPSTR:

• хост: это целевой хост или IP-адрес.

• порт: это номер порта для подключения.

• Spike_script: это сценарий SPIKE, запускаемый интерпретатором.

• SKIPVAR и SKIPSTR: Это позволяет тестировщикам перейти в середину сеанса фаззинга, как определено в сценарии SPIKE.

В качестве следующего ключевого шага давайте продолжим и создадим простой скрипт SPIKE для readline, запустим SRUN и присвоить строковое значение в качестве параметра:

Скрипт прочитает первую строку (s_readline) ввода после подключения к IP/имени хоста, а затем запускается SRUN, вместе со случайно сгенерированным значением. Обратите внимание, что для запуска сценария, SPIKE должен быть сохранен в формате файла .spk. Теперь давайте сохраним файл с тремя строками выше в fuzzer.spk, и запустим сценарий SPIKE для цели, как показано на рисунке ниже:

Fuzzing the vulnerable server with SRUN

После фаззинга приложение подтверждает отсутствие сбоя сервера или чего-либо подобного, поэтому параметр SRUN не уязвим. Следующим шагом является выбор другого. На этот раз мы выберем TRUN в качестве параметра для фаззинга в одном скрипте:

s_readline();

s_string("TRUN |");

s_string_variable("VALUE");

Сохраните файл exploitfuzz.spk, и выполните ту же команду, как показано на рисунке ниже:

Fuzzing the vulnerable server with TRUN

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

На этом все. Всем хорошего дня!

Полный цикл статей по Kali Linux для продвинутого тестирования на проникновение.