Bettercap 是一款瑞士军刀(github地址),这款开源软件可用于网络攻击和监控:
- Bettercap支持的特性与模块
- macOS上部署 bettercap
- Bettercap 使用说明
- Bettercap模块介绍
- Bettercap常用功能介绍
Bettercap支持的特性与模块
Core
-- events.stream
-- ticker
-- api.rest
-- update.check
Bluetooth Low Energy
-- ble.recon / enum / write
802.11
-- wifi.recon / deauth / ap
-
Ethernet and IP
-- net.recon
-- net.probe
-- net.sniff
-- syn.scan
-- wake on lan
-- Spoofers
- arp.spoof
- dhcp6.spoof
- dns.spoof
-- Proxies
- packet.proxy
- tcp.proxy
- http.proxy
- https.proxy
Servers
-- http.server
Utils
-- mac.changer
-- gps
Compilation
-- on Linux and macOS
-- on Windows
-- on Android
-- cross compilation(ARM example)
macOS上部署 bettercap
brew install bettercap
Bettercap 使用说明
基本命令行参数介绍(bettercap -h):
参数 |
描述 |
-autostart MODULES |
自动启动时指定的以逗号分隔的模块列表(默认是 events.stream, net.recon, update.check) |
-caplet FILENAME |
从指定的文件读取命令,在交互模式的会话中执行他们 |
-eval COMMANDS |
使用;作为分隔符,运行一个或多个命令,在交互式 会话中,用于通过命令行设置变量。 |
-iface INTERFACE |
用于绑定的网络卡,如果为空,默认的接口将自动选 择(接受网卡名、ip 或者 mac 地址) |
-no-history |
禁用交互模式的历史文件(~/.bettercap.history) |
-env-file FILENAME |
加载环境变量文件(默认是~/bettercap.env) |
-cpu-profile FILENAME |
写入cpu 配置(用于 debug 和基准测试) |
-mem-profile FILENAME |
写入内存配置(用于 debug 和基准测试) |
-silent |
不输出所有非错误的日志 |
-debug |
开启调试信息 |
基本命令介绍
运行Bettercap进入交互模式:
help 命令:查看帮助信息
命令 |
描述 |
Help MODULE |
查看MODULE的信息 |
active |
打印所有运行的模块 |
quit |
退出bettercap shell |
sleep SECONDS |
睡眠 SECONDS 秒 |
get NAME |
获取变量的值(支持通配符) |
set NAME VALUE |
设置 NAME 变量的值为 VALUE |
clear |
清屏 |
include CAPLET |
加载且运行名字为CAPLET 的caplet 到当前会话 |
! COMMAND |
执行 linux shell 命令 COMMAND |
alias MAC NAME |
将 MAC 地址别名成 NAME |
bettercap shell 命令
命令 |
描述 |
Help MODULE |
查看MODULE的信息 |
active |
打印所有运行的模块 |
quit |
退出bettercap shell |
sleep SECONDS |
睡眠 SECONDS 秒 |
get NAME |
获取变量的值(支持通配符) |
set NAME VALUE |
设置 NAME 变量的值为 VALUE |
clear |
清屏 |
include CAPLET |
加载且运行名字为CAPLET 的caplet 到当前会话 |
! COMMAND |
执行 linux shell 命令 COMMAND |
alias MAC NAME |
将 MAC 地址别名成 NAME |
Bettercap模块介绍
events.stream
命令 |
描述 |
events.stream on |
开始事件流 |
events.stream off |
停止事件流 |
events.show LIMIT? |
显示事件流(Example:events.show 1 ) |
events.waitfor TAG TIMEOUT? |
永久或指定的时间内等待给定的 TAG事件 (Example:events.waitfor endpoint.new, events.waitfor ble.device.new 10 ) |
events.ignore FILTER |
将不会显示带有匹配该筛选器的标识符的事件.(example: events.ignore endpoint.lost ) |
events.include FILTER |
删除 events.ignore 中的标识符 |
events.filters |
打印过滤的事件 |
events.clear |
删除所有的事件流 |
描述:将事件打印为连续流
模块命令:
命令 |
描述 |
events.stream on |
开始事件流 |
events.stream off |
停止事件流 |
events.show LIMIT? |
显示事件流(Example:events.show 1 ) |
events.waitfor TAG TIMEOUT? |
永久或指定的时间内等待给定的 TAG事件 (Example:events.waitfor endpoint.new, events.waitfor ble.device.new 10 ) |
events.ignore FILTER |
将不会显示带有匹配该筛选器的标识符的事件.(example: events.ignore endpoint.lost ) |
events.include FILTER |
删除 events.ignore 中的标识符 |
events.filters |
打印过滤的事件 |
events.clear |
删除所有的事件流 |
参数 |
描述 |
events.stream.output |
如果为空则事件将打印到标准输出,否则输出到指定的文件 |
模块参数
参数 |
描述 |
events.stream.output |
如果为空则事件将打印到标准输出,否则输出到指定的文件 |
net.recon
命令 |
描述 |
net.recon on |
开始网络主机发现 |
net.recon off |
停止网络主机发现 |
net.show |
展示主机列表缓存(默认按照 ip 排序) |
net.show by seen |
展示主机列表缓存(按照更新时间来排序) |
net.show by sent |
展示主机列表缓存(按照发送包来排序) |
net.show by rcvd |
展示主机列表缓存(按照接收包来排序) |
描述:周期性查看 arp 缓存,用于管理网络中的新主机
模块命令:
命令 |
描述 |
net.recon on |
开始网络主机发现 |
net.recon off |
停止网络主机发现 |
net.show |
展示主机列表缓存(默认按照 ip 排序) |
net.show by seen |
展示主机列表缓存(按照更新时间来排序) |
net.show by sent |
展示主机列表缓存(按照发送包来排序) |
net.show by rcvd |
展示主机列表缓存(按照接收包来排序) |
net.probe
命令 |
描述 |
net.probe on |
在后台开启网络主机探测 |
net.probe off |
在后台关闭网络主机探测 |
描述:探测网络上的新主机,通过将虚拟 udp 数据包发送子网上的每个可能的ip
模块命令:
命令 |
描述 |
net.probe on |
在后台开启网络主机探测 |
net.probe off |
在后台关闭网络主机探测 |
参数 |
描述 |
net.probe.throttle |
如果大于 0,则探测包将以毫秒为单位进行节流。 (默认=10 ) |
模块参数:
参数 |
描述 |
net.probe.throttle |
如果大于 0,则探测包将以毫秒为单位进行节流。 (默认=10 ) |
net.sniff
命令 |
描述 |
net.sniff stats |
打印嗅探配置和数据 |
net.sniff on |
开启网络嗅探 |
net.sniff off |
关闭网络嗅探 |
描述:嗅探本网络的数据包
模块命令:
命令 |
描述 |
net.sniff stats |
打印嗅探配置和数据 |
net.sniff on |
开启网络嗅探 |
net.sniff off |
关闭网络嗅探 |
参数 |
描述 |
net.sniff.local |
如果为 true,则考虑该计算机收发的数据包 |
net.sniff.filter |
为嗅探设置 bpf 过滤规则(默认=not arp ) |
net.sniff.regexp |
如果设置,只有满足该正则表达式的包会被嗅探 |
net.sniff.output |
如果设置,则将抓到的包 |
net.sniff.source |
从指定的 pcap 文件中嗅探数据包 |
net.sniff.verbose |
如果为 true 则每一个抓到的包都会发送给event.stream 去显示,否则只有被应用层识别到的才会发送给event.stream(比如 sni,http 等) |
模块参数:
参数 |
描述 |
net.sniff.local |
如果为 true,则考虑该计算机收发的数据包 |
net.sniff.filter |
为嗅探设置 bpf 过滤规则(默认=not arp ) |
net.sniff.regexp |
如果设置,只有满足该正则表达式的包会被嗅探 |
net.sniff.output |
如果设置,则将抓到的包 |
net.sniff.source |
从指定的 pcap 文件中嗅探数据包 |
net.sniff.verbose |
如果为 true 则每一个抓到的包都会发送给event.stream 去显示,否则只有被应用层识别到的才会发送给event.stream(比如 sni,http 等) |
arp.spoof
命令 |
描述 |
arp.spoof on |
开启 arp 欺骗,实现二层转发 |
arp.ban on |
开启 arp 欺骗,并进行阻断 |
arp.spoof off |
关闭 arp 欺骗 |
arp.ban off |
关闭 arp 欺骗 |
模块介绍:对该网络中的主机进行 arp 欺骗
模块命令:
命令 |
描述 |
arp.spoof on |
开启 arp 欺骗,实现二层转发 |
arp.ban on |
开启 arp 欺骗,并进行阻断 |
arp.spoof off |
关闭 arp 欺骗 |
arp.ban off |
关闭 arp 欺骗 |
参数 |
描述 |
arp.spoof.targets |
设置arp欺骗的主机以逗号分隔,默认是整个子网 |
arp.spoof.whitelist |
设置arp欺骗的白名单,默认为空 |
模块参数:
参数 |
描述 |
arp.spoof.targets |
设置arp欺骗的主机以逗号分隔,默认是整个子网 |
arp.spoof.whitelist |
设置arp欺骗的白名单,默认为空 |
dhcp6.spoof
命令 |
描述 |
dhcp6.spoof on |
开启 dhcp v6 的欺骗 |
dhcp6.spoof off |
关闭 dhcpv6 的欺骗 |
模块介绍:回应 dhcp6 报文,将攻击者设置为受害者的 dns 服务器
模块命令:
命令 |
描述 |
dhcp6.spoof on |
开启 dhcp v6 的欺骗 |
dhcp6.spoof off |
关闭 dhcpv6 的欺骗 |
参数 |
描述 |
dhcp6.spoof.domains |
设置对指定的域名进行欺骗 |
模块参数:
参数 |
描述 |
dhcp6.spoof.domains |
设置对指定的域名进行欺骗 |
dns.spoof
命令 |
描述 |
dns.spoof on |
开启 dns 的欺骗 |
dns.spoof off |
关闭 dns 的欺骗 |
模块介绍:回应 dns 欺骗报文
模块命令:
命令 |
描述 |
dns.spoof on |
开启 dns 的欺骗 |
dns.spoof off |
关闭 dns 的欺骗 |
参数 |
描述 |
dns.spoof.domains |
指定欺骗的域名,用逗号分隔,默认是* |
dns.spoof.address |
域名映射到的 ip 地址,默认为<interface address>
|
dns.spoof.all |
如果为 true,响应所有的 dns 报文,否则只响应 dns报文目的地址为本地的报文 |
模块参数:
参数 |
描述 |
dns.spoof.domains |
指定欺骗的域名,用逗号分隔,默认是* |
dns.spoof.address |
域名映射到的 ip 地址,默认为<interface address>
|
dns.spoof.all |
如果为 true,响应所有的 dns 报文,否则只响应 dns报文目的地址为本地的报文 |
mac.changer
命令 |
描述 |
mac.changer on |
开启 mac 修改模块 |
mac.changer off |
关闭 mac 修改模块 |
模块介绍:修改活跃接口的 mac 地址
模块命令:
命令 |
描述 |
mac.changer on |
开启 mac 修改模块 |
mac.changer off |
关闭 mac 修改模块 |
参数 |
描述 |
mac.changer.iface |
修改的接口名 |
mac.changer.adress |
新的 mac 地址 |
模块参数:
参数 |
描述 |
mac.changer.iface |
修改的接口名 |
mac.changer.adress |
新的 mac 地址 |
syn.scan
命令 |
描述 |
syn.scan IP-RANGE [START-PORT] [END- PORT] |
对给出的ip得知或者网络进行给定的端口范围进行syn扫描 |
mac.changer.adress |
新的mac地址 |
模块介绍:执行 syn 的端口扫描
模块命令:
命令 |
描述 |
syn.scan IP-RANGE [START-PORT] [END- PORT] |
对给出的ip得知或者网络进行给定的端口范围进行syn扫描 |
mac.changer.adress |
新的mac地址 |
Bettercap常用功能介绍
dns spoof
开启bettercap,并打开 dns 欺骗的功能,并在同一网段的另外一台
windows7上设置 dns 地址为 macOS的地址:
在 windows7 上 ping www.koudai8.com
在 bettercap 上收到 dns 请求并进行 dns 欺骗
总结:(参考)
arp spoof + sniff
开启嗅探功能、arp 欺骗功能,把抓到的包存为/Users/zeno/Downloads/test.pcap
查看抓包效果
arp spoof + http proxy
(参考)
编写一个 js 脚本,在目标网页加入一句图中的代码,这里我将它保存 /Users/zeno/Downloads/http_test.js
开启 bettercap
启动主机发现、http 代理、https 代理、arp 欺骗
使用同一网络的另外一台 window7 去访问 http 网页
查看 window7 上网页的 web 页面的源码,如下图已经被 inject 了目标代码
查看 bettercap 的 shell,成功调用 bettercap 的 inject 脚本
注:攻击者可以自行重写 js 脚本实现自定义的功能