Reaver PIN attack counts time forwards, does not time out.
This commit is contained in:
@@ -16,11 +16,14 @@ class AttackWPS(Attack):
|
|||||||
|
|
||||||
# Drop out if user specified to not use Reaver/Bully
|
# Drop out if user specified to not use Reaver/Bully
|
||||||
if Configuration.use_pmkid_only:
|
if Configuration.use_pmkid_only:
|
||||||
|
Color.pl('\r{!} {O}--pmkid{R} set, ignoring WPS attack on ' +
|
||||||
|
'{O}%s{W}' % self.target.essid)
|
||||||
self.success = False
|
self.success = False
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if Configuration.no_wps:
|
if Configuration.no_wps:
|
||||||
Color.pl('\r{!} {O}--no-wps{R} set, ignoring WPS attack on {O}%s{W}' % self.target.essid)
|
Color.pl('\r{!} {O}--no-wps{R} set, ignoring WPS attack on ' +
|
||||||
|
'{O}%s{W}' % self.target.essid)
|
||||||
self.success = False
|
self.success = False
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -50,15 +53,20 @@ class AttackWPS(Attack):
|
|||||||
def run_reaver(self):
|
def run_reaver(self):
|
||||||
from ..tools.reaver import Reaver
|
from ..tools.reaver import Reaver
|
||||||
reaver = Reaver(self.target)
|
reaver = Reaver(self.target)
|
||||||
if not reaver.is_pixiedust_supported():
|
|
||||||
Color.pl('{!} {R}your version of "reaver" does not support the {O}WPS pixie-dust attack{W}')
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Reaver: PixieDust then WPS PIN attack.
|
# Reaver: PixieDust then WPS PIN attack.
|
||||||
for pixie_dust in [True, False]:
|
for pixie_dust in [True, False]:
|
||||||
if pixie_dust and not reaver.is_pixiedust_supported():
|
if pixie_dust and not Configuration.wps_pixie:
|
||||||
Color.pl('{!} {R}your version of "reaver" does not support the {O}WPS pixie-dust attack{W}')
|
continue # Avoid Pixie-Dust attack
|
||||||
|
if not pixie_dust and not Configuration.wps_pin:
|
||||||
|
continue # Avoid PIN attack
|
||||||
|
|
||||||
|
if Configuration.wps_pixie and pixie_dust and \
|
||||||
|
not reaver.is_pixiedust_supported():
|
||||||
|
Color.pl('{!} {R}your version of "reaver" does not support the ' +
|
||||||
|
'{O}WPS pixie-dust attack{W}')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
reaver = Reaver(self.target, pixie_dust=pixie_dust)
|
reaver = Reaver(self.target, pixie_dust=pixie_dust)
|
||||||
try:
|
try:
|
||||||
reaver.run()
|
reaver.run()
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class Reaver(Attack, Dependency):
|
|||||||
|
|
||||||
self.pixie_dust = pixie_dust
|
self.pixie_dust = pixie_dust
|
||||||
|
|
||||||
self.progress = '0%'
|
self.progress = '0.00%'
|
||||||
self.state = 'Initializing'
|
self.state = 'Initializing'
|
||||||
self.locked = False
|
self.locked = False
|
||||||
self.total_attempts = 0
|
self.total_attempts = 0
|
||||||
@@ -51,7 +51,8 @@ class Reaver(Attack, Dependency):
|
|||||||
|
|
||||||
self.reaver_proc = None
|
self.reaver_proc = None
|
||||||
|
|
||||||
def is_pixiedust_supported(self):
|
@staticmethod
|
||||||
|
def is_pixiedust_supported():
|
||||||
''' Checks if 'reaver' supports WPS Pixie-Dust attack '''
|
''' Checks if 'reaver' supports WPS Pixie-Dust attack '''
|
||||||
output = Process(['reaver', '-h']).stderr()
|
output = Process(['reaver', '-h']).stderr()
|
||||||
return '--pixie-dust' in output
|
return '--pixie-dust' in output
|
||||||
@@ -63,6 +64,7 @@ class Reaver(Attack, Dependency):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
# Failed with error
|
# Failed with error
|
||||||
self.pattack('{R}Failed:{O} %s' % str(e), newline=True)
|
self.pattack('{R}Failed:{O} %s' % str(e), newline=True)
|
||||||
|
Color.pexception(e)
|
||||||
return self.crack_result is not None
|
return self.crack_result is not None
|
||||||
|
|
||||||
# Stop reaver if it's still running
|
# Stop reaver if it's still running
|
||||||
@@ -138,7 +140,7 @@ class Reaver(Attack, Dependency):
|
|||||||
|
|
||||||
# Counters, timeouts, failures, locked.
|
# Counters, timeouts, failures, locked.
|
||||||
meta_statuses = []
|
meta_statuses = []
|
||||||
if self.total_attempts > 0:
|
if self.total_attempts > 0 and not self.pixie_dust:
|
||||||
meta_statuses.append('{C}PINs:%s{W}' % self.total_attempts)
|
meta_statuses.append('{C}PINs:%s{W}' % self.total_attempts)
|
||||||
|
|
||||||
if self.total_timeouts > 0:
|
if self.total_timeouts > 0:
|
||||||
@@ -198,7 +200,7 @@ class Reaver(Attack, Dependency):
|
|||||||
raise Exception('Reaver says "WPS pin not found"')
|
raise Exception('Reaver says "WPS pin not found"')
|
||||||
|
|
||||||
# Running-time failure
|
# Running-time failure
|
||||||
if self.running_time() > Configuration.wps_pixie_timeout:
|
if self.pixie_dust and self.running_time() > Configuration.wps_pixie_timeout:
|
||||||
raise Exception('Timeout after %d seconds' % Configuration.wps_pixie_timeout)
|
raise Exception('Timeout after %d seconds' % Configuration.wps_pixie_timeout)
|
||||||
|
|
||||||
# WPSFail count
|
# WPSFail count
|
||||||
@@ -224,16 +226,16 @@ class Reaver(Attack, Dependency):
|
|||||||
state = 'Associated'
|
state = 'Associated'
|
||||||
|
|
||||||
elif 'Starting Cracking Session.' in stdout_last_line:
|
elif 'Starting Cracking Session.' in stdout_last_line:
|
||||||
state = 'Waiting to try PIN'
|
state = 'Started Cracking'
|
||||||
|
|
||||||
elif 'Trying pin' in stdout_last_line:
|
elif 'Trying pin' in stdout_last_line:
|
||||||
state = 'Trying PIN'
|
state = 'Trying PIN'
|
||||||
|
|
||||||
elif 'Sending EAPOL START request' in stdout_last_line:
|
elif 'Sending EAPOL START request' in stdout_last_line:
|
||||||
state = 'Sending EAPOL Start request'
|
state = 'Sending EAPOL'
|
||||||
|
|
||||||
elif 'Sending identity response' in stdout_last_line:
|
elif 'Sending identity response' in stdout_last_line:
|
||||||
state = 'Sending identity response'
|
state = 'Sending ID'
|
||||||
self.locked = False
|
self.locked = False
|
||||||
|
|
||||||
elif 'Sending M' in stdout_last_line:
|
elif 'Sending M' in stdout_last_line:
|
||||||
@@ -267,7 +269,10 @@ class Reaver(Attack, Dependency):
|
|||||||
|
|
||||||
def pattack(self, message, newline=False):
|
def pattack(self, message, newline=False):
|
||||||
# Print message with attack information.
|
# Print message with attack information.
|
||||||
time_left = Configuration.wps_pixie_timeout - self.running_time()
|
if self.pixie_dust:
|
||||||
|
time_left = Configuration.wps_pixie_timeout - self.running_time()
|
||||||
|
else:
|
||||||
|
time_left = self.running_time()
|
||||||
|
|
||||||
Color.clear_entire_line()
|
Color.clear_entire_line()
|
||||||
Color.pattack('WPS',
|
Color.pattack('WPS',
|
||||||
|
|||||||
Reference in New Issue
Block a user