#90 Kali Linux для продвинутого тестирования на проникновение. Разработка эксплойта для Windows.
Здравствуйте, дорогие друзья.
Разработка эксплойтов — сложное искусство, требующее от злоумышленников достаточного понимания языка ассемблера и базовой системной архитектуры. Мы можем использовать следующие пять этапов к разработке пользовательского эксплойта:
В этом разделе мы рассмотрим некоторые основы, необходимые для разработки эксплойта 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 для подключения удаленных клиентов. Когда уязвимый сервер запущен и работает, вы должны увидеть следующее:
Злоумышленники могут подключиться к серверу через порт 9999, используя netcat, для связи с сервером из 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 и присвоить строковое значение в качестве параметра:
1 2 3 |
s_readline(); s_string("SRUN |"); s_string_variable("VALUE"); |
Скрипт прочитает первую строку (s_readline) ввода после подключения к IP/имени хоста, а затем запускается SRUN, вместе со случайно сгенерированным значением. Обратите внимание, что для запуска сценария, SPIKE должен быть сохранен в формате файла .spk. Теперь давайте сохраним файл с тремя строками выше в fuzzer.spk, и запустим сценарий SPIKE для цели, как показано на рисунке ниже:
После фаззинга приложение подтверждает отсутствие сбоя сервера или чего-либо подобного, поэтому параметр SRUN не уязвим. Следующим шагом является выбор другого. На этот раз мы выберем TRUN в качестве параметра для фаззинга в одном скрипте:
s_readline();
s_string("TRUN |");
s_string_variable("VALUE");
Сохраните файл exploitfuzz.spk, и выполните ту же команду, как показано на рисунке ниже:
Фаззинг приложения с помощью TRUN привел к сбою приложения, так что теперь мы можем подтвердить, что этой функцией можно злоупотреблять и эксплуатировать. В качестве ключевого следующего шага, мы должны отладить и воспроизвести сбой более подробно.
На этом все. Всем хорошего дня!
Полный цикл статей по Kali Linux для продвинутого тестирования на проникновение.