fix: added a mutex to write ops in the hid module

This commit is contained in:
evilsocket 2019-02-21 11:50:56 +01:00
commit d21f3b447a
No known key found for this signature in database
GPG key ID: 1564D7F30393A456
4 changed files with 11 additions and 0 deletions

View file

@ -23,6 +23,7 @@ type HIDRecon struct {
lastPing time.Time lastPing time.Time
useLNA bool useLNA bool
sniffLock *sync.Mutex sniffLock *sync.Mutex
writeLock *sync.Mutex
sniffAddrRaw []byte sniffAddrRaw []byte
sniffAddr string sniffAddr string
pingPayload []byte pingPayload []byte
@ -47,6 +48,7 @@ func NewHIDRecon(s *session.Session) *HIDRecon {
SessionModule: session.NewSessionModule("hid", s), SessionModule: session.NewSessionModule("hid", s),
waitGroup: &sync.WaitGroup{}, waitGroup: &sync.WaitGroup{},
sniffLock: &sync.Mutex{}, sniffLock: &sync.Mutex{},
writeLock: &sync.Mutex{},
hopPeriod: 100 * time.Millisecond, hopPeriod: 100 * time.Millisecond,
pingPeriod: 100 * time.Millisecond, pingPeriod: 100 * time.Millisecond,
sniffPeriod: 500 * time.Millisecond, sniffPeriod: 500 * time.Millisecond,

View file

@ -81,6 +81,9 @@ func (mod *HIDRecon) prepInjection() (error, *network.HIDDevice, []*Command) {
} }
func (mod *HIDRecon) doInjection() { func (mod *HIDRecon) doInjection() {
mod.writeLock.Lock()
defer mod.writeLock.Unlock()
err, dev, cmds := mod.prepInjection() err, dev, cmds := mod.prepInjection()
if err != nil { if err != nil {
mod.Error("%v", err) mod.Error("%v", err)

View file

@ -7,6 +7,9 @@ import (
) )
func (mod *HIDRecon) doHopping() { func (mod *HIDRecon) doHopping() {
mod.writeLock.Lock()
defer mod.writeLock.Unlock()
if mod.inPromMode == false { if mod.inPromMode == false {
if err := mod.dongle.EnterPromiscMode(); err != nil { if err := mod.dongle.EnterPromiscMode(); err != nil {
mod.Error("error entering promiscuous mode: %v", err) mod.Error("error entering promiscuous mode: %v", err)

View file

@ -40,6 +40,9 @@ func (mod *HIDRecon) setSniffMode(mode string) error {
} }
func (mod *HIDRecon) doPing() { func (mod *HIDRecon) doPing() {
mod.writeLock.Lock()
defer mod.writeLock.Unlock()
if mod.inSniffMode == false { if mod.inSniffMode == false {
if err := mod.dongle.EnterSnifferModeFor(mod.sniffAddrRaw); err != nil { if err := mod.dongle.EnterSnifferModeFor(mod.sniffAddrRaw); err != nil {
mod.Error("error entering sniffer mode for %s: %v", mod.sniffAddr, err) mod.Error("error entering sniffer mode for %s: %v", mod.sniffAddr, err)