fix: one beacon packet per handshake is saved in order to have both the ESSID and BSSID

This commit is contained in:
evilsocket 2019-02-06 07:08:01 +01:00
commit 1120f98be1
No known key found for this signature in database
GPG key ID: 1564D7F30393A456
4 changed files with 28 additions and 4 deletions

View file

@ -79,7 +79,11 @@ func (w *WiFiModule) discoverAccessPoints(radiotap *layers.RadioTap, dot11 *laye
frequency = int(radiotap.ChannelFrequency)
}
w.Session.WiFi.AddIfNew(ssid, bssid, frequency, radiotap.DBMAntennaSignal)
if ap, isNew := w.Session.WiFi.AddIfNew(ssid, bssid, frequency, radiotap.DBMAntennaSignal); !isNew {
ap.EachClient(func(mac string, station *network.Station) {
station.Handshake.SetBeacon(packet)
})
}
}
}
}

View file

@ -129,7 +129,7 @@ func isBogusMacESSID(essid string) bool {
return false
}
func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) *AccessPoint {
func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) (*AccessPoint, bool) {
w.Lock()
defer w.Unlock()
@ -141,7 +141,7 @@ func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) *AccessPoint
if !isBogusMacESSID(ssid) {
ap.Hostname = ssid
}
return ap
return ap, false
}
newAp := NewAccessPoint(ssid, mac, frequency, rssi)
@ -151,7 +151,7 @@ func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) *AccessPoint
w.newCb(newAp)
}
return nil
return newAp, true
}
func (w *WiFi) Get(mac string) (*AccessPoint, bool) {

View file

@ -97,6 +97,15 @@ func (ap *AccessPoint) Clients() (list []*Station) {
return
}
func (ap *AccessPoint) EachClient(cb func(mac string, station *Station)) {
ap.Lock()
defer ap.Unlock()
for m, station := range ap.clients {
cb(m, station)
}
}
func (ap *AccessPoint) NumHandshakes() int {
ap.Lock()
defer ap.Unlock()

View file

@ -8,6 +8,7 @@ import (
type Handshake struct {
sync.Mutex
Beacon gopacket.Packet
Challenges []gopacket.Packet
Responses []gopacket.Packet
Confirmations []gopacket.Packet
@ -23,6 +24,16 @@ func NewHandshake() *Handshake {
}
}
func (h *Handshake) SetBeacon(pkt gopacket.Packet) {
h.Lock()
defer h.Unlock()
if h.Beacon == nil {
h.Beacon = pkt
h.unsaved = append(h.unsaved, pkt)
}
}
func (h *Handshake) AddFrame(n int, pkt gopacket.Packet) {
h.Lock()
defer h.Unlock()