diff --git a/wifite/args.py b/wifite/args.py index 2be24bf..af6b618 100755 --- a/wifite/args.py +++ b/wifite/args.py @@ -31,6 +31,7 @@ class Arguments(object): self._add_wep_args(parser.add_argument_group(Color.s('{C}WEP{W}'))) self._add_wpa_args(parser.add_argument_group(Color.s('{C}WPA{W}'))) self._add_wps_args(parser.add_argument_group(Color.s('{C}WPS{W}'))) + self._add_pmkid_args(parser.add_argument_group(Color.s('{C}PMKID{W}'))) self._add_eviltwin_args(parser.add_argument_group(Color.s('{C}EVIL TWIN{W}'))) self._add_command_args(parser.add_argument_group(Color.s('{C}COMMANDS{W}'))) @@ -292,23 +293,6 @@ class Arguments(object): wpa.add_argument('-wpa', help=argparse.SUPPRESS, action='store_true', dest='wpa_filter') - wpa.add_argument('--pmkid', - action='store_true', - dest='use_pmkid_only', - help=Color.s('{O}Only{W} use {C}PMKID capture{W}, avoids other WPS & ' + - 'WPA attacks (default: {G}off{W})')) - # Alias - wpa.add_argument('-pmkid', action='store_true', dest='use_pmkid_only', - help=argparse.SUPPRESS) - - wpa.add_argument('--pmkid-timeout', - action='store', - dest='pmkid_timeout', - metavar='[sec]', - type=int, - help=self._verbose('Time to wait for PMKID capture ' + - '(default: {G}%d{W} seconds)' % self.config.pmkid_timeout)) - wpa.add_argument('--hs-dir', action='store', dest='wpa_handshake_dir', @@ -443,6 +427,22 @@ class Arguments(object): wps.add_argument('-wpsto', help=argparse.SUPPRESS, action='store', dest='wps_timeout_threshold', type=int) + def _add_pmkid_args(self, pmkid): + pmkid.add_argument('--pmkid', + action='store_true', + dest='use_pmkid_only', + help=Color.s('{O}Only{W} use {C}PMKID capture{W}, avoids other WPS & ' + + 'WPA attacks (default: {G}off{W})')) + # Alias + pmkid.add_argument('-pmkid', help=argparse.SUPPRESS, action='store_true', dest='use_pmkid_only') + + pmkid.add_argument('--pmkid-timeout', + action='store', + dest='pmkid_timeout', + metavar='[sec]', + type=int, + help=Color.s('Time to wait for PMKID capture ' + + '(default: {G}%d{W} seconds)' % self.config.pmkid_timeout)) def _add_command_args(self, commands): commands.add_argument('--cracked', @@ -470,7 +470,7 @@ class Arguments(object): if __name__ == '__main__': from .util.color import Color - from config import Configuration + from .config import Configuration Configuration.initialize(False) a = Arguments(Configuration) args = a.args diff --git a/wifite/config.py b/wifite/config.py index 74ac894..9759ff5 100755 --- a/wifite/config.py +++ b/wifite/config.py @@ -78,6 +78,8 @@ class Configuration(object): cls.wpa_handshake_dir = 'hs' # Dir to store handshakes cls.wpa_strip_handshake = False # Strip non-handshake packets cls.ignore_old_handshakes = False # Always fetch a new handshake + + # PMKID variables cls.use_pmkid_only = False # Only use PMKID Capture+Crack attack cls.pmkid_timeout = 30 # Time to wait for PMKID capture @@ -141,6 +143,7 @@ class Configuration(object): cls.parse_wep_args(args) cls.parse_wpa_args(args) cls.parse_wps_args(args) + cls.parse_pmkid_args(args) cls.parse_encryption() # EvilTwin @@ -308,14 +311,6 @@ class Configuration(object): Color.pl('{+} {C}option:{W} will {O}ignore{W} existing handshakes ' + '(force capture)') - if args.use_pmkid_only: - cls.use_pmkid_only = True - Color.pl('{+} {C}option:{W} will ONLY use {C}PMKID{W} attack on WPA networks') - - if args.pmkid_timeout: - cls.pmkid_timeout = args.pmkid_timeout - Color.pl('{+} {C}option:{W} will wait {G}%d{W} seconds during {C}PMKID{W} capture') - if args.wpa_handshake_dir: cls.wpa_handshake_dir = args.wpa_handshake_dir Color.pl('{+} {C}option:{W} will store handshakes to ' + @@ -360,7 +355,7 @@ class Configuration(object): '(no {O}Pixie-Dust{W}) on targets') if args.use_bully: - from tools.bully import Bully + from .tools.bully import Bully if not Bully.exists(): Color.pl('{!} {R}Bully not found. Defaulting to {O}reaver{W}') cls.use_bully = False @@ -388,6 +383,16 @@ class Configuration(object): cls.wps_ignore_lock = True Color.pl('{+} {C}option:{W} will {O}ignore{W} WPS lock-outs') + @classmethod + def parse_pmkid_args(cls, args): + if args.use_pmkid_only: + cls.use_pmkid_only = True + Color.pl('{+} {C}option:{W} will ONLY use {C}PMKID{W} attack on WPA networks') + + if args.pmkid_timeout: + cls.pmkid_timeout = args.pmkid_timeout + Color.pl('{+} {C}option:{W} will wait {G}%d seconds{W} during {C}PMKID{W} capture' % args.pmkid_timeout) + @classmethod def parse_encryption(cls): '''Adjusts encryption filter (WEP and/or WPA and/or WPS)''' @@ -410,9 +415,9 @@ class Configuration(object): def parse_wep_attacks(cls): '''Parses and sets WEP-specific args (-chopchop, -fragment, etc)''' cls.wep_attacks = [] - import sys + from sys import argv seen = set() - for arg in sys.argv: + for arg in argv: if arg in seen: continue seen.add(arg) if arg == '-arpreplay': cls.wep_attacks.append('replay')