Files
wifite2/py/Configuration.py
derv82 1078a4d5de Crack results can be saved or loaded.
Although they're not saved or loaded at this time. :(
Also, BANNER!
2015-06-04 00:52:36 -07:00

220 lines
9.2 KiB
Python

#!/usr/bin/python
import os
class Configuration(object):
''' Stores configuration variables and functions for Wifite. '''
initialized = False # Flag indicating config has been initialized
temp_dir = None # Temporary directory
version = 2.00
@staticmethod
def initialize():
'''
Sets up default initial configuration values.
Also sets config values based on command-line arguments.
'''
# Only initialize this class once
if Configuration.initialized:
return
Configuration.initialized = True
Configuration.tx_power = 0 # Wifi transmit power (0 is default)
Configuration.interface = None
Configuration.target_channel = None # User-defined channel to scan
Configuration.target_essid = None # User-defined AP name
Configuration.target_bssid = None # User-defined AP BSSID
Configuration.pillage = False # "All" mode to attack everything
Configuration.encryption_filter = ['WEP', 'WPA', 'WPS']
# WEP variables
Configuration.wep_filter = False # Only attack WEP networks
Configuration.wep_pps = 600 # Packets per second
Configuration.wep_timeout = 600 # Seconds to wait before failing
Configuration.wep_crack_at_ivs = 10000 # Minimum IVs to start cracking
Configuration.require_fakeauth = False
Configuration.wep_restart_stale_ivs = 11 # Seconds to wait before restarting
# Aireplay if IVs don't increaes.
# "0" means never restart.
Configuration.wep_restart_aircrack = 30 # Seconds to give aircrack to crack
# before restarting the process.
# WEP-specific attacks
Configuration.wep_fragment = True
Configuration.wep_caffelatte = True
Configuration.wep_p0841 = True
Configuration.wep_hirte = True
Configuration.wep_crack_at_ivs = 10000 # Number of IVS to start cracking
# WPA variables
Configuration.wpa_filter = False # Only attack WPA networks
Configuration.wpa_deauth_timeout = 10 # Wait time between deauths
Configuration.wpa_attack_timeout = 500 # Wait time before failing
Configuration.wpa_handshake_dir = "hs" # Dir to store handshakes
# Default dictionary for cracking
Configuration.wordlist = None
wordlists = [
'/usr/share/wfuzz/wordlist/fuzzdb/wordlists-user-passwd/passwds/phpbb.txt',
'/usr/share/fuzzdb/wordlists-user-passwd/passwds/phpbb.txt'
]
for wlist in wordlists:
if os.path.exists(wlist):
Configuration.wordlist = wlist
break
# WPS variables
Configuration.wps_filter = False # Only attack WPS networks
Configuration.no_reaver = False # Do not use Reaver on WPS networks
Configuration.reaver = False # ONLY use Reaver on WPS networks
Configuration.pixie_only = False # ONLY use Pixie-Dust attack on WPS
Configuration.wps_pin_timeout = 600 # Seconds to wait before reaver fails
Configuration.wps_pixie_timeout = 600 # Seconds to wait before pixie fails
Configuration.wps_max_retries = 20 # Retries before failing
Configuration.wps_fail_threshold = 30 # Max number of failures
Configuration.wps_timeout_threshold = 30 # Max number of timeouts
Configuration.wps_skip_rate_limit = True # Skip rate-limited WPS APs
# Commands
Configuration.cracked = False
Configuration.check_handshake = None
Configuration.crack_wpa = None
Configuration.crack_wep = None
Configuration.update = False
# Overwrite config values with arguments (if defined)
Configuration.load_from_arguments()
@staticmethod
def load_from_arguments():
''' Sets configuration values based on Argument.args object '''
from Arguments import Arguments
args = Arguments(Configuration).args
if args.channel: Configuration.target_channel = args.channel
if args.interface: Configuration.interface = args.interface
if args.target_bssid: Configuration.target_bssid = args.target_bssid
if args.target_essid: Configuration.target_essid = args.target_essid
# WEP
if args.wep_filter: Configuration.wep_filter = args.wep_filter
if args.wep_pps: Configuration.wep_pps = args.wep_pps
if args.wep_timeout: Configuration.wep_timeout = args.wep_timeout
if args.require_fakeauth: Configuration.require_fakeauth = False
if args.wep_crack_at_ivs:
Configuration.wep_crack_at_ivs = args.wep_crack_at_ivs
if args.wep_restart_stale_ivs:
Configuration.wep_restart_stale_ivs = args.wep_restart_stale_ivs
if args.wep_restart_aircrack:
Configuration.wep_restart_aircrack = args.wep_restart_aircrack
# WPA
if args.wpa_filter: Configuration.wpa_filter = args.wpa_filter
if args.wordlist: Configuration.wordlist = args.wordlist
if args.wpa_deauth_timeout:
Configuration.wpa_deauth_timeout = args.wpa_deauth_timeout
if args.wpa_attack_timeout:
Configuration.wpa_attack_timeout = args.wpa_attack_timeout
if args.wpa_handshake_dir:
Configuration.wpa_handshake_dir = args.wpa_handshake_dir
# WPS
if args.wps_filter: Configuration.wps_filter = args.wps_filter
if args.reaver_only: Configuration.reaver_only = args.reaver_only
if args.no_reaver: Configuration.no_reaver = args.no_reaver
if args.pixie_only: Configuration.pixie_only = args.pixie_only
if args.wps_pixie_timeout:
Configuration.wps_pixie_timeout = args.wps_pixie_timeout
if args.wps_pin_timeout:
Configuration.wps_pin_timeout = args.wps_pin_timeout
if args.wps_max_retries:
Configuration.wps_max_retries = args.wps_max_retries
if args.wps_fail_threshold:
Configuration.wps_fail_threshold = args.wps_fail_threshold
if args.wps_timeout_threshold:
Configuration.wps_timeout_threshold = args.wps_timeout_threshold
if args.wps_ignore_rate_limit:
Configuration.wps_skip_rate_limit = not args.wps_ignore_rate_limit
# Adjust encryption filter
if Configuration.wep_filter or \
Configuration.wpa_filter or \
Configuration.wps_filter:
# Reset filter
Configuration.encryption_filter = []
if Configuration.wep_filter: Configuration.encryption_filter.append('WEP')
if Configuration.wpa_filter: Configuration.encryption_filter.append('WPA')
if Configuration.wps_filter: Configuration.encryption_filter.append('WPS')
# Commands
if args.cracked: Configuration.show_cracked = True
if args.crack_wpa: Configuration.crack_wpa = args.crack_wpa
if args.crack_wep: Configuration.crack_wep = args.crack_wep
if args.update: Configuration.update = True
if args.check_handshake: Configuration.check_handshake = args.check_handshake
if Configuration.interface == None:
# Interface wasn't defined, select it!
from Airmon import Airmon
Configuration.interface = Airmon.ask()
@staticmethod
def temp(subfile=''):
''' Creates and/or returns the temporary directory '''
if Configuration.temp_dir == None:
Configuration.temp_dir = Configuration.create_temp()
return Configuration.temp_dir + subfile
@staticmethod
def create_temp():
''' Creates and returns a temporary directory '''
from tempfile import mkdtemp
tmp = mkdtemp(prefix='wifite')
if not tmp.endswith(os.sep):
tmp += os.sep
return tmp
@staticmethod
def delete_temp():
''' Remove temp files and folder '''
if Configuration.temp_dir == None: return
if os.path.exists(Configuration.temp_dir):
for f in os.listdir(Configuration.temp_dir):
os.remove(Configuration.temp_dir + f)
os.rmdir(Configuration.temp_dir)
@staticmethod
def exit_gracefully(code=0):
''' Deletes temp and exist with the given code '''
Configuration.delete_temp()
exit(code)
@staticmethod
def dump():
''' (Colorful) string representation of the configuration '''
from Color import Color
max_len = 20
for key in Configuration.__dict__.keys():
max_len = max(max_len, len(key))
result = Color.s('{W}%s Value{W}\n' % 'Configuration Key'.ljust(max_len))
result += Color.s('{W}%s------------------{W}\n' % ('-' * max_len))
for (key,val) in sorted(Configuration.__dict__.iteritems()):
if key.startswith('__'): continue
if type(val) == staticmethod: continue
if val == None: continue
result += Color.s("{G}%s {W} {C}%s{W}\n" % (key.ljust(max_len),val))
return result
if __name__ == '__main__':
Configuration.initialize()
print Configuration.dump()