From b8056e2026c1d6f71133ecfefa3aea51cb97f5af Mon Sep 17 00:00:00 2001 From: evilsocket Date: Sat, 23 Mar 2019 14:11:28 +0100 Subject: [PATCH] misc: small fix or general refactoring i did not bother commenting --- modules/wifi/wifi.go | 68 ++++++--------------------- modules/wifi/wifi_recon.go | 6 --- modules/wifi/wifi_recon_handshakes.go | 31 +++++------- 3 files changed, 27 insertions(+), 78 deletions(-) diff --git a/modules/wifi/wifi.go b/modules/wifi/wifi.go index a61af5e3..998c2121 100644 --- a/modules/wifi/wifi.go +++ b/modules/wifi/wifi.go @@ -23,31 +23,22 @@ import ( "github.com/evilsocket/islazy/tui" ) -type parsedShake struct { - Radiotap *layers.RadioTap - Dot11 *layers.Dot11 - Packet gopacket.Packet -} - type WiFiModule struct { session.SessionModule - iface *network.Endpoint - handle *pcap.Handle - source string - region string - txPower int - minRSSI int - channel int - hopPeriod time.Duration - hopChanges chan bool - frequencies []int - ap *network.AccessPoint - stickChan int - - shakesFile string - shakesHistory []parsedShake - + iface *network.Endpoint + handle *pcap.Handle + source string + region string + txPower int + minRSSI int + channel int + hopPeriod time.Duration + hopChanges chan bool + frequencies []int + ap *network.AccessPoint + stickChan int + shakesFile string skipBroken bool pktSourceChan chan gopacket.Packet pktSourceChanClosed bool @@ -75,7 +66,6 @@ func NewWiFiModule(s *session.Session) *WiFiModule { stickChan: 0, hopPeriod: 250 * time.Millisecond, hopChanges: make(chan bool), - shakesHistory: make([]parsedShake, 0), ap: nil, skipBroken: true, apRunning: false, @@ -520,41 +510,11 @@ func (mod *WiFiModule) updateStats(dot11 *layers.Dot11, packet gopacket.Packet) } } -func (mod *WiFiModule) loadHandshakes() { - mod.shakesHistory = make([]parsedShake, 0) - - if !fs.Exists(mod.shakesFile) { - return - } - - handle, err := pcap.OpenOffline(mod.shakesFile) - if err != nil { - mod.Debug("can't open handshakes file: %v", mod.shakesFile) - return - } - defer handle.Close() - - mod.Info("loading handshakes from %s", mod.shakesFile) - - src := gopacket.NewPacketSource(handle, handle.LinkType()) - for packet := range src.Packets() { - if ok, radiotap, dot11 := packets.Dot11Parse(packet); ok { - mod.shakesHistory = append(mod.shakesHistory, parsedShake{ - Radiotap: radiotap, - Dot11: dot11, - Packet: packet, - }) - } - } -} - func (mod *WiFiModule) Start() error { if err := mod.Configure(); err != nil { return err } - mod.loadHandshakes() - mod.SetRunning(true, func() { // start channel hopper if needed if mod.channel == 0 && mod.source == "" { @@ -591,7 +551,7 @@ func (mod *WiFiModule) Start() error { mod.discoverProbes(radiotap, dot11, packet) mod.discoverAccessPoints(radiotap, dot11, packet) mod.discoverClients(radiotap, dot11, packet) - mod.discoverHandshakes(radiotap, dot11, packet, false) + mod.discoverHandshakes(radiotap, dot11, packet) mod.updateInfo(dot11, packet) mod.updateStats(dot11, packet) } diff --git a/modules/wifi/wifi_recon.go b/modules/wifi/wifi_recon.go index 5ec36e0a..6e62d0d9 100644 --- a/modules/wifi/wifi_recon.go +++ b/modules/wifi/wifi_recon.go @@ -70,12 +70,6 @@ func (mod *WiFiModule) discoverAccessPoints(radiotap *layers.RadioTap, dot11 *la ap.EachClient(func(mac string, station *network.Station) { station.Handshake.SetBeacon(packet) }) - } else { - // every time we detect a new ap, see if we have - // its handshakes in our pcap already - for _, h := range mod.shakesHistory { - mod.discoverHandshakes(h.Radiotap, h.Dot11, h.Packet, true) - } } } else { mod.Debug("skipping %s with %d dBm", from.String(), radiotap.DBMAntennaSignal) diff --git a/modules/wifi/wifi_recon_handshakes.go b/modules/wifi/wifi_recon_handshakes.go index a9c4a15d..c8977b01 100644 --- a/modules/wifi/wifi_recon_handshakes.go +++ b/modules/wifi/wifi_recon_handshakes.go @@ -18,14 +18,12 @@ func allZeros(s []byte) bool { return true } -func (mod *WiFiModule) discoverHandshakes(radiotap *layers.RadioTap, dot11 *layers.Dot11, packet gopacket.Packet, readOnly bool) { +func (mod *WiFiModule) discoverHandshakes(radiotap *layers.RadioTap, dot11 *layers.Dot11, packet gopacket.Packet) { if ok, key, apMac, staMac := packets.Dot11ParseEAPOL(packet, dot11); ok { // first, locate the AP in our list by its BSSID ap, found := mod.Session.WiFi.Get(apMac.String()) if !found { - if !readOnly { - mod.Warning("could not find AP with BSSID %s", apMac.String()) - } + mod.Warning("could not find AP with BSSID %s", apMac.String()) return } @@ -78,8 +76,8 @@ func (mod *WiFiModule) discoverHandshakes(radiotap *layers.RadioTap, dot11 *laye // if we have unsaved packets as part of the handshake, save them. numUnsaved := station.Handshake.NumUnsaved() doSave := numUnsaved > 0 - if !readOnly && doSave && mod.shakesFile != "" { - mod.Debug("saving handshake frames to %s", mod.shakesFile) + if doSave && mod.shakesFile != "" { + mod.Info("saving handshake frames to %s", mod.shakesFile) if err := mod.Session.WiFi.SaveHandshakesTo(mod.shakesFile, mod.handle.LinkType()); err != nil { mod.Error("error while saving handshake frames to %s: %s", mod.shakesFile, err) } @@ -88,23 +86,20 @@ func (mod *WiFiModule) discoverHandshakes(radiotap *layers.RadioTap, dot11 *laye // if we had unsaved packets and either the handshake is complete // or it contains the PMKID, generate a new event. if doSave && (rawPMKID != nil || station.Handshake.Complete()) { - if !readOnly { - mod.Session.Events.Add("wifi.client.handshake", HandshakeEvent{ - File: mod.shakesFile, - NewPackets: numUnsaved, - AP: apMac.String(), - Station: staMac.String(), - PMKID: rawPMKID, - }) - } + mod.Session.Events.Add("wifi.client.handshake", HandshakeEvent{ + File: mod.shakesFile, + NewPackets: numUnsaved, + AP: apMac.String(), + Station: staMac.String(), + PMKID: rawPMKID, + }) // make sure the info that we have key material for this AP // is persisted even after stations are pruned due to inactivity ap.WithKeyMaterial(true) } - // if we're only collecting handshakes from history or if we - // added ourselves as a client station but we didn't get any + // if we added ourselves as a client station but we didn't get any // PMKID, just remove it from the list of clients of this AP. - if (readOnly && staAdded) || (staIsUs && rawPMKID == nil) { + if staAdded || (staIsUs && rawPMKID == nil) { ap.RemoveClient(staMac.String()) } }