经过两年多年来的更新,bettercap已经不再是以前那个bettercap了。。。对,没错,它变了!变得我差点不会用了。。。新版的bettercap v2.6采用类msf的嵌入式终端界面(其实我也不知道这种界面叫什么好,还是上图吧!)总而言之,它在各种模仿msf。。。
emmmm。。。怎么说呢,总体上使用感觉还是不错的,毕竟是这种终端界面,给人一种沉浸式的体验。但是还是有一些有待优化的地方,比如输出和输入混在一起的问题(arp输出多的时候简直了。。。)还有就是这个行标(就是光标前面的那一部分)似乎是和命令输入一起刷新的,用ssh连接的时候刷新比较慢,于是根本跟不上打字的速度。下面还是安装之前的套路介绍一下安装和使用。
安装:
用gem安装bettercap的时代早过去了(而且现在用gem也安装不了了,因为bettercap已经改用go语言编写)。。。但是它还不是kali默认内置的软件包,还需要自己安装,不过就是一句apt-get install bettercap的事。不过这是kali下的安装所以很简单。。。bettercap还支持X os、Android、Windows。。。不过想想就知道好麻烦。。。(ios的话因为这版bettercap放弃了ruby使用go语言开发,但是我并没有在cydia上看到go的解释器,所以不知道怎么安装)
使用: 这版bettercap的功能可以说是极大的丰富了。。。从原来的一个单纯的网络分析器真正的向所有的“cap”过渡了,不但支持以前的内网arp和dns欺骗,还提供了低功耗蓝牙(BLE)、GPS的嗅探以及给网络内指定MAC的设备发送远程唤醒信号(Wake On LAN)等功能,可以说已经非常强大了,如图所示:
我呢就给出一下中文翻译基本命令:
命令 | 功能 |
help | 显示如上帮助 |
help 模块名称 | 显示指定模块的帮助 |
active | 显示当前运行中的模块的信息 |
quit | 结束会话并退出 |
sleep 秒数 | 休眠指定的秒数(和shell中的sleep一样。。。可能方便写脚本吧) |
get 变量 | 获取变量的值 |
set 变量 值 | 设置变量的值(有些模块有自定义变量,比如可用net.sniff.output变量指定嗅探器的输出的保存路径) |
read 变量 提示 | 显示提示来让用户输入,输入内容会被储存在变量中(满满的basic的既视感。。。) |
clear | 清屏 |
include CAPLET | 在当前会话读取并运行这个caplet(我不知道这单词具体怎么翻译。。。不过这应该就是bettercap的脚本文件了,bettercap作者拿.cap文件和msf的.rc文件类比,详见bettercap维基) |
! 命令 | 运行相应的shell命令并显示输出 |
alias MAC地址 代号 | 提供MAC地址来给终端取一个代号(省的每次打MAC太麻烦了) |
模块:
api.rest:RESTful API模块
arp.spoof:arp欺骗模块
ble.recon:低功耗蓝牙设备发现模块
net.sniff :网络嗅探模块
dhcp6.spoof:dhcp6欺骗模块(通过伪造DHCP数据包篡改客户端的DNS服务器,因此需要与dns.spoof一并启用)
dns.spoof:DNS欺骗模块
events.stream:串流输出模块(就是不断地在终端界面刷出程序的输出,例如arp截获的信息)
wifi:wifi模块,有deauth攻击(wifi杀手)和创建软ap的功能
events模块详解:
命令 | 解释 |
---|---|
events.stream on | 开启输出流 |
events.stream off | 关闭输出流 |
events.show LIMIT? | 重新显示之前的全部输出 ( LIMIT 是可选的参数,用来显示输出的行数 ). |
events.waitfor TAG TIMEOUT? | 等待TAG时间触发到TIMEOUT超时(可能写脚本时比较方便) |
events.ignore FILTER | 设置忽略过滤器,不显示含有FILTER的输出 (想要设置多个过滤器需要多次使用该命令) |
events.include FILTER | 不要以为这个是只显示含有FILTER的输出。。。这个是拿来取消上一条命令的。。。WTF |
events.clear | 清除输出流缓存 |
events模块含有的变量:
变量 | 默认值 | 解释 |
---|---|---|
events.stream.output | 用来设置串流输出的文件(新版不再有原来的-O用来设置log,只能这样来输出到文件) | |
events.stream.http.request.dump | false | 为真时会丢弃http请求 |
events.stream.http.response.dump | false | 为真时会丢弃http应答 |
events.stream.output.rotate | true | 为真时会将输出文件分卷(以下设置的前提是你有设置输出文件) |
events.stream.output.rotate.compress | true | 为真时会压缩输出的log文件 |
events.stream.output.rotate.how | size | 按输出文件的大小还是运行时间来分卷 |
events.stream.output.rotate.when | 10485760 | 分卷的大小或者时间间隔 |
events.stream.output.rotate.format | 2006-01-02 15:04:05 | 输出文件文件名中的时间格式 |
ble.recon模块详解:
该模块用于低功耗蓝牙(BLE)设备的嗅探
指令
指令 | 解释 |
---|---|
ble.recon on | 开始嗅探BLE设备 |
ble.recon off | 停止嗅探BLE设备 |
ble.show | 显示已发现的BLE设备 |
ble.enum MAC | 列出该MAC指定的设备具有的service和characteristics的uuid以及characteristics的值 |
ble.write MAC UUID HEX_DATA | 在由MAC指定的BLE设备的由UUID指定的characteristics中写入HEX_DATA所给定的十六进制数据 |
栗子
连接BLE设备04:52:de:ad:be:ef,
列出characteristics并读取它的值
> ble.enum 04:52:de:ad:be:ef
向BLE设备04:52:de:ad:be:ef
中UUID为234bfbd5e3b34536a3fe723620d4b78d
的characteristics中写入字节
ff ff ff ff ff ff ff ff :
> ble.write 04:52:de:ad:be:ef 234bfbd5e3b34536a3fe723620d4b78d ffffffffffffffff
已知的问题
- ble.enum 每次运行只工作一次
- 对MAC os的支持不完整
- 不支持windows
wifi模块详解:
wifi.*模块需要一块支持监听模式和数据包注入的无线网卡来监听或攻击无线网络
指令
指令 | 解释 |
---|---|
wifi.recon on | 开始嗅探802.11无线接入点(AP) |
wifi.recon off | 停止嗅探802.11无线接入点 |
wifi.recon BSSID | 设置AP的BSSID来过滤 |
wifi.recon clear | 清除已设置的AP过滤条件 |
wifi.deauth BSSID | 启动802.11 deauth 攻击,如果指定了AP的BSSID则只打掉该AP的客户端,如果不指定BSSID将会打掉所有客户端(不就mdk3 d嘛……) |
wifi.show | 显示当前扫描到的AP列表,默认已信号强度排序 |
wifi.recon.channel CHANNEL | 指定要扫描的信道,多个信道间以","隔开 |
wifi.recon.channel clear | 清除信道设置(网卡将在所有可用信道中跳跃并扫描) |
wifi.ap | 发送伪造的广播数据包来创建干扰AP,需要先启动无线接入点嗅探(还是mdk3的功能) |
变量
变量 | 默认值 | 解释 |
---|---|---|
wifi.hop.period | 250 | 如果启用了信道跳跃 (wifi.recon.channel为空 ), 那么这个变量控制程序在不同信道间跳跃的间隔时间(单位毫秒)如果2.4和5G都可用的话这个时间会翻倍 |
wifi.source.file | 无 | 如果设置了这个变量,程序将从该变量指定的文件(.pcap)中读取数据 |
wifi.skip-broken | true | 如果该变量为true,校验值无效的802.11数据包会被忽略 |
wifi.ap.ssid | FreeWifi | 伪造AP的SSID |
wifi.ap.bssid | <random mac> | 伪造AP的BSSID |
wifi.ap.channel | 1 | 伪造AP的信道 |
wifi.ap.encryption | true | 如果该变量为真,伪造的AP将用WPA2加密,否则为开放 |
每个模块都有详细的帮助,我这里就不再一一翻译了,不过肯定你们心中还有一个疑问就是怎么像之前一样实现arp嗅探功能,在bettercap终端输入以下命令即可:
arp.spoof on
net.sniff on