經過兩年多年來的更新,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