From db640bdff65a7e9e7be1349b09ee371444c1fd47 Mon Sep 17 00:00:00 2001 From: derv82 Date: Sat, 30 May 2015 12:08:31 -0700 Subject: [PATCH] Unit tests for Target parsing and Handshake detection --- py/Handshake.py | 28 ++++----- py/tests/__init__.py | 0 py/tests/files/airmon.output | 8 +++ py/tests/files/airodump.csv | 42 ++++++++++++++ py/tests/files/handshake_exists.cap | Bin 0 -> 120681 bytes .../handshake_exists.cap.stripped.tshark | Bin 0 -> 2780 bytes py/tests/files/handshake_not_exists.cap | Bin 0 -> 83029 bytes py/tests/test_Handshake.py | 48 ++++++++++++++++ py/tests/test_Target.py | 53 ++++++++++++++++++ 9 files changed, 165 insertions(+), 14 deletions(-) create mode 100644 py/tests/__init__.py create mode 100644 py/tests/files/airmon.output create mode 100644 py/tests/files/airodump.csv create mode 100644 py/tests/files/handshake_exists.cap create mode 100644 py/tests/files/handshake_exists.cap.stripped.tshark create mode 100644 py/tests/files/handshake_not_exists.cap create mode 100644 py/tests/test_Handshake.py create mode 100644 py/tests/test_Target.py diff --git a/py/Handshake.py b/py/Handshake.py index 00a7a80..6b18f27 100644 --- a/py/Handshake.py +++ b/py/Handshake.py @@ -273,22 +273,22 @@ class Handshake(object): return [] def analyze(self): - hs.divine_bssid_and_essid() + self.divine_bssid_and_essid() - pairs = hs.tshark_handshakes() - Handshake.print_pairs(pairs, 'tshark') + pairs = self.tshark_handshakes() + Handshake.print_pairs(pairs, self.capfile, 'tshark') - pairs = hs.pyrit_handshakes() - Handshake.print_pairs(pairs, 'pyrit') + pairs = self.pyrit_handshakes() + Handshake.print_pairs(pairs, self.capfile, 'pyrit') - pairs = hs.cowpatty_handshakes() - Handshake.print_pairs(pairs, 'cowpatty') + pairs = self.cowpatty_handshakes() + Handshake.print_pairs(pairs, self.capfile, 'cowpatty') - pairs = hs.aircrack_handshakes() - Handshake.print_pairs(pairs, 'aircrack') + pairs = self.aircrack_handshakes() + Handshake.print_pairs(pairs, self.capfile, 'aircrack') @staticmethod - def print_pairs(pairs, tool=None): + def print_pairs(pairs, capfile, tool=None): ''' Prints out BSSID and/or ESSID given a list of tuples (bssid,essid) ''' @@ -298,19 +298,19 @@ class Handshake(object): if len(pairs) == 0: Color.pl("{!} %s%s {R}does not{O} contain a handshake{W}" - % (tool_str,hs.capfile)) + % (tool_str, capfile)) return for (bssid, essid) in pairs: if bssid and essid: Color.pl("{+} %s%s {G}contains a handshake{W} for {G}%s{W} ({G}%s{W})" - % (tool_str, hs.capfile, bssid, essid)) + % (tool_str, capfile, bssid, essid)) elif bssid: Color.pl("{+} %s%s {G}contains a handshake{W} for {G}%s{W}" - % (tool_str, hs.capfile, bssid)) + % (tool_str, capfile, bssid)) elif essid: Color.pl("{+} %s%s {G}contains a handshake{W} for ({G}%s{W})" - % (tool_str, hs.capfile, essid)) + % (tool_str, capfile, essid)) diff --git a/py/tests/__init__.py b/py/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/py/tests/files/airmon.output b/py/tests/files/airmon.output new file mode 100644 index 0000000..350b1b5 --- /dev/null +++ b/py/tests/files/airmon.output @@ -0,0 +1,8 @@ +No interfering processes found +PHY Interface Driver Chipset + +phy2 wlan0 rtl8187 Realtek Semiconductor Corp. RTL8187 + (mac80211 monitor mode vif enabled for [phy2]wlan0 on [phy2]wlan0mon) + (mac80211 station mode vif disabled for [phy2]wlan0) + + diff --git a/py/tests/files/airodump.csv b/py/tests/files/airodump.csv new file mode 100644 index 0000000..08f2654 --- /dev/null +++ b/py/tests/files/airodump.csv @@ -0,0 +1,42 @@ + +BSSID, First time seen, Last time seen, channel, Speed, Privacy, Cipher, Authentication, Power, # beacons, # IV, LAN IP, ID-length, ESSID, Key +78:24:AF:D5:29:98, 2015-05-30 11:28:44, 2015-05-30 11:28:44, 6, -1, WPA, , , -73, 0, 1, 0. 0. 0. 0, 0, , +00:13:10:33:A6:56, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA, TKIP,PSK, -71, 7, 0, 0. 0. 0. 0, 11, orangefloss, +D8:50:E6:D7:22:95, 2015-05-30 11:28:43, 2015-05-30 11:28:43, -1, -1, , , , -70, 0, 0, 0. 0. 0. 0, 0, , +F0:99:BF:0A:B5:B0, 2015-05-30 11:28:45, 2015-05-30 11:28:48, 6, 54, WPA2, CCMP,PSK, -70, 3, 0, 0. 0. 0. 0, 22, Ingham's Wi-Fi Network, +60:02:92:BC:08:00, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2 WPA, CCMP TKIP,PSK, -68, 17, 0, 0. 0. 0. 0, 13, HOME-89B5-2.4, +00:25:BC:8B:24:95, 2015-05-30 11:28:44, 2015-05-30 11:28:44, 6, 54, WPA2 WPA, CCMP TKIP,PSK, -68, 1, 0, 0. 0. 0. 0, 8, atlantis, +60:02:92:BC:08:02, 2015-05-30 11:28:44, 2015-05-30 11:28:49, 6, 54, OPN, , , -68, 5, 0, 0. 0. 0. 0, 11, xfinitywifi, +00:23:69:BA:6D:F0, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2 WPA, CCMP TKIP,PSK, -67, 21, 0, 0. 0. 0. 0, 15, Pine Lake Girl2, +46:32:C8:5C:0E:3D, 2015-05-30 11:28:44, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -67, 6, 0, 0. 0. 0. 0, 12, \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00, +44:32:C8:5C:0E:3C, 2015-05-30 11:28:44, 2015-05-30 11:28:48, 6, 54, WPA2 WPA, CCMP TKIP,PSK, -67, 5, 3, 0. 0. 0. 0, 9, HOME-0E3C, +60:02:92:BC:08:01, 2015-05-30 11:28:44, 2015-05-30 11:28:49, 6, 54, WPA2 WPA, CCMP TKIP,PSK, -69, 14, 0, 0. 0. 0. 0, 0, , +CC:A4:62:E8:E5:F0, 2015-05-30 11:28:44, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP TKIP,PSK, -67, 8, 0, 0. 0. 0. 0, 9, HOME-E5F2, +C2:A4:62:E8:E5:F0, 2015-05-30 11:28:44, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -65, 13, 0, 0. 0. 0. 0, 0, , +C6:A4:62:E8:E5:F0, 2015-05-30 11:28:45, 2015-05-30 11:28:50, 6, 54, OPN, , , -65, 14, 0, 0. 0. 0. 0, 11, xfinitywifi, +F0:99:BF:05:20:64, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -62, 30, 0, 0. 0. 0. 0, 4, JJML, +F2:64:20:05:BF:90, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -62, 23, 0, 0. 0. 0. 0, 9, JJMLGuest, +90:84:0D:DA:A8:87, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -62, 33, 5, 0. 0. 0. 0, 10, Rolston123, +10:0D:7F:8C:C1:FB, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -62, 12, 0, 0. 0. 0. 0, 12, The Internet, +00:00:00:00:00:00, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WEP, WEP, , -57, 138, 0, 0. 0. 0. 0, 0, , +00:1D:D5:9B:11:00, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP TKIP,PSK, -52, 32, 6, 0. 0. 0. 0, 9, HOME-1102, +00:24:7B:AB:5C:EE, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2 WPA, CCMP TKIP,PSK, -55, 16, 25, 0. 0. 0. 0, 11, myqwest0445, +02:1D:D5:9B:11:00, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -53, 41, 0, 0. 0. 0. 0, 0, , +06:1D:D5:9B:11:00, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, OPN, , , -53, 56, 0, 0. 0. 0. 0, 11, xfinitywifi, +00:F7:6F:CD:B2:2A, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -48, 44, 0, 0. 0. 0. 0, 13, im human 2015, +30:85:A9:39:D2:18, 2015-05-30 11:28:43, 2015-05-30 11:28:50, 6, 54, WPA2, CCMP,PSK, -21, 44, 4, 0. 0. 0. 0, 32, Uncle Router's Gigabit LAN Party, +00:0E:58:FA:7C:61, 2015-05-30 11:28:44, 2015-05-30 11:28:49, 6, -1, WPA, , , -1, 0, 57, 0. 0. 0. 0, 0, , +00:0E:58:F8:0B:B5, 2015-05-30 11:28:44, 2015-05-30 11:28:48, 6, -1, WPA, , , -1, 0, 59, 0. 0. 0. 0, 0, , +28:01:00:00:D0:00, 2015-05-30 11:28:44, 2015-05-30 11:28:44, 6, -1, , , , -1, 0, 0, 0. 0. 0. 0, 0, , +00:0E:58:E9:36:B3, 2015-05-30 11:28:44, 2015-05-30 11:28:48, 6, -1, WPA, , , -1, 0, 2, 0. 0. 0. 0, 0, , +05:00:40:00:BB:7C, 2015-05-30 11:28:50, 2015-05-30 11:28:50, -1, -1, , , , -1, 0, 0, 0. 0. 0. 0, 0, , + +Station MAC, First time seen, Last time seen, Power, # packets, BSSID, Probed ESSIDs +3A:01:44:32:C8:5C, 2015-05-30 11:28:44, 2015-05-30 11:28:44, -69, 3, 28:01:00:00:D0:00, +54:35:30:23:62:8E, 2015-05-30 11:28:43, 2015-05-30 11:28:50, -64, 7, 00:1D:D5:9B:11:00,HOME-1102 +10:40:F3:93:13:FA, 2015-05-30 11:28:44, 2015-05-30 11:28:48, -52, 4, 00:F7:6F:CD:B2:2A, +00:0E:58:FA:7C:61, 2015-05-30 11:28:45, 2015-05-30 11:28:50, -50, 6, 00:0E:58:E9:36:B3,Sonos_ynFI1HY4cF3gqPuljCuicmFZ66 +00:0E:58:E9:36:B3, 2015-05-30 11:28:43, 2015-05-30 11:28:49, -51, 124, 00:0E:58:FA:7C:61,Sonos_ynFI1HY4cF3gqPuljCuicmFZ66 +00:0E:58:F8:0B:B5, 2015-05-30 11:28:44, 2015-05-30 11:28:50, -48, 9, 00:0E:58:E9:36:B3,Sonos_ynFI1HY4cF3gqPuljCuicmFZ66 +5C:93:A2:0D:3D:63, 2015-05-30 11:28:44, 2015-05-30 11:28:50, -1, 22, 00:24:7B:AB:5C:EE, + diff --git a/py/tests/files/handshake_exists.cap b/py/tests/files/handshake_exists.cap new file mode 100644 index 0000000000000000000000000000000000000000..4e89e8ac220bb49138d7647f1202965141ae865f GIT binary patch literal 120681 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 literal 0 HcmV?d00001 diff --git a/py/tests/files/handshake_exists.cap.stripped.tshark b/py/tests/files/handshake_exists.cap.stripped.tshark new file mode 100644 index 0000000000000000000000000000000000000000..ad67421c04710f606a8448fffbb545342bcc6f92 GIT binary patch literal 2780 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 literal 0 HcmV?d00001 diff --git a/py/tests/test_Handshake.py b/py/tests/test_Handshake.py new file mode 100644 index 0000000..1c994f1 --- /dev/null +++ b/py/tests/test_Handshake.py @@ -0,0 +1,48 @@ +#!/usr/bin/python + +from Handshake import Handshake + +import unittest + +class TestHandshake(unittest.TestCase): + ''' Test suite for Target parsing an generation ''' + + def getFile(self, filename): + ''' Helper method to parse targets from filename ''' + import os, inspect + this_file = os.path.abspath(inspect.getsourcefile(self.getFile)) + this_dir = os.path.dirname(this_file) + return os.path.join(this_dir, 'files', filename) + + def testAnalyze(self): + hs_file = self.getFile('handshake_exists.cap') + hs = Handshake(hs_file, bssid='30:85:a9:39:d2:18') + try: + hs.analyze() + except Exception, e: + fail() + + def testHandshakeTshark(self): + hs_file = self.getFile('handshake_exists.cap') + hs = Handshake(hs_file, bssid='30:85:a9:39:d2:18') + assert(len(hs.tshark_handshakes()) > 0) + + def testHandshakePyrit(self): + hs_file = self.getFile('handshake_exists.cap') + hs = Handshake(hs_file, bssid='30:85:a9:39:d2:18') + assert(len(hs.pyrit_handshakes()) > 0) + + def testHandshakeCowpatty(self): + hs_file = self.getFile('handshake_exists.cap') + hs = Handshake(hs_file, bssid='30:85:a9:39:d2:18') + hs.divine_bssid_and_essid() + assert(len(hs.cowpatty_handshakes()) > 0) + + def testHandshakeAircrack(self): + hs_file = self.getFile('handshake_exists.cap') + hs = Handshake(hs_file, bssid='30:85:a9:39:d2:18') + assert(len(hs.aircrack_handshakes()) > 0) + + +if __name__ == '__main__': + unittest.main() diff --git a/py/tests/test_Target.py b/py/tests/test_Target.py new file mode 100644 index 0000000..6936ceb --- /dev/null +++ b/py/tests/test_Target.py @@ -0,0 +1,53 @@ +#!/usr/bin/python + +from Airodump import Airodump + +import unittest + +class TestTarget(unittest.TestCase): + ''' Test suite for Target parsing an generation ''' + + airodump_csv = 'airodump.csv' + + def getTargets(self, filename): + ''' Helper method to parse targets from filename ''' + import os, inspect + this_file = os.path.abspath(inspect.getsourcefile(TestTarget.getTargets)) + this_dir = os.path.dirname(this_file) + csv_file = os.path.join(this_dir, 'files', filename) + # Load targets from CSV file + return Airodump.get_targets_from_csv(csv_file) + + def testTargetParsing(self): + ''' Asserts target parsing finds targets ''' + targets = self.getTargets(TestTarget.airodump_csv) + assert(len(targets) > 0) + + def testTargetClients(self): + ''' Asserts target parsing captures clients properly ''' + targets = self.getTargets(TestTarget.airodump_csv) + for t in targets: + if t.bssid == '00:1D:D5:9B:11:00': + assert(len(t.clients) > 0) + + def testTargetFilter(self): + ''' Asserts target filtering works ''' + targets = self.getTargets(TestTarget.airodump_csv) + + opnTargets = Airodump.filter_targets(targets, opn=True, wpa=False, wep=False) + for t in opnTargets: + if 'OPN' not in t.encryption: + fail() + + wpaTargets = Airodump.filter_targets(targets, opn=False, wpa=True, wep=False) + for t in wpaTargets: + if 'WPA' not in t.encryption: + fail() + + wepTargets = Airodump.filter_targets(targets, opn=False, wpa=False, wep=True) + for t in wepTargets: + if 'WEP' not in t.encryption: + fail() + +if __name__ == '__main__': + unittest.main()