Часто в процессе разработки эксплойта мы хотим протестировать приложение на наличие уязвимостей, особенно переполнения буфера . Один из способов сделать это — отправить приложению случайные недействительные данные разной длины и посмотреть, что произойдёт. Если нам удаётся вызвать сбой приложения, это часто является признаком уязвимости, для которой мы можем разработать эксплойт.
Процесс отправки этих случайных, недействительных данных разной длины называется «фаззингом». На рынке представлено множество фаззеров: хорошие, плохие, неэффективные и эффективные. Как и разработка эксплойтов, между специалистами по безопасности и хакерами идёт постоянная война, и в этой войне участвуют фаззеры. Как только фаззер становится эффективным в поиске уязвимостей, разработчики программного обеспечения адаптируют его и устраняют эти типы уязвимостей. Затем фаззерам приходится адаптироваться к новому типу данных, чтобы попытаться эксплуатировать эти уязвимости. В таких случаях крайне востребованы легко адаптируемые и настраиваемые фаззеры.
Spike — это фаззер, который, несмотря на скудную документацию и не совсем интуитивно понятный интерфейс, доказал свою способность к адаптации. По сути, адаптивность — сильная сторона Spike . Spike — это API, позволяющий хакерам/исследователям безопасности быстро разрабатывать стресс-тесты протоколов. Поскольку многие протоколы построены на схожих примитивах данных, Spike позволяет нам создавать эти примитивы, а затем изменять их таким образом, чтобы, как ожидается, привести к сбою протокола или приложения.
Spike встроен в Kali Linux, поэтому нет необходимости загружать какие-либо новые приложения или файлы. Его цель — упростить для нас быстрое и лёгкое воспроизведение двоичного протокола и «экспериментировать» с ним. Он также был разработан для создания базы знаний о различных классах ошибок, влияющих на схожие протоколы. Наконец, его можно использовать для проверки старых уязвимостей в новых программах и приложениях.
Шаг №1 Загрузите и установите vulnserver.exe
В этом уроке мы попытаемся использовать Spike для сбоя уязвимого сервера и продемонстрируем его применение. Нам понадобится компьютер с Kali Linux, а также Windows с установленным vulnserver . Вы можете скачать и получить vulnserver по ссылке:
После загрузки и распаковки просто нажмите на исполняемый файл vulnserver.exe или введите vulnserver.exe в командной строке. После этого vulnserver запустится, как показано ниже. По умолчанию vulnserver прослушивает порт 9999, но это можно изменить, просто указав нужный порт после исполняемого файла, например:
c:vulnserver.exe 888
Теперь, когда уязвимый сервер запущен и работает на нашем компьютере с Windows, давайте попробуем подключиться к нему через netcat.
Кали > NC 192.168.181.129 9999
Как видите, vulnserver отображает приветственный баннер и предлагает ввести HELP, если нужна помощь. После нажатия мы получаем список команд, как на скриншоте ниже.
Шаг №2. Фаззинг с помощью Spike
Spike позволяет нам писать «скрипты», которые можно использовать для тестирования различных протоколов и приложений. Эти скрипты называются «Spikes» (спайками), и их файлы обычно имеют расширение .spk. Чтобы найти готовые Spikes, просто введите:
kali > locate .spk
Это позволит найти все файлы, заканчивающиеся на .spk, как показано на снимке экрана ниже.
Эти «спайки» находятся в каталогах, соответствующих протоколу, который они могут использовать для тестирования. Они находятся в каталоге /usr/share/spike/audits . Давайте перейдём туда и посмотрим.
Как вы видите, есть готовые «шипы» для тестирования;
(1) Compaq
(2) MS Exchange2k
(3) Оракул
(4) SQL Server от Microsoft
(5) POP3
(6) SMTP
(7) FTP
и многие другие. Каждый из этих каталогов содержит множество скриптов, которые мы можем использовать для тестирования конкретного протокола.
Поскольку мы будем проводить фаззинг сервера, нам, вероятно, захочется протестировать или фаззингировать приложения на базе TCP. Spike встроил интерпретаторы TCP-скриптов generic_send_tcp и generic_send_udp . Каждый из них способен отправлять данные по этому протоколу на определённый IP-адрес и порт. Они находятся в каталоге /usr/bin, что означает, что мы можем запускать их из любого каталога Kali, поскольку /usr/bin прописан в нашей переменной PATH.
Давайте попробуем ввести generic_send_tcp, чтобы посмотреть, получим ли мы экран справки.
кали >generic_send_tcp
При запуске он выдаёт очень простую справку по использованию. Обратите внимание, что после команды нужно указать целевой хост и порт, затем скрипт Spike, а затем SKIPVAR и SKIPSTR . Пример команды может выглядеть так:
kali > ./generic_send_tcp 192.168.1.101 80 somespikescript.spk somevariable somestring
Думаю, все параметры достаточно понятны, за исключением последних двух. SKIPVAR и SKIPSTR позволяют нам перейти к середине сеанса фаззинга, заданного скриптом Spike. В нашем случае мы будем использовать для этих переменных значения 0 и 0, поскольку каждый скрипт будет запускаться с самого начала.
Давайте сначала попробуем использовать один из этих готовых скриптов на нашем уязвимом сервере. Давайте попробуем использовать SMTP-скрипты на нашем сервере и посмотрим, приведёт ли это к сбою.
Мы можем запустить SMTP-аудит нашего сервера уязвимостей, введя:
kali > generic_send_tcp 192.168.181.129 9999 usr/share/spike/audits/SMTP/smtp1.spk 0 0
Как видите выше, Spike начинает отправлять входные данные случайного размера на SMTP-сервер, проверяя, сможет ли этот протокол работать с этими данными. Если вернуться к системе Windows, на которой запущен vulnserver, то можно увидеть, что она выдержала наш натиск случайных данных!
Хотя сервер выдержал этот натиск, мы можем использовать ещё множество скачков, чтобы попытаться вывести его из строя. В реальной ситуации мы, вероятно, перепробовали бы ВСЕ эти готовые скачки, прежде чем перейти к следующему этапу — созданию собственного скрипта скачков.
Шаг №3 Создание собственного сценария фаззинга в Spike
Теперь попробуем создать собственный скрипт Spike для проверки команды TRUN, поддерживаемой нашим уязвимым сервером (когда мы подключались к серверу через netcat, он отображал допустимые команды после ввода HELP). Откроем любой текстовый редактор, чтобы создать наш скрипт. Я буду использовать Leafpad из Kali, но вы можете использовать любой удобный вам текстовый редактор. Все они будут работать.
Мы создаем короткий сценарий из трех (3) строк, который:
(1) читает баннер, который отправляет сервер;
(2) имитирует то, что пользователь ввел TRUN в оболочку в качестве своей команды; и
(3) рандомизирует пользовательский ввод, отправленный с помощью команды TRUN.
Ознакомьтесь со скриптом ниже с соответствующими командами для выполнения каждой из этих задач. По сути, мы просто считываем баннер с сервера, а затем запускаем команду TRUN с рандомизированными входными данными, чтобы проверить, можем ли мы вызвать сбой сервера с помощью этих неожиданных и недопустимых входных данных.
После завершения скрипта Spike сохраните его как spiketrunaudit.spk в каталоге /usr/share/spike/audits (на самом деле имя файла и каталога могут быть любыми по вашему усмотрению, но чтобы упростить создание вашего первого скрипта Spike, рекомендуется просто дословно следовать моим инструкциям).
После того как мы завершили и сохранили скрипт, давайте запустим его на нашем уязвимом сервере.
kali > generic_send_tcp 192.168.181.129 9999 /usr/share/spike/audits/spiketrunaudit.spk 0 0
Где:
192.168.181.129 — целевой IP
9999 — номер целевого порта
/usr/share/spike/audit/spiketrunaudit.spk — абсолютный путь к нашему скрипту
0 — это значение SPKVAR
0 — это значение SPKSTR
После нажатия Enter Spike начнёт отправлять эти данные на наш уязвимый сервер, как показано ниже. В итоге мы увидим следующее сообщение: «Не удалось подключиться к цели по протоколу TCP». Что-то явно пошло не так!
Вернёмся к нашей системе Windows 7, на которой работает наш уязвимый сервер. Как видите ниже, наш уязвимый сервер перестал работать. В результате фаззинга сервер был выведен из строя, и поэтому мы получили сообщение в Kali о том, что подключение к нему невозможно.
Заключение
Spike — это фреймворк для создания скриптов фаззинга, обеспечивающий ему гибкость и адаптивность. Некоторые стандартные скрипты фаззинга включены в установку по умолчанию, и мы можем протестировать их на наличие известных уязвимостей в некоторых распространённых протоколах
. Однако настоящая сила Spike заключается в его способности генерировать пользовательские скрипты, которые можно использовать в различных протоколах для проверки возможности переполнения или сбоя переменной. Таким образом, мы получим фундаментальное представление об уязвимости протокола/приложения, после чего сможем разработать эксплойт для её использования. В другом уроке мы рассмотрим эту уязвимость и попытаемся расшифровать её информацию о том, как создать эксплойт для неё.
Процесс отправки этих случайных, недействительных данных разной длины называется «фаззингом». На рынке представлено множество фаззеров: хорошие, плохие, неэффективные и эффективные. Как и разработка эксплойтов, между специалистами по безопасности и хакерами идёт постоянная война, и в этой войне участвуют фаззеры. Как только фаззер становится эффективным в поиске уязвимостей, разработчики программного обеспечения адаптируют его и устраняют эти типы уязвимостей. Затем фаззерам приходится адаптироваться к новому типу данных, чтобы попытаться эксплуатировать эти уязвимости. В таких случаях крайне востребованы легко адаптируемые и настраиваемые фаззеры.
Spike — это фаззер, который, несмотря на скудную документацию и не совсем интуитивно понятный интерфейс, доказал свою способность к адаптации. По сути, адаптивность — сильная сторона Spike . Spike — это API, позволяющий хакерам/исследователям безопасности быстро разрабатывать стресс-тесты протоколов. Поскольку многие протоколы построены на схожих примитивах данных, Spike позволяет нам создавать эти примитивы, а затем изменять их таким образом, чтобы, как ожидается, привести к сбою протокола или приложения.
Spike встроен в Kali Linux, поэтому нет необходимости загружать какие-либо новые приложения или файлы. Его цель — упростить для нас быстрое и лёгкое воспроизведение двоичного протокола и «экспериментировать» с ним. Он также был разработан для создания базы знаний о различных классах ошибок, влияющих на схожие протоколы. Наконец, его можно использовать для проверки старых уязвимостей в новых программах и приложениях.
Шаг №1 Загрузите и установите vulnserver.exe
В этом уроке мы попытаемся использовать Spike для сбоя уязвимого сервера и продемонстрируем его применение. Нам понадобится компьютер с Kali Linux, а также Windows с установленным vulnserver . Вы можете скачать и получить vulnserver по ссылке:
После загрузки и распаковки просто нажмите на исполняемый файл vulnserver.exe или введите vulnserver.exe в командной строке. После этого vulnserver запустится, как показано ниже. По умолчанию vulnserver прослушивает порт 9999, но это можно изменить, просто указав нужный порт после исполняемого файла, например:
c:vulnserver.exe 888
Теперь, когда уязвимый сервер запущен и работает на нашем компьютере с Windows, давайте попробуем подключиться к нему через netcat.
Кали > NC 192.168.181.129 9999
Как видите, vulnserver отображает приветственный баннер и предлагает ввести HELP, если нужна помощь. После нажатия мы получаем список команд, как на скриншоте ниже.
Шаг №2. Фаззинг с помощью Spike
Spike позволяет нам писать «скрипты», которые можно использовать для тестирования различных протоколов и приложений. Эти скрипты называются «Spikes» (спайками), и их файлы обычно имеют расширение .spk. Чтобы найти готовые Spikes, просто введите:
kali > locate .spk
Это позволит найти все файлы, заканчивающиеся на .spk, как показано на снимке экрана ниже.
Эти «спайки» находятся в каталогах, соответствующих протоколу, который они могут использовать для тестирования. Они находятся в каталоге /usr/share/spike/audits . Давайте перейдём туда и посмотрим.
Как вы видите, есть готовые «шипы» для тестирования;
(1) Compaq
(2) MS Exchange2k
(3) Оракул
(4) SQL Server от Microsoft
(5) POP3
(6) SMTP
(7) FTP
и многие другие. Каждый из этих каталогов содержит множество скриптов, которые мы можем использовать для тестирования конкретного протокола.
Поскольку мы будем проводить фаззинг сервера, нам, вероятно, захочется протестировать или фаззингировать приложения на базе TCP. Spike встроил интерпретаторы TCP-скриптов generic_send_tcp и generic_send_udp . Каждый из них способен отправлять данные по этому протоколу на определённый IP-адрес и порт. Они находятся в каталоге /usr/bin, что означает, что мы можем запускать их из любого каталога Kali, поскольку /usr/bin прописан в нашей переменной PATH.
Давайте попробуем ввести generic_send_tcp, чтобы посмотреть, получим ли мы экран справки.
кали >generic_send_tcp
При запуске он выдаёт очень простую справку по использованию. Обратите внимание, что после команды нужно указать целевой хост и порт, затем скрипт Spike, а затем SKIPVAR и SKIPSTR . Пример команды может выглядеть так:
kali > ./generic_send_tcp 192.168.1.101 80 somespikescript.spk somevariable somestring
Думаю, все параметры достаточно понятны, за исключением последних двух. SKIPVAR и SKIPSTR позволяют нам перейти к середине сеанса фаззинга, заданного скриптом Spike. В нашем случае мы будем использовать для этих переменных значения 0 и 0, поскольку каждый скрипт будет запускаться с самого начала.
Давайте сначала попробуем использовать один из этих готовых скриптов на нашем уязвимом сервере. Давайте попробуем использовать SMTP-скрипты на нашем сервере и посмотрим, приведёт ли это к сбою.
Мы можем запустить SMTP-аудит нашего сервера уязвимостей, введя:
kali > generic_send_tcp 192.168.181.129 9999 usr/share/spike/audits/SMTP/smtp1.spk 0 0
Как видите выше, Spike начинает отправлять входные данные случайного размера на SMTP-сервер, проверяя, сможет ли этот протокол работать с этими данными. Если вернуться к системе Windows, на которой запущен vulnserver, то можно увидеть, что она выдержала наш натиск случайных данных!
Хотя сервер выдержал этот натиск, мы можем использовать ещё множество скачков, чтобы попытаться вывести его из строя. В реальной ситуации мы, вероятно, перепробовали бы ВСЕ эти готовые скачки, прежде чем перейти к следующему этапу — созданию собственного скрипта скачков.
Шаг №3 Создание собственного сценария фаззинга в Spike
Теперь попробуем создать собственный скрипт Spike для проверки команды TRUN, поддерживаемой нашим уязвимым сервером (когда мы подключались к серверу через netcat, он отображал допустимые команды после ввода HELP). Откроем любой текстовый редактор, чтобы создать наш скрипт. Я буду использовать Leafpad из Kali, но вы можете использовать любой удобный вам текстовый редактор. Все они будут работать.
Мы создаем короткий сценарий из трех (3) строк, который:
(1) читает баннер, который отправляет сервер;
(2) имитирует то, что пользователь ввел TRUN в оболочку в качестве своей команды; и
(3) рандомизирует пользовательский ввод, отправленный с помощью команды TRUN.
Ознакомьтесь со скриптом ниже с соответствующими командами для выполнения каждой из этих задач. По сути, мы просто считываем баннер с сервера, а затем запускаем команду TRUN с рандомизированными входными данными, чтобы проверить, можем ли мы вызвать сбой сервера с помощью этих неожиданных и недопустимых входных данных.
После завершения скрипта Spike сохраните его как spiketrunaudit.spk в каталоге /usr/share/spike/audits (на самом деле имя файла и каталога могут быть любыми по вашему усмотрению, но чтобы упростить создание вашего первого скрипта Spike, рекомендуется просто дословно следовать моим инструкциям).
После того как мы завершили и сохранили скрипт, давайте запустим его на нашем уязвимом сервере.
kali > generic_send_tcp 192.168.181.129 9999 /usr/share/spike/audits/spiketrunaudit.spk 0 0
Где:
192.168.181.129 — целевой IP
9999 — номер целевого порта
/usr/share/spike/audit/spiketrunaudit.spk — абсолютный путь к нашему скрипту
0 — это значение SPKVAR
0 — это значение SPKSTR
После нажатия Enter Spike начнёт отправлять эти данные на наш уязвимый сервер, как показано ниже. В итоге мы увидим следующее сообщение: «Не удалось подключиться к цели по протоколу TCP». Что-то явно пошло не так!
Вернёмся к нашей системе Windows 7, на которой работает наш уязвимый сервер. Как видите ниже, наш уязвимый сервер перестал работать. В результате фаззинга сервер был выведен из строя, и поэтому мы получили сообщение в Kali о том, что подключение к нему невозможно.
Заключение
Spike — это фреймворк для создания скриптов фаззинга, обеспечивающий ему гибкость и адаптивность. Некоторые стандартные скрипты фаззинга включены в установку по умолчанию, и мы можем протестировать их на наличие известных уязвимостей в некоторых распространённых протоколах
. Однако настоящая сила Spike заключается в его способности генерировать пользовательские скрипты, которые можно использовать в различных протоколах для проверки возможности переполнения или сбоя переменной. Таким образом, мы получим фундаментальное представление об уязвимости протокола/приложения, после чего сможем разработать эксплойт для её использования. В другом уроке мы рассмотрим эту уязвимость и попытаемся расшифровать её информацию о том, как создать эксплойт для неё.